setlocale“nl”在一次安装而不在其他安装上工作

时间:2014-01-28 08:10:43

标签: php locale

在我的一台机器上(使用xampp for windows,xampp-win32-1.8.3-2-VC11-installer,php 5.5.6),此代码返回“string(2)'nl'”:

var_dump(setlocale(0, 'nl'));

在另一台带有IIS(和php 5.4)的机器上,这会返回“bool(false)”。

我尝试了网站http://setlocale.onlinephpfunctions.com/,在他们的5.5.5上,这也会返回“bool(false)”。

这种行为有什么影响?是因为xampp隐藏了我在IIS上安装的(更多裸机)的信息吗?

1 个答案:

答案 0 :(得分:1)

这是一个已知错误:https://bugs.php.net/bug.php?id=66265

我可以重现XAMPP 1.8.2和1.8.3之间的问题。其中分别使用PHP 5.4.19和PHP 5.5.6。第一个正确加载我要求的任何PO文件,无论我使用什么参数,后者总是加载nl_NL。我的Windows操作系统是荷兰语。

当然这不会解决你的问题,但去那里(并加上你的投票)可能有助于解决这个问题。


许多答案声称必须在操作系统上安装区域设置才能使PO工作。 不正确。

那只是不正确。我的PHP文件只需要PO文件存在,并且它适用于我尝试过的每个语言环境。在Windows 7和Windows 8.1计算机上,两者都默认为荷兰语。我可以让我的PHP文件使用德语,法语,英语和荷兰语语言环境文件。

这些都运行良好,加载的PO文件和整个PHP页面以所选语言显示:

// All these lines worked fine with PHP 5.4.19
putenv('LC_ALL=de_DE');  setlocale(LC_MESSAGES, 'de_DE'); // German
putenv('LC_ALL=fr_FR');  setlocale(LC_MESSAGES, 'fr_FR'); // French
putenv('LC_ALL=en_UK');  setlocale(LC_MESSAGES, 'en_UK'); // English
putenv('LC_ALL=nl_NL');  setlocale(LC_MESSAGES, 'nl_NL'); // Dutch

然后我尝试PHP 5.5.6并且相同的命令停止工作。现在页面总是(!)显示nl_NL语言环境。执行getlocale(LC_ALL,0)会返回Dutch_Netherlands.1252这是操作系统的默认语言。以某种方式使我的PHP始终使用nl_NL PO文件。

所以要把所有这些答案都搁置一下:操作系统不必安装区域设置,PO文件在PHP 5.4.19中没有正常工作,但在PHP 5.5.6中没有。