ホームページ >PHPフレームワーク >ThinkPHP >ThinkPhpに国際化(I18N)とローカリゼーション(L10N)を実装するにはどうすればよいですか?

ThinkPhpに国際化(I18N)とローカリゼーション(L10N)を実装するにはどうすればよいですか?

James Robert Taylor
James Robert Taylorオリジナル
2025-03-12 17:48:43977ブラウズ

Internationalization(I18N)およびThinkPhpにローカリゼーション(L10N)の実装

THONKPHPには、いくつかのより大きなフレームワークのように、組み込みの包括的なI18N/L10Nサポートがありません。ただし、テクニックの組み合わせを使用して、外部ライブラリを潜在的に活用することで効果的に実装できます。コア戦略には、翻訳可能な文字列をコードから分離し、メカニズムを使用してユーザーのロケールに基づいて適切な翻訳を選択します。

これが一般的なアプローチです:

  1. 言語ファイルの作成:専用ディレクトリ内で個別の言語ファイル( en.phpes.phpfr.php )を作成します( application/lang )。各ファイルには、キーが文字列の一意の識別子を表す関連配列が含まれ、値は翻訳されたテキストを表します。たとえば、 en.php
 <code class="php"><?php return [ &#39;hello&#39; => 'Hello', 'welcome' => 'Welcome to our website!', 'login' => 'Login', ];</code>
  1. 言語検出:ユーザーの優先言語を決定します。これは、いくつかの方法で実行できます。

    • ブラウザロケール: $_SERVER['HTTP_ACCEPT_LANGUAGE']を使用して、ブラウザの優先言語を取得します。これはしばしば信頼できませんが、良い出発点です。
    • ユーザー設定:ユーザーの優先言語をデータベースまたはセッションに保存します。これは、より正確で一貫した体験を提供します。
    • URLパラメーター:ユーザーがURL(例えば、 /en/es )で言語を直接指定できるようにします。
  2. 言語の読み込み:検出されたロケールに基づいて適切な言語ファイルをロードします。 ThinkPhpの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>
  1. 翻訳された文字列の使用:言語ファイルで定義されたキーを使用して、翻訳された文字列にアクセスします。例えば:
 <code class="php">echo $lang['hello']; // Outputs "Hello" (or the translation in the selected language)</code>

翻訳キーが欠落している場合は、潜在的なエラーを優雅に処理することを忘れないでください。

ThinkPhpアプリケーションで翻訳された文字列を管理するためのベストプラクティス

  1. 一貫した命名規則を使用してください。言語キーに明確で一貫した命名規則を維持します。これにより、保守性が向上し、エラーが減少します。
  2. 集中言語ファイル:すべての言語ファイルを単一の適切に組織化されたディレクトリに保管します。
  3. バージョン制御:バージョン制御システム(GIT)で言語ファイルを追跡して、変更と翻訳を効率的に管理します。
  4. 翻訳管理ツール:翻訳管理ツール(Poeditor、Crowdinなど)を使用して、翻訳者とのコラボレーションを促進し、大規模なプロジェクトを管理することを検討してください。これらのツールを使用すると、多くの場合、言語ファイルをさまざまな形式でエクスポート/インポートできます。
  5. コンテキスト翻訳:可能であれば、あいまいさを避けるために言語キーにコンテキストを提供します。たとえば、単に'submit'する代わりに、 'submit_form'を使用します。
  6. 定期的な更新:アプリケーションのテキストの変更を反映するように、言語ファイルを更新します。

thinkphpでi18nとl10nを使用して、異なる日付と数の形式を処理する

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::SHORTIntlDateFormatter::MEDIUM )を調整することを忘れないでください。同様に、必要に応じてNumberFormatterスタイルを調整します。

thinkphpでi18n/l10nの実装を簡素化するための容易に利用可能な拡張機能またはパッケージ

I18N/L10Nにのみ焦点を当てた、広く人気のある専用のThinkPHP拡張機能はありません。上記のアプローチでは、通常十分です。ただし、次のような既存のPHPライブラリを活用できます。

  • getText:広く使用されているGNU GetTextライブラリは、国際化のための堅牢なフレームワークを提供します。 ThinkPhpプロジェクトに手動で統合する必要があります。これにはより多くのセットアップが必要ですが、強力で標準化されたアプローチを提供します。
  • Symfonyの翻訳コンポーネント: ThinkPhp専用ではありませんが、Symfonyの翻訳コンポーネントは、翻訳の側面を処理するためにプロジェクトに統合できる、よく記載されているライブラリです。これには、ThinkPhpアプリケーションの構造と統合するためにより多くの作業が必要になります。

より簡単なアプリケーションの場合、最初のセクションで説明する手動アプローチで十分である可能性があることを忘れないでください。多くの翻訳を備えた大規模なプロジェクトでは、 gettextまたは同様のライブラリを使用したより構造化されたアプローチが望ましい場合があります。特定のライブラリを選択する前に、利益に対する統合の複雑さを慎重に計量します。

以上がThinkPhpに国際化(I18N)とローカリゼーション(L10N)を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。