我使用像这样的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,我无法弄清楚为什么,但这可能会造成麻烦。
答案 0 :(得分:1)
setlocale()
将返回false。您可以通过检查locale -a
的输出来查看系统支持的区域设置。通过lang get var传入的值必须与其中一个区域设置名称匹配。
正如Dan所说,sk可能是你的标准语言环境,即使setlocale返回false也会使用它。
答案 1 :(得分:0)
嗯,还有另一个讨厌的黑客:
在我的系统上只安装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.mo