首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP/Gettext问题

PHP/Gettext问题
EN

Stack Overflow用户
提问于 2010-08-03 23:34:20
回答 1查看 12.9K关注 0票数 18

我记得几个月前我用gettext运行了一些测试,下面的代码运行得很好:

putenv('LANG=l33t');
putenv('LANGUAGE=l33t');
putenv('LC_MESSAGES=l33t');

if (defined('LC_MESSAGES')) // available if PHP was compiled with libintl
{
    setlocale(LC_MESSAGES, 'l33t');
}

else
{
    setlocale(LC_ALL, 'l33t');
}

bindtextdomain('default', './locale'); // ./locale/l33t/LC_MESSAGES/default.mo
bind_textdomain_codeset('default', 'UTF-8');
textdomain('default');

echo _('Hello World!'); // h3110 w0r1d!

这很好用(如果我没记错的话,在Windows XP和CentOS下),这很好,因为我可以使用任意的“区域设置”,而不必担心它们是否安装在系统上。然而,这似乎不再起作用了,我想知道为什么...

Red Hat + PHP 5.2.11:

我可以在不同的语言环境之间来回切换,只要setlocale()调用不返回false (如果该语言环境可用/安装在系统上),翻译就会显示正确。

这并不完美(如果我可以将gettext指向任意的翻译目录,而不必测试地区的存在,那就太好了),但这是可以接受的。稍后我将运行更多的测试。

Windows 7+ PHP 5.3.1 (XAMPP):

setlocale()总是返回false (即使使用LC_ALL而不是LC_MESSAGES),除非我使用一些有效的Windows区域设置,如engdeuptg -在这种情况下,区域设置似乎设置正确,但翻译仍然不显示。我现在不能测试,因为我打开了数百个选项卡,但我认为第一次调用该脚本就会产生正确的转换(重启Apache不会起作用)。

我不确定这是否与PHP Bug #49349有关。我来测试一下,这需要几个小时。

有没有办法在不同的操作系统(可能使用l33t等自定义语言环境)之间可靠地使用gettext扩展(而不是像php-gettextZend Translate Adapter这样的纯PHP实现)?

另外,使用setlocale(LC_ALL, ...)是绝对必要的吗?我更喜欢让TIMENUMERICMONETARY (特别是)区域设置保持不变(默认为POSIX区域设置)。

我有个主意..。是否可以使用非常常见的语言环境(如CPOSIXen_US)调用setlocale()并通过域指定语言?如下所示:

/lang/C/LC_MESSAGES/domain.pt.mo
/lang/C/LC_MESSAGES/domain.de.mo
/lang/C/LC_MESSAGES/domain.en.mo
/lang/C/LC_MESSAGES/domain2.pt.mo
/lang/C/LC_MESSAGES/domain2.de.mo
/lang/C/LC_MESSAGES/domain2.en.mo

这是否可以在*nix和Windows平台上顺利运行?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3398113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档