php gettext 翻译在 Debian 上不起作用

标签 php debian gettext php-gettext

(我见过 the other questions ,但他们的答案对我没有帮助)

我有一个使用 php gettext 进行翻译的应用程序,并且已经在 OSX 和 FreeBSD 上工作了多年。当我尝试将其移植到 Debian 7.6 32bit (Linux debian32bit 3.2.0-4-686-pae #1 SMP Debian 3.2.60-1+deb7u3 i686 GNU/Linux) 时,一切正常,除了翻译。我已将问题归结为 CLI 一句:

env LANG=nl_NL.UTF-8 php -r 'var_dump(bindtextdomain("foo","locale")); var_dump(textdomain("foo")); var_dump(getenv("LANG")); var_dump(_("low"));'

locale/nl/LC_MESSAGES/foo.mo 包含 low 的荷兰语翻译,即。 拉格

在 OSX Maverick 上:

string(34) "/Users/foobar/workspace/bar/locale"
string(5) "foo"
string(11) "nl_NL.UTF-8"
string(4) "laag" <-- Success!

在 FreeBSD 10 64 位上:

string(24) "/usr/local/foobar/locale"
string(5) "foo"
string(11) "nl_NL.UTF-8"
string(4) "laag" <-- Success!

但是,在 Debian 7 上:

string(19) "/home/foobar/locale"
string(5) "foo"
string(11) "nl_NL.UTF-8"
string(3) "low" <-- Failure!

php-gettext 已安装:

$ php -i | egrep -i 'PHP version|gettext'
PHP Version => 5.4.4-14+deb7u14
gettext
GetText Support => enabled

locale -a 给出:

C
C.UTF-8
en_US.utf8
nl_NL.utf8
POSIX

所以我尝试了 nl_NL.utf8 而不是 nl_NL.UTF-8:结果相同。

我尝试将 foo.mo 文件放在 locale/nl_NL/LC_MESSAGES 下,结果相同。

我尝试使用locale的绝对路径而不是当前工作目录的相对路径,结果相同。

我在这里不知所措。关于如何继续的任何建议?

最佳答案

结果我没有发现环境变量LANGUAGE,它优先于LANG并且是在我的Debian机器上设置的,但在其他机器上没有设置。

来自gettext documentation :

When a program looks up locale dependent values, it does this according to the following environment variables, in priority order:

  1. LANGUAGE
  2. LC_ALL
  3. LC_xxx, according to selected locale category: LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES, ...
  4. LANG

此外,在我的最小示例中,必须调用 setlocale 才能使其在所有计算机上同样工作。 (我在原始代码中做到了这一点,但不知怎的,不需要让 gettext 在我的其他机器上工作,所以我把它省略了。)

所以,最终,以下内容适用于所有机器:

php -r 'var_dump(putenv("LANGUAGE=nl_NL.UTF-8")); var_dump(bindtextdomain("foo","locale")); var_dump(textdomain("foo")); var_dump(setlocale(LC_ALL,"nl_NL.UTF-8")); var_dump(_("low"));'

关于php gettext 翻译在 Debian 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339259/

相关文章:

php - MySQL奇偶自增ID

linux - 将 Docker 镜像中的用户切换为非 root 用户

javascript - 在 squeeze 上安装 node-js 最新版本的问题

python - Django 翻译 : can't find msguniq

gettext - 如何自动删除未使用的 gettext 字符串?

php - 如何以编程方式确定 PHP 中的文档根目录?

javascript - 代码点火器中的 Set_value 回退以从 URL 地址获取整数

visual-c++ - 如何在 MS Visual C++ 中使用 GNU gettext?

php - 构建数据库抽奖网站的有效方法

python - Nagios/Centreon 错误 : Return code 127 is out of bounds : Plugin may be missing