5

PHPのgettext関数を使用するためにpoeditで言語ファイルを作成しましたが、テストしようとしているページで、作成した.poまたは.moファイルを検索/ロードできません。私が間違っていることは何ですか?

$locale = "en_US";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

//my .po ad .mo file is located here /includes/locale/en/default.mo

デフォルトの英語のlangファイルを読み込もうとしていますが、ファイル内のテキストを変更して、言語ファイルから読み取っていることを確認しました。現在、デフォルトのテキストのみが表示され、翻訳は行われていないと思います。間違ったパスの可能性があります

4

2 に答える 2

9

私はついにそれを機能させました、私はここに投稿しているので、おそらくそれは他の誰かを助けることができます、それはそれが文書化されている方法をやや混乱させていると思います。

このデモではフランス語にFRを使用します

$locale = "fr_fr";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

上記のbindtextdomain関数では、最初のパラメーターは.po言語ファイルの名前から拡張子を引いたものです。2番目のパラメータはフォルダへのパスです。ここで少し注意が必要です/文書化されていません...ここで設定したフォルダに、2桁の国コードを使用して各言語のフォルダを作成し、この国コード内に作成する必要がありますフォルダーこのフォルダーを追加する必要がありました。LC_MESSAGES内部にLC_MESSAGESdefault.poファイルがあります。

これが私がそれを機能させる唯一の方法でした。langフォルダーへのパスはここで太字の部分について何も言及していないので、ちょっと混乱します。

langfolder / fr_FR / LC_MESSAGES /default.po

それでも本当に奇妙ですが、default.po私にとっては機能しますが、上記のコードで別の名前に変更してから、.poファイルと.moファイルのファイル名をそれに合わせて変更すると、機能しなくなり、default名前でのみ機能します。 gettextが舞台裏でキャッシングを行うのではないかと思い始めています

于 2009-09-20T01:36:17.557 に答える
2

それがあなたの道だと思います。

「/includes/ locale」はホスト上の正しいディレクトリですか?それとも何かに関連していますか?注:ホームディレクトリやインストールディレクトリからの相対パスではなく、フルパス名が必要です。そのため、次のようになります。

  • C:/ xampp / htdocs / include / locale
  • / var / www / include / locale
  • / home / username / include / locale

それが見つかった完全なディレクトリは何ですか?

于 2009-09-20T01:45:49.077 に答える