我似乎无法正确理解它。
我有这段代码:
putenv('LC_ALL=eng_US.UTF-8');
var_dump(setlocale(LC_ALL, 'eng_US.UTF-8', 'eng_US'));
Windows上的输出
string 'English_United States.1252' (length=26)
Linux上的输出
bool(false)
Linux适用于en_US,但不适用于Windows。 Windows查看文件夹eng_US和Linux en_US。
有没有人找到解决方案?或者有没有办法放置一个自定义字符串,无论操作系统如何都会被考虑在内?
(我必须补充一点,我在Windows-7上使用WAMP,而Linux机器是使用nginx + php-fpm的CentOS)
答案 0 :(得分:2)
语言环境名称取决于平台。
在大多数unix系统上,您需要<two letter language code>_<two letter country code>[.<optional encoding>]
。您可以使用命令行locale -a
列出有效的区域设置名称。
正确的Windows区域设置使用相同的X_X [.X]方案,除了它们使用语言和国家/地区的全名,并且它们使用代码页编号而不是编码名称:English_United States.1252
。 Windows似乎也有一些启发式来计算其他字符串,尽管它似乎并不像Unix风格的语言环境名称那样有效。 Windows也不支持UTF-8作为语言环境编码,无论您是使用名称“UTF-8”还是使用代码页号“65001”指定它。
您已经发现Windows和其他平台的区域设置名称不同。您不能对所有平台使用相同的字符串。相反,您必须编写使用当前平台的正确字符串的代码。
if Linux
return "en_US.UTF-8"
if Windows
return "English_United States.1252"