1

gettext我在我的PHP应用程序中遇到了一个奇怪的问题。它适用于我的开发机器(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 台开发机器上运行。

其他可能的原因是什么?

4

2 回答 2

2

gettext 将仅支持已安装的语言环境。如果您的托管服务提供商有一个 shell,您应该运行“locale -a”来查看已安装的语言环境列表。您可能需要联系您的托管服务提供商,让他们为 pl 安装必要的语言包。

于 2011-03-11T01:27:12.287 回答
1

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

于 2014-05-28T22:36:45.867 回答