PHP gettext无法正常工作,如何调试?

时间:2017-10-29 12:12:34

标签: php internationalization vagrant gettext

我一直在努力建立一个PHP网站国际化。无论我尝试多少,我都无法获得工作。

我在流浪盒上运行一个ubuntu apache服务器,我需要的所有语言环境都可用并生成(使用locales -a来检查)。

安装并启用了Gettext(使用phpinfo()检查)

这是我的PHP:

$locale = 'en_US'

putenv('LANGUAGE=' . $locale); //found it somewhere, doesn't make a difference though
putenv('LC_ALL=' . $locale);
echo setlocale(LC_ALL, $locale); //seems to work fine

echo bindtextdomain($locale, "/vagrant/build/locale"); //folder exists and corresponds with return string
textdomain($locale);

echo gettext("Not working!");

这是我的/vagrant/build/locale/en_US/LC_MESSAGES/en_US.po文件:

msgid ""
msgstr ""
"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Not working!"
msgstr "ITS WORKIN OMFG!"

除了翻译不起作用外,一切似乎都要检查出来。

我尝试将.utf-8(以及诸如.UTF-8和.utf8之类的变体)添加到putenv(),setlocale()和文件夹名称中的语言环境中,但没有任何更改。

如何调试这种东西?输出变量只带我到目前为止,因为一切似乎都在起作用。

我有什么东西在这里失踪吗?我浪费了很多时间在这个问题上,我只是希望我已经使用了关联数组。

2 个答案:

答案 0 :(得分:1)

我在Windows上遇到了同样的问题,原因是操作系统不知道我在gettext中使用的特定语言。我解决了在系统设置中安装所有所需语言的问题。

请从php手册中阅读此说明:

  

注意:在Windows上,setlocale(LC_ALL,'')设置来自   系统的区域/语言设置(可通过Control访问   面板)。

http://php.net/manual/en/function.setlocale.php

我希望这能解决您的问题。

答案 1 :(得分:0)

我尝试过帮助那些仍在寻找此事的人:PHP gettext doesn't works

简而言之 - 您的done定义导致问题。

希望有所帮助。