我该如何调试php gettext?

时间:2011-06-17 08:23:50

标签: php gettext

有些gettext键对我不起作用 - 它们显示的是键而不是翻译,尽管有一个。我正在使用PHP File_Gettext Pear库制作.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));
    }
}

从上面的输出中我看到一些键有效 - 我看到很多ok s - 有些则没有,产生以下内容:

string 'Cancelled' (length=9)
string 'Storniert' (length=9)
string 'Cancelled' (length=9)

因此文件中有翻译,但gettext由于某种原因无法使用它们。

1 个答案:

答案 0 :(得分:1)

现在这是一个相当古老的问题,我必须指出,我不是那么精通gettext特定问题。但我对数组键有一些问题,如字符串和编码。

D:/_gt让我觉得你正在使用某种类型的Windows,如果我没有弄错,所有Windows版本都使用latin-1-“with-special-locale”作为默认值。我认为问题可能与编码有关,因为您将文件指定为 utf8 ,但如果没有 .mo 文件,我无法帮助您。但请尝试切换putenvsetlocale语句的位置。

还是缺少空格?正确的密钥可以是" Cancelled"吗?

但有人在评论中说,如果没有 .mo 文件,这只是猜测。

如果您已找到自己的答案,请添加它以帮助其他互联网! :d