このチュートリアルでは、TwigとGetTextを使用してPHPアプリケーションに多言語サポートを追加する方法を示しています。 Symfonyの翻訳コンポーネントのようなユーザーランドソリューションよりも大幅に高速です。これを説明するために、既存の英語のみのアプリケーション(NOFW)を変更します。
重要な利点:
xgettext
.po
.mo
i18n
セットアップと基礎:Homesteadの改善を使用します(GetTextがすでにインストールされていると仮定します。手動インストールの指示は後で提供されます)。 nofwは小枝を使用するため、拡張子が必要です:
i18n
(注:これは、チュートリアルのために組み込みの国際化のない古いnofwバージョンをクローン化します。)
git clone https://github.com/swader/nofw cd nofw git checkout tags/2.93 -b 2.93 composer require twig/extensions
nofw readmeに従ってデータベースを構成します。 アプリケーションが実行されるようになりました。
getTextを使用して、
またはそのエイリアスを使用して、翻訳可能な文字列をマークします。 翻訳が見つからない場合、元の文字列(プレースホルダー)が返されます。
:gettext("string")
を作成します
_("string")
i18n.php
<?php $language = "en_US.UTF-8"; putenv("LANGUAGE=" . $language); setlocale(LC_ALL, $language); $domain = "messages"; bindtextdomain($domain, "Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); echo _("HELLO_WORLD");
コードは、getTextの言語、ロケール、およびドメインを設定します。 これを実行すると、言語ファイルが欠落しているため、「hello_world」をエコーします。
文字列抽出:
ファイルから文字列を抽出するには、
を使用してください:これにより、
(ポータブルオブジェクトテンプレート)が作成されます。 英語を生成ファイル:xgettext
xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
、「hello_world」(例えば、「howdy」に翻訳)。 messages.pot
:.po
にコンパイルします
msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
新しい言語の追加(例えば、クロアチア語):messages.po
.mo
sudo locale-gen hr_HR hr_HR.UTF-8; sudo update-locale; sudo dpkg-reconfigure locales
.po
ファイルを生成:mkdir -p Locale/hr_HR/LC_MESSAGES; msginit --locale=hr_HR --output-file=Locale/hr_HR/LC_MESSAGES/messages.po --input=Locale/messages.pot
messages.po
.mo
にコンパイルします
msgfmt -c -o Locale/hr_HR/LC_MESSAGES/messages.mo Locale/hr_HR/LC_MESSAGES/messages.po
i18n.php
hr_HR.UTF-8
これを
:に追加します
app/config/config_web.php
Twigテンプレートでは、
git clone https://github.com/swader/nofw cd nofw git checkout tags/2.93 -b 2.93 composer require twig/extensions
trans
は小枝を直接処理しないため、キャッシュメカニズムを使用します。
<?php $language = "en_US.UTF-8"; putenv("LANGUAGE=" . $language); setlocale(LC_ALL, $language); $domain = "messages"; bindtextdomain($domain, "Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); echo _("HELLO_WORLD");
xgettext
次に、キャッシュされたファイルから文字列を抽出します:app/bin/twigcache.php
xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
ファイルを更新し、
を再コンパイルします。ファイル。msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
.po
msgmerge
.mo
およびファイルの更新プロセスを自動化するために、BASHスクリプト(、
、、addlang.sh
)に提供されます。 これらのスクリプトは、元のテキストで詳しく説明されています
update-pot.sh
update-mo.sh
展開:config.sh
.pot
.mo
getTextがインストールされ、サーバーでロケールが生成されるようにします。 ubuntuについて:
、
、およびファイルは、バージョンコントロールの一部である必要があります。 Nonubuntuシステムのインストールコマンドとスクリプトを適応させます。 FAQSセクションは、詳細とトラブルシューティング情報を提供します
以上がGetTextを使用した簡単なマルチ言語Twigアプリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。