我在 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台开发机器上工作。
可能是其他可能的原因是什么?
答案 0 :(得分:2)
gettext仅支持已安装的区域设置。如果您的托管服务提供商上有shell,则应运行'locale -a'以查看已安装的语言环境列表。您可能需要联系您的托管服务提供商,让他们为pl安装必要的语言包。
答案 1 :(得分:1)
一个老问题,但我想解释为什么它在Windows上运行而不在Linux上运行。 Windows服务器不使用与Linux服务器相同的区域设置名称。例如,在Windows中,您将拥有“en”,但在Linux上,您将拥有“en_EN”。它与波兰语相同,在Windows上它将是“pl”,在Linux上它将是“pl_PL”。您需要为本地或实时服务器进行某种类型的测试,并相应地更改区域设置字符串。