为什么gettext将空字符串转换为.po标题文本?

时间:2011-09-30 12:10:24

标签: php gettext

我在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

在此命令之后,我重新启动了我的网络服务器(lighttpd)。

我做错了什么以及如何解决?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

只有当消息与空格或空字符串不同时,您才可以尝试创建另一个函数来调用gettext("")。在php中这样的东西:

function _tl($msg)
{
    $ret = "";
    if($msg != "")
    {
        $ret = _($msg);
    }    

    return $ret;

}

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