我运行的代码如下所示:
...
$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 和 gettext 0.18.1。