【问题标题】:PHP gettext not working, how to debug?PHP gettext 不工作,如何调试?
【发布时间】:2018-04-10 12:49:26
【问题描述】:

我一直在尝试建立一个PHP网站国际化。不管我怎么尝试,我都无法让 gettext 工作。

我在 vagrant box 上运行 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() 和文件夹名称中的语言环境,但没有任何改变。

如何调试这种东西?输出变量只花了我这么多时间,因为一切似乎都在工作。

这里有什么我遗漏的吗?我在这个问题上浪费了很多时间,我只是希望我改用关联数组。

【问题讨论】:

    标签: php internationalization vagrant gettext


    【解决方案1】:

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

    请阅读php手册中的这个注释:

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

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

    希望这能解决您的问题。

    【讨论】:

      【解决方案2】:

      我已尝试帮助那些仍在此处寻找此功能的人:PHP gettext doesn't works

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        相关资源
        最近更新 更多