で最近いくつかの問題が発生した後gettext
、それがどのように機能するか、および今後これらの問題を回避するにはどうすればよいかについていくつか質問があります。
私の問題は、ロケールをde
ではなくに設定しようとしてde_DE
いたことでした。これはサーバーでは利用できませんでした。私のローカル コピーはphp-gettext
パッケージを使用していたので (パッケージは正しい用語ですか?)、システム上にないロケールを使用して満足していました。これにより、2 つの質問が発生しました。
- ディレクトリ
de_DE
構造がlocales/de/LC_MESSAGES/file.po
- ロケールがインストールされていることを確認するにはどうすればよいですか? たとえば、 を使用したいが、それが利用できないので に
de_DE.utf8
フォールバックする必要がある場合de_DE
、またはzh_HK
利用できないので にフォールバックしたい場合zh_CN
。これらは特殊なケースであることはわかっていますが、コードをできるだけ堅牢にしたいと考えています。明確にするために、これはlocale -a
ファイルがシステムで使用可能である場合ではなく、システムでロケールが使用可能である場合 (コマンドを使用して表示) です。
また、複数のプラットフォームでこれを機能させるためのベストプラクティスは何ですか? 私の現在のコードは次のとおりです。
$localeCode = 'de_DE'; // Example, would be generated
putenv('LANG=' . $localeCode);
putenv('LANGUAGE=' . $localeCode);
setlocale(LC_ALL, $localeCode);
$domain = 'mydomain'; // Again, example
// Don't load the locale from the cache
bindtextdomain($domain, '../locales/nocache');
bindtextdomain($domain, '../locales');
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);