繁体   English   中英

gettext在本地运行,但不在主机服务器上

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM