ホームページ > バックエンド開発 > PHPチュートリアル > GetTextを使用した簡単なマルチ言語Twigアプリ

GetTextを使用した簡単なマルチ言語Twigアプリ

Christopher Nolan
リリース: 2025-02-15 08:42:10
オリジナル
585 人が閲覧しました

このチュートリアルでは、TwigとGetTextを使用してPHPアプリケーションに多言語サポートを追加する方法を示しています。 Symfonyの翻訳コンポーネントのようなユーザーランドソリューションよりも大幅に高速です。これを説明するために、既存の英語のみのアプリケーション(NOFW)を変更します。

Easy Multi-Language Twig Apps with Gettext

重要な利点:

  • 効率:getTextのネイティブ実装は、ユーザーランドの代替品と比較して優れたパフォーマンスを提供します。
  • シンプルさ:
  • 既存のアプリケーションに国際化を追加するプロセスは驚くほど簡単です。 包括的なガイド:>>)、
  • ファイル生成、拡張機能による小枝統合、および有用なユーティリティスクリプトをカバーしています。 。xgettext .po .moi18nセットアップと基礎:

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を使用して、

またはそのエイリアスEasy Multi-Language Twig Apps with Gettext を使用して、翻訳可能な文字列をマークします。 翻訳が見つからない場合、元の文字列(プレースホルダー)が返されます。

これを簡単なPHPファイル(Twigの外側)でテストして、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」をエコーし​​ます。

文字列抽出:Easy Multi-Language Twig Apps with Gettext

ファイルから文字列を抽出するには、

を使用してください:

これにより、

(ポータブルオブジェクトテンプレート)が作成されます。 英語を生成

ファイル: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

  1. ロケールをインストールします:sudo locale-gen hr_HR hr_HR.UTF-8; sudo update-locale; sudo dpkg-reconfigure locales
  2. .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
  3. 「hello_world」を「zdravo」に<」に翻訳します messages.po
  4. .moにコンパイルします msgfmt -c -o Locale/hr_HR/LC_MESSAGES/messages.mo Locale/hr_HR/LC_MESSAGES/messages.po
  5. のロケールを
  6. に変更してテストします。 サーバーの再起動が必要になる場合があります。i18n.php hr_HR.UTF-8
小枝統合:

これを

に追加します app/config/config_web.php Twigテンプレートでは、 block:

を使用します
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
ログイン後にコピー
ログイン後にコピー

.pomsgmerge .mo

ボーナス:ユーティリティスクリプト(app/bin/i18n):

Easy Multi-Language Twig Apps with Gettext

チュートリアルでは、言語の追加プロセス、

およびファイルの更新プロセスを自動化するために、BASHスクリプト(

addlang.sh)に提供されます。 これらのスクリプトは、元のテキストで詳しく説明されています update-pot.shupdate-mo.sh展開:config.sh.pot .mo getTextがインストールされ、サーバーでロケールが生成されるようにします。 ubuntuについて:

、および

ファイルは、バージョンコントロールの一部である必要があります。 Nonubuntuシステムのインストールコマンドとスクリプトを適応させます。 FAQSセクションは、詳細とトラブルシューティング情報を提供します

以上がGetTextを使用した簡単なマルチ言語Twigアプリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート