我正在使用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)。
答案 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');
希望这会有所帮助,问候。