PHP gettext 不工作,如何调试?

标签 php internationalization vagrant gettext

我一直在尝试建立一个国际化的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() 和文件夹名称中的语言环境,但没有任何改变。

如何调试这类东西?输出变量只花了我到目前为止,因为一切似乎都在工作。

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

最佳答案

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

请阅读 php 手册中的注释:

Note: On Windows, setlocale(LC_ALL, '') sets the locale names from the system's regional/language settings (accessible via Control Panel).

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

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

关于PHP gettext 不工作,如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47000031/

相关文章:

php - 每个 session 的 Laravel session 过期时间

linux - 使用 Puppet 管理 shell 命令

ssl - Vagrant,Ansible : SSLError bad handshake: Error SSL routines, ssl3_get_record,错误的版本号

puppet Vagrant 供应失败

php - 删除当前年份之前的数组项目

php - MySQL 数据库问号而不是希伯来语字符..?

php DAL - 独立的实体和数据库?

c# - 停止 C# 语言国际化

ruby-on-rails - Rails 应用逻辑国际化

c# - 为日期时间设置默认时区