ホームページ >PHPフレームワーク >ThinkPHP >ThinkPhpに国際化(I18N)とローカリゼーション(L10N)を実装するにはどうすればよいですか?
THONKPHPには、いくつかのより大きなフレームワークのように、組み込みの包括的なI18N/L10Nサポートがありません。ただし、テクニックの組み合わせを使用して、外部ライブラリを潜在的に活用することで効果的に実装できます。コア戦略には、翻訳可能な文字列をコードから分離し、メカニズムを使用してユーザーのロケールに基づいて適切な翻訳を選択します。
これが一般的なアプローチです:
en.php
、 es.php
、 fr.php
)を作成します( application/lang
)。各ファイルには、キーが文字列の一意の識別子を表す関連配列が含まれ、値は翻訳されたテキストを表します。たとえば、 en.php
:<code class="php"><?php return [ 'hello' => 'Hello', 'welcome' => 'Welcome to our website!', 'login' => 'Login', ];</code>
言語検出:ユーザーの優先言語を決定します。これは、いくつかの方法で実行できます。
$_SERVER['HTTP_ACCEPT_LANGUAGE']
を使用して、ブラウザの優先言語を取得します。これはしばしば信頼できませんが、良い出発点です。/en
、 /es
)で言語を直接指定できるようにします。Lang
クラス(バージョンで利用可能な場合)またはカスタム関数を使用できます。カスタム関数を使用した例:<code class="php">function loadLanguage($locale = 'en') { $langFile = APP_PATH . 'lang/' . $locale . '.php'; if (file_exists($langFile)) { return require $langFile; } return []; // Fallback to default language } $lang = loadLanguage(getLocale()); // getLocale() is a helper function to detect the locale</code>
<code class="php">echo $lang['hello']; // Outputs "Hello" (or the translation in the selected language)</code>
翻訳キーが欠落している場合は、潜在的なエラーを優雅に処理することを忘れないでください。
'submit'
する代わりに、 'submit_form'
を使用します。THONKPHPには、日付と数のフォーマットのためにI18Nが組み込まれていません。 PHPのIntl
拡張機能を使用する必要があります。 PHP構成で有効になっていることを確認してください。
Intl
拡張内のIntlDateFormatter
およびNumberFormatter
クラスは重要です。これが例です:
<code class="php">use IntlDateFormatter; use NumberFormatter; // ... (Language detection as before) ... $formatter = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE); echo $formatter->format(time()); // Formats the current date according to the locale $numberFormatter = new NumberFormatter($locale, NumberFormatter::DECIMAL); echo $numberFormatter->format(1234.56); // Formats the number according to the locale</code>
希望する日付/時刻形式に一致するように、 IntlDateFormatter
スタイルの定数(例: IntlDateFormatter::SHORT
、 IntlDateFormatter::MEDIUM
)を調整することを忘れないでください。同様に、必要に応じてNumberFormatter
スタイルを調整します。
I18N/L10Nにのみ焦点を当てた、広く人気のある専用のThinkPHP拡張機能はありません。上記のアプローチでは、通常十分です。ただし、次のような既存のPHPライブラリを活用できます。
より簡単なアプリケーションの場合、最初のセクションで説明する手動アプローチで十分である可能性があることを忘れないでください。多くの翻訳を備えた大規模なプロジェクトでは、 gettext
または同様のライブラリを使用したより構造化されたアプローチが望ましい場合があります。特定のライブラリを選択する前に、利益に対する統合の複雑さを慎重に計量します。
以上がThinkPhpに国際化(I18N)とローカリゼーション(L10N)を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。