4

私のphpプロジェクトには次のファイルがあります:

libraries/locale/es_ES/LC_MESSAGES/messages.po
libraries/locale/es_ES/LC_MESSAGES/messages.mo
libraries/locale/es/LC_MESSAGES/messages.po
libraries/locale/es/LC_MESSAGES/messages.mo

どちらも PoEdit で編集された同じファイルで、Catalog->Properties->Language (それぞれ es と es_ES) が異なるだけです。

そして、このコードを localization.php ファイルに

$language = "es_ES.UTF-8";
putenv("LANG=$language");
setlocale(LC_ALL, $language);
bindtextdomain(STRING_DOMAIN, LOCALE_PATH);
textdomain(STRING_DOMAIN);

echo "Test translation: "._('string to translate');

このコードは正常に機能し、「翻訳する文字列」が正しく表示されます。ただし、一般的な「es」コードを使用しようとすると:

$language = "es.UTF-8";

...文字列は翻訳されません。私のubuntuにインストールされているロケールに関連しているようです(es_ES.utf8は存在しますが、es.utf8は存在しません)

gettext に es.UTF-8 ファイルを強制的に使用させることはできますか?

4

1 に答える 1

2

localedef回避策として、既存のロケールに基づいて新しいロケールをコンパイルするためにいつでも使用できます。esに基づいて作成するにはes_ES.UTF-8:

 localedef -i es_ES -f UTF-8 es.UTF8

しかしここで、翻訳ファイルの単純なロードを超えた領域をカバーする重要な質問がいくつか出てきます。日付と時刻の形式、測定値などのロケール固有の情報は、インストールされているロケールに依存するため、ロケールの使用に関する計画を立てることは常に良い考えです。es_ESスペイン語 (スペイン)を使用していると仮定すると、 は何esですか? スペインの特定のフレーバーes_IC(カナリア諸島) やラテン アメリカのフレーバーを対象としていますか?

明確な例を次に示します。さまざまなフレーバーのスペイン語をカバーするためにロケールのカスタマイズされたレパートリーを設計したい場合は、次のようにします。最初に、次のコマンドで簡単にインストールできるロケールを追加しますlocale-gen

  locale-gen es_ES.UTF-8 es_MX.UTF-8 es_AR.UTF-8

次に、と(419 はラテンアメリカの地理的エリア コー​​ド) に基づいes_USて作成したいと思います。es_MXes_419es_AR

  localedef -i es_MX -f UTF-8 es_US.UTF-8
  localedef -i es_AR -f UTF-8 es_419.UTF-8
于 2013-10-20T02:28:35.013 に答える