在我的一台机器上(使用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上安装的(更多裸机)的信息吗?
答案 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中没有。