首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gettext和locale

gettext和locale
EN

Stack Overflow用户
提问于 2012-08-23 03:27:47
回答 1查看 959关注 0票数 1

我似乎不能正确理解这一点。

我有这样的代码:

代码语言:javascript
复制
putenv('LC_ALL=eng_US.UTF-8');
var_dump(setlocale(LC_ALL, 'eng_US.UTF-8', 'eng_US'));

Windows上的输出

代码语言:javascript
复制
string 'English_United States.1252' (length=26)

Linux上的输出

代码语言:javascript
复制
bool(false)

Linux可以在en_US上运行,但不能在Windows上运行。Windows查看eng_US和Linux en_US文件夹。

有人找到解决这个问题的办法了吗?或者,有没有一种方法可以放入一个自定义字符串,该字符串将被考虑到而不考虑操作系统?

(我必须补充,我在Windows7上使用的是WAMP,而Linux机器是一个带有nginx +php-fpm的CentOS )

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-23 03:43:52

区域设置名称与平台相关。

在大多数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都不支持UTF-8作为区域设置编码。

正如您已经发现的,Windows和其他平台的语言环境名称是不同的。您不能对所有平台使用相同的字符串。相反,您必须为当前平台编写使用正确字符串的代码。

代码语言:javascript
复制
if Linux
    return "en_US.UTF-8"
if Windows
    return "English_United States.1252"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12080099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档