PHP 中的 Gettext 需要调用 setlocale(LC_MESSAGES, NULL)
Gettext in PHP requires setlocale(LC_MESSAGES, NULL) to be called
在 Ubuntu 上使用 PHP 5.5.9 时,虽然一切设置正确,但 gettext 无法正常工作。
我用来设置gettext的行如下:
putenv('LANG=es_ES.utf8');
setlocale(LC_MESSAGES, 'es_ES');
bindtextdomain('messages', './i18n');
bind_textdomain_codeset('messages', 'UTF-8');
textdomain('messages');
这应该包含所需的一切。但是 gettext 总是返回默认语言环境的字符串(传入的字符串),而不是正确的翻译。
调用 locale -a
还会列出所有需要的语言,因此设置也正确。
phpinfo()
证明 gettext(以及 intl
扩展)安装正确:
GetText Support = enabled
intl version = 1.1.0
ICU version = 52.1
ICU Data version = 52.1
Ubuntu当然已经重启了。
最后,指定的目录也包含 gettext 所需的翻译文件。
简而言之,一切似乎都设置正确 -- 但它不起作用。
但是,当我在调用setlocale(LC_MESSAGES, 'es_ES');
之前添加setlocale(LC_MESSAGES, NULL);
时,gettext突然起作用了。
有人可以解释一下吗?虽然 OS 和 PHP 版本不再是最新版本,但我不知道有任何错误会阻止 gettext 在此堆栈上工作。
这个解决方案感觉像是一个肮脏的 hack,当然不是我觉得可以依赖的东西。
当您调用 setlocale(LC_MESSAGES, NULL) 时,它使用环境中的区域设置名称,因此它将是 "es_ES.utf8"。
您可以尝试调用 setlocale(LC_MESSAGES, "es_ES.utf8") ,甚至更好
setlocale(LC_MESSAGES, 数组("es_ES", "es_ES.utf8"))
在 Ubuntu 上使用 PHP 5.5.9 时,虽然一切设置正确,但 gettext 无法正常工作。
我用来设置gettext的行如下:
putenv('LANG=es_ES.utf8');
setlocale(LC_MESSAGES, 'es_ES');
bindtextdomain('messages', './i18n');
bind_textdomain_codeset('messages', 'UTF-8');
textdomain('messages');
这应该包含所需的一切。但是 gettext 总是返回默认语言环境的字符串(传入的字符串),而不是正确的翻译。
调用 locale -a
还会列出所有需要的语言,因此设置也正确。
phpinfo()
证明 gettext(以及 intl
扩展)安装正确:
GetText Support = enabled
intl version = 1.1.0
ICU version = 52.1
ICU Data version = 52.1
Ubuntu当然已经重启了。
最后,指定的目录也包含 gettext 所需的翻译文件。
简而言之,一切似乎都设置正确 -- 但它不起作用。
但是,当我在调用setlocale(LC_MESSAGES, 'es_ES');
之前添加setlocale(LC_MESSAGES, NULL);
时,gettext突然起作用了。
有人可以解释一下吗?虽然 OS 和 PHP 版本不再是最新版本,但我不知道有任何错误会阻止 gettext 在此堆栈上工作。
这个解决方案感觉像是一个肮脏的 hack,当然不是我觉得可以依赖的东西。
当您调用 setlocale(LC_MESSAGES, NULL) 时,它使用环境中的区域设置名称,因此它将是 "es_ES.utf8"。
您可以尝试调用 setlocale(LC_MESSAGES, "es_ES.utf8") ,甚至更好
setlocale(LC_MESSAGES, 数组("es_ES", "es_ES.utf8"))