gettext和区域设置


gettext and locale

我似乎无法理解这一点。

我有这个代码:

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)

区域设置名称依赖于平台。

在大多数unix系统上,您需要<two letter language code>_<two letter country code>[.<optional encoding>]。可以使用命令行locale -a列出有效的区域设置名称。

正确的Windows区域设置使用相同的X_X[.X]方案,只是它们使用语言和国家/地区的全名,并且使用代码页码而不是编码名称:English_United States.1252。Windows似乎也有一些启发式方法来计算其他字符串,尽管它似乎没有达到Unix风格的区域设置名称的效果。此外,无论您是使用名称"UTF-8"还是使用代码页编号"65001"指定UTF-8,Windows都不支持将其作为区域设置编码。

正如您所发现的,Windows和其他平台的区域设置名称是不同的。不能对所有平台都使用相同的字符串。相反,您必须编写使用当前平台的正确字符串的代码。

if Linux
    return "en_US.UTF-8"
if Windows
    return "English_United States.1252"