私が実行するコードは次のようになります。
...
$this->locale = da_DK;
...
putenv("LC_ALL=".$this->locale);
putenv('LANG='.$this->locale);
$res = setlocale(LC_ALL, $this->locale);
if($res != $this->locale){
throw new Exception("The language could not be set.");
}
bindtextdomain("domain", "./locale");
textdomain("domain");
echo setlocale(LC_MESSAGES, 0 );
echo ' ';
echo __('description');
apache2を介して実行した結果は次のとおりです。
da_DK Beskrivelse
それは私たちが望む通りです。
cliで実行する:
da_DK Description
私たちが英語を使っていたら、これは正しかったでしょう。「d」は英語の翻訳では大文字で、ソースでは小文字です(文脈からすると少し奇妙に見えます)
したがって、gettextは文字列を翻訳できるので機能しますが、どういうわけか、スクリプトでロケールを変更し、英語のディレクトリから.poファイルを選択したことを無視します。
なぜCLIスクリプトにロケールが必要なのか疑問に思われる場合:スクリプトは請求書を電子メールで送信するために使用されます。
私が使用しているのは、Ubuntu 12.10、PHP 5.4.6-1ubuntu1、apache 2.2.22、およびgettext0.18.1です。