我像这样使用gettext本地化
$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,我不知道为什么,但这可能是造成问题的原因。
发布于 2012-02-09 23:55:08
如果您的系统不支持该区域设置,则setlocale()将返回false。您可以通过检查locale -a的输出来查看您的系统支持哪些语言环境。通过lang get var传递的值必须与这些语言环境名称之一匹配。
正如Dan所说,sk可能是您的标准语言环境,这就是为什么即使setlocale返回false也要使用它的原因。
发布于 2014-02-28 02:58:22
好吧,还有另一个讨厌的黑客:
在我的系统上,只安装了en_DK.utf-8,我不能安装任何其他语言。
因此,我通过使用域来选择语言:
$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文件的文件位置如下所示:
./locale/en_DK.utf-8/LC_MESSAGES/en.mohttps://stackoverflow.com/questions/9194845
复制相似问题