为什么gettext会将空字符串翻译为.po头部文本?

6
我已经在PHP5中设置了gettext。在与字符集等方面的斗争中,我设法翻译了一些基本的字符串。现在我遇到了一个问题。当翻译空字符串时,我期望得到未翻译(空)字符串(如果我错了,请纠正我;))。
然而,与其返回输入字符串,我却得到了.Po文件的标题作为翻译:
Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2011-09-22 15:03+0200 PO-Revision-Date: 2011-09-22 15:37+0200 Last-Translator: timo Language-Team: English Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=ASCII Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); 

当我用文本编辑器查看.mo文件时,看起来标题似乎被放置在文件的任意位置。我想给你展示,但我不能粘贴文件。它看起来像是我的msgid列表,然后是标题,然后是我的msgstr列表。
我使用了以下命令生成.mo文件:
msgfmt -c -v -o en/LC_MESSAGES/messages.mo messages_en.po

在执行这个命令之后,我重新启动了我的 Web 服务器(lighttpd)。

我做错了什么,怎么修复?

2个回答

13

在进行一些不同的查询后,我偶然发现了这个网站: http://framework.zend.com/issues/browse/ZF-2914

在这里,我发现将空字符串翻译为元信息实际上是在 gettext 的规范中:

这也有另一个优点,在PO文件中,GNU gettext 中的空字符串通常被翻译为附加到特定MO文件的某些系统信息,而空字符串必然成为原始和已翻译表中的第一个,使得非常容易找到系统信息。


0
你可以尝试创建另一个函数,在消息不为空或空字符串("")时调用gettext。PHP代码示例如下:
function _tl($msg)
{
    $ret = "";
    if($msg != "")
    {
        $ret = _($msg);
    }    

    return $ret;

}

然后在poedit上,打开目录首选项,在关键字选项卡中设置使用新函数_tl。这是poedit识别您代码中的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接