[英]gettext working locally, but not on the host server
我在PHP应用程序中遇到了gettext
的奇怪问题。 它适用于我的开发机器(Ubuntu 10.10 32位,2 x Windows 7 64位,Windows 7 32位,均运行XAMPP) 。
生产服务器是运行某些64位Linux版本的付费主机。 我不知道到底是哪个。 我可以尝试找出是否重要。
这是我初始化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台dev机器上使用。
造成这种情况的其他可能原因是什么?
gettext仅支持安装的语言环境。 如果托管提供程序上有外壳程序,则应运行“ locale -a”以查看已安装语言环境的列表。 您可能需要联系您的托管服务提供商,以使他们为pl安装必要的语言包。
一个古老的问题,但是我想解释一下为什么它在Windows而不是Linux上可以工作。 Windows服务器与Linux服务器使用的语言环境名称不同。 例如,在Windows中,您将具有“ en”,但是在Linux上,您将具有“ en_EN”。 与波兰语相同,在Windows上为“ pl”,在Linux上为“ pl_PL”。 您需要对本地或实时服务器进行某种类型的测试,并相应地更改语言环境字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.