php gettext 问题,PHP/Gettext问题

我记得几个月前用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下,如果我记得正确),这是很好的,因为我可以使用任意的“区域设置”,而不必打扰如果它们被安装在系统上。然而,这似乎不再工作了,我不知道为什么

红帽PHP 5.2.11:

只要setlocale()调用不返回false(如果可用/安装在系统中)),我可以从各种语言环境中来回切换,并且翻译显示相关性。

这不是完美的(如果我可以将gettext指向任意任意的翻译目录,而不必测试locale的存在,那将是很好的),但这是可以接受的。稍后再进行一些测试。

Windows 7 PHP 5.3.1(XAMPP):

setlocale()总是返回false(即使使用LC_ALL而不是LC_MESSAGES),除非我使用一些有效的Windows语言环境,例如eng,deu或ptg – 在这种情况下,语言环境似乎正确设置,但翻译仍然不显示。我现在无法测试,因为我打开了数百个选项卡,但我认为该脚本的第一个调用会产生正确的翻译(重新启动Apache不会这样做)。

我不知道这是否与PHP Bug #49349相关。我会测试这是几个小时。

有没有办法在不同的操作系统(可能是像l33t这样的自定义区域设置)中可靠地使用gettext扩展(不是纯粹的PHP实现,如php-gettext或Zend Translate Adapter)?

另外,绝对有必要使用setlocale(LC_ALL,…)吗?我会提前将TIME,NUMERIC和MONETARY(特别)区域设置保持原样(默认为POSIX语言环境)。

我有一个想法…可以用非常常见的语言环境(如C,POSIX或en_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平台没有问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值