一些gettext键对我来说不起作用 - 它们显示键而不是翻译,尽管有一个.我正在使用PHP File_GettextPear库制作.mo文件,它似乎工作正常,所以我已经尝试了以下脚本,哪些键不能正常工作:
$locale = 'en_GB';
$domain = 'messages';
setlocale(LC_ALL, $locale);
putenv("LC_ALL=".$locale);
bindtextdomain($domain, "D:/_gt");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
$mocreator = new File_Gettext_MO();
$mocreator->load('D:/_gt/en_GB/LC_MESSAGES/messages.mo');
foreach ($mocreator->strings as $key => $value) {
if ($value == gettext($key)) {
var_dump("ok");
} else {
var_dump($key, $value, gettext($key));
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的输出我看到一些键工作 - 我看到很多oks - 有些不做,产生以下内容:
string 'Cancelled' (length=9)
string 'Storniert' (length=9)
string 'Cancelled' (length=9)
Run Code Online (Sandbox Code Playgroud)
所以文件中有翻译,但gettext由于某种原因无法使用它们.
现在这是一个相当老的问题,我必须指出我不太熟悉 gettext 特定问题。但我在使用数组键作为字符串和编码时遇到了一些问题。
D:/_gt给我的印象是您正在使用某种Windows,如果我没有记错的话,所有Windows版本都使用latin-1-“with-special-locale”作为默认值。我相信问题可能与编码相关,因为您将文件指定为utf8 ,但如果没有.mo文件,我无法帮助您。putenv但尝试交换 the和语句的位置setlocale。
还是缺少空格?正确的钥匙可能是吗" Cancelled"?
但正如有人在评论中所说,这只是没有.mo文件的猜测。
如果您已经找到了自己的答案,请添加它以帮助互联网上的其他人!:D