一部の文字列を翻訳するために PHP gettext 拡張機能を使用しようとしています。gettext()
すべての関数は正しい値を返すように見えますが、 /を呼び出すと_()
元の文字列のみが返されます。PO/MO ファイルは正しいようで、ディレクトリを正しく設定したと思います。WindowsでPHP 5.3.10を使用してWAMPサーバーを実行しています(インストールがあるため、5.3.4と5.3.8も実行してみました)。
まず、次を参照してください/new2/www/index.php
。
$locale = 'esn'; # returns Spanish_Spain.1252 in var dump
putenv("LC_ALL={$locale}"); // Returns TRUE
setlocale(LC_ALL, $locale); // Returns 'Spanish_Spain.1252'
$domain = 'messages';
bindtextdomain($domain, './locale'); // Returns C:\wamp\www\new2\www\locale
bind_textdomain_codeset($domain, 'UTF-8'); // Returns UTF-8
textdomain($domain); // Returns'messages'
print gettext("In the dashboard"); // Prints the original text, not the translation.
exit;
次のファイル構造を作成しました。
www/new2/www/locale/Spanish_Spain.1252/LC_MESSAGES/messages.mo
また、、 、、、およびに置き換えSpanish_Spain.1252
てみました。es_ES
esn
esp
Spanish
Spanish_Spain
MO の生成に使用される PO ファイルは次のようになります (関連するエントリのみを示します)。
#: C:\wamp\www\new2/www/index.php:76
msgid "In the dashboard"
msgstr "TRANSLATED es_ES DASHBOARD"
これは PoEdit を使用して生成されました。新しい .MO ファイルを追加した後、Apache を再起動しました。また、以前は Gettext で Zend_Translate を使用していましたが、正しく翻訳されていたことにも注意してください。ただし、独自の軽量フレームワークを作成しようとしているという理由もあって、ネイティブの gettext 拡張機能に依存したいと考えています。
どんな助けでも大歓迎です。
編集:修正されたディレクトリ構造。注 - 最近の回答を 24 時間以内に試すことができます。