PHP gettext问题:字符串仅翻译为英语

时间:2011-09-02 20:48:33

标签: php

我正在使用php gettext实现来根据用户首选项(通过分析HTTP_ACCEPT_LANGUAGE)来定位网站。

我测试了我构建的翻译系统并且它正常工作,但我刚刚发现(在我添加了其他语言之后)当我尝试使用其他语言时它不起作用,返回未翻译的字符串。

我得到了正确的语言环境(使用德语设置进行调试,我使用de_DE),我有正确的.mo文件(locale / de_DE / LC_MESSAGES / messages.mo)。

我正在使用此代码设置翻译环境:

    putenv("LC_ALL=" . $g_locale);
    setlocale(LC_ALL,  $g_locale);
    bind_textdomain_codeset('messages', 'UTF-8');
    bindtextdomain('messages', './locale'); // echo here makes sure it's getting the right absolute path
    textdomain('messages');

$ g_locale是“de_DE”。

我尝试了几个解决方案,我已经安装了德语语言环境和语言环境-a告诉de_DE.UTF-8已经正确安装。我也重新启动了apache2。

但除en_US外,任何语言的邮件仍未翻译。

这种行为的原因是什么? 我能做些什么才能让它发挥作用?

谢谢。

编辑:我忘了说它也使用默认的系统语言(意大利语)。 这似乎是一个配置错误,但我运行了正确的命令(sudo apt-get install language-pack-de-base)。

1 个答案:

答案 0 :(得分:2)

我通过简单地将“.UTF-8”添加到$ g_locale的值来修复它,在德国用户的情况下导致“de_DE.UTF-8”,对于英语用户导致“en_US.UTF-8”等等

安装所有语言环境后我每次都需要重新启动网络服务器(看起来像缓存很重要)。

在Ubuntu上我不需要同时使用putenv("LC_ALL=" . $g_locale);bind_textdomain_codeset('messages', 'UTF-8');来减少代码数量:

// $g_locale = "en_US.UTF-8";
setlocale(LC_ALL,  $g_locale);
bindtextdomain('messages', './locale');
textdomain('messages');

希望这会有所帮助,问候。