gettext和locale

时间:2012-08-22 19:27:47

标签: php locale gettext

我似乎无法正确理解它。

我有这段代码:

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)

1 个答案:

答案 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"