首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gettext无法使setlocale()工作

Gettext无法使setlocale()工作
EN

Stack Overflow用户
提问于 2012-02-08 22:04:43
回答 2查看 3.8K关注 0票数 3

我像这样使用gettext本地化

代码语言:javascript
复制
$lang = $_GET['lang'];
echo $lang;
putenv("LANG=$lang"); 
setlocale(LC_ALL, $lang); 
bindtextdomain("messages", realpath("../locale")); 
bind_textdomain_codeset("messages", "utf-8"); 
textdomain("messages"); 

... 

echo _("Welcome!") etc.

我可以看到本地化的工作,因为网站可以看到翻译成斯洛伐克语。然而,无论$lang变量中是什么,该网站只被翻译成斯洛伐克语,或者根本不被翻译。

斯洛伐克语是指我在'sk‘文件夹中拥有的任何.po和.mo文件。我试着把不同的语言放在'sk‘文件夹中,它起作用了,我得到了不同的翻译。但是我不能使用不同的文件夹,比如'en‘或'cs’。所有其他文件夹将被忽略。我做错了什么?

P.S. setlocale()返回false,我不知道为什么,但这可能是造成问题的原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-09 23:55:08

如果您的系统不支持该区域设置,则setlocale()将返回false。您可以通过检查locale -a的输出来查看您的系统支持哪些语言环境。通过lang get var传递的值必须与这些语言环境名称之一匹配。

正如Dan所说,sk可能是您的标准语言环境,这就是为什么即使setlocale返回false也要使用它的原因。

票数 1
EN

Stack Overflow用户

发布于 2014-02-28 02:58:22

好吧,还有另一个讨厌的黑客:

在我的系统上,只安装了en_DK.utf-8,我不能安装任何其他语言。

因此,我通过使用域来选择语言:

代码语言:javascript
复制
$lang = "en";
putenv("LANG=en_DK.utf8"); 
setlocale(LC_ALL, "en_DK.utf8");
bindtextdomain($lang, realpath("./locale")); 
bind_textdomain_codeset($lang, "utf-8"); 
textdomain($lang);

.mo文件的文件位置如下所示:

代码语言:javascript
复制
./locale/en_DK.utf-8/LC_MESSAGES/en.mo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9194845

复制
相关文章

相似问题

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