gettext在本地工作,但不在主机服务器上工作

时间:2011-03-11 01:06:25

标签: php gettext php-gettext

我在 PHP 应用程序中遇到gettext的奇怪问题。它适用于我的开发机器(Ubuntu 10.10 32位,2 x Windows 7 64位,Windows 7 32位,全部运行XAMPP)

生产服务器是运行某种 Linux 64位的付费主机。我不确切知道哪个。我可以试着找出它是否重要。

以下是我初始化gettext的方法:

//just FYI:
//$this->data['language'] == 'pl'
//dirname(__FILE__).'/../language/locale' ==
//'/home/mingos/public_html/example.com/application/controllers/../language/locale'

putenv('LANGUAGE='.$this->data['language']);
putenv('LANG='.$this->data['language']);
putenv('LC_ALL='.$this->data['language']);
setlocale(LC_ALL,$this->data['language']);

bindtextdomain($this->data['language'], dirname(__FILE__).'/../language/locale');
bind_textdomain_codeset($this->data['language'],'UTF-8');
textdomain($this->data['language']);

我在服务器上运行phpinfo(),发现gettext已启用且safe_mode已关闭,不包括LC_ALL无法修改的可能性(我认为)。

编译后的gettext目录为:

/home/mingos/public_html/example.com/application/language/locale/pl/LC_MESSAGES/pl.mo

因此bindtextdomain中设置的路径是正确的。

我没有收到任何通知或警告,但gettext不会从我的目录中提取翻译,只返回它所输入的字符串,例如gettext('About us')返回About us而不是O nas

目录本身使用poEdit正确编译,并确认正在我的4台开发机器上工作。

可能是其他可能的原因是什么?

2 个答案:

答案 0 :(得分:2)

gettext仅支持已安装的区域设置。如果您的托管服务提供商上有shell,则应运行'locale -a'以查看已安装的语言环境列表。您可能需要联系您的托管服务提供商,让他们为pl安装必要的语言包。

答案 1 :(得分:1)

一个老问题,但我想解释为什么它在Windows上运行而不在Linux上运行。 Windows服务器不使用与Linux服务器相同的区域设置名称。例如,在Windows中,您将拥有“en”,但在Linux上,您将拥有“en_EN”。它与波兰语相同,在Windows上它将是“pl”,在Linux上它将是“pl_PL”。您需要为本地或实时服务器进行某种类型的测试,并相应地更改区域设置字符串。