【问题标题】:How can I debug php gettext?如何调试 php gettext?
【发布时间】:2011-06-17 08:23:49
【问题描述】:

一些 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));
    }
}

从上面的输出中,我看到一些键有效 - 我看到很多 oks - 而有些则没有,产生以下结果:

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

所以文件中有翻译,但是gettext由于某种原因无法使用。

【问题讨论】:

  • 检查翻译文件。我认为 gettext 比File_Gettext_MO 更准确。在其中查找字符串Cacnelled,可能是你可以看到的东西。您可能还想将 MO 文件中的部分添加到问题中。
  • @hakre,我可以在那里看到CancelledStorniert。我应该添加文件的哪一部分?
  • 这是什么库? File_Gettext 梨?我在任何地方都找不到 File_Gettext_MO。

标签: php gettext


【解决方案1】:

现在这是一个相当古老的问题,我必须指出,我对 gettext 特定问题并不精通。但是我在将数组键作为字符串和编码时遇到了一些问题。

D:/_gt 给我的印象是您正在使用某种 Windows,如果我没记错的话,所有 Windows 版本都默认使用 latin-1-"with-special-locale"。我相信问题可能与编码有关,因为您将文件指定为 utf8 但如果没有 .mo 文件,我无法帮助您。但请尝试交换 putenvsetlocale 语句的位置。

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

但正如 cmets 中有人所说,这只是没有 .mo 文件的猜测。

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

【讨论】:

  • 这似乎不是 Windows 问题,因为服务器上有相同的脚本具有相同的行为。正如您在输出中看到的那样,空格是可以的。实际上,我没有找到解决方案 - 我现在只是使用 DB + memcached,这似乎工作得很好。
  • 另外,我试图找到一些键不起作用的模式 - 例如,出现多字节字符并且所有后续键都被破坏。但是,虽然文件中的键是按字母顺序排列的,但那些不起作用的键是随机的。
猜你喜欢
  • 2018-04-10
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多