2

Ubuntu で PHP 5.5.9 を使用すると、すべてが正しくセットアップされているにもかかわらず、gettext が機能しません。

gettext の設定に使用する行は次のとおりです。

putenv('LANG=es_ES.utf8');
setlocale(LC_MESSAGES, 'es_ES');
bindtextdomain('messages', './i18n');
bind_textdomain_codeset('messages', 'UTF-8');
textdomain('messages');

これには、必要なものがすべて含まれている必要があります。しかし、gettext は常にデフォルトのロケールの文字列 (渡された文字列) を返し、正しい翻訳を返すことはありません。

Callinglocale -aには必要なすべての言語もリストされているため、これも正しく設定されています。

phpinfo()gettext (およびintl拡張機能) が正しくインストールされていることを証明します。

GetText Support = enabled
intl version = 1.1.0
ICU version = 52.1
ICU Data version = 52.1

もちろん、Ubuntuは再起動されています。

最後に、指定されたディレクトリには、gettext に必要な翻訳ファイルも含まれています。

要するに、すべてが正しく設定されているように見えますが、うまくいきません。

setlocale(LC_MESSAGES, NULL);ただし、への呼び出しの前に追加するとsetlocale(LC_MESSAGES, 'es_ES');、 gettext が突然機能します。

誰かがこれを説明できますか?OS と PHP のバージョンは最新ではありませんが、gettext がこのスタックで動作しなくなるバグについては知りません。

解決策は汚いハックのように感じられ、確かに私が安心して頼りにできるものではありません.

4

1 に答える 1

3

setlocale(LC_MESSAGES, NULL) を呼び出すと、環境からロケール名が使用されるため、「es_ES.utf8」になります。

代わりに setlocale(LC_MESSAGES, "es_ES.utf8") を呼び出すか、さらに良い
setlocale(LC_MESSAGES, array("es_ES", "es_ES.utf8"))を呼び出すことができます

于 2015-03-21T12:49:28.717 に答える