我已经在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文件时,我看到标题似乎被放置在文件中的随机位置。我很想给你看,但是我不能把文件粘贴进去。这里有一个msgstr的列表,然后是header和msgstr的列表
我使用以下命令生成.mo文件:msgfmt -c -v -o en/LC_MESSAGES/messages.mo messages_en.po
执行此命令后,我重新启动了我的web服务器(lighttpd)。
我做错了什么,我该怎么做?
在搜索了一些不同的查询后,我偶然发现了这个网站:http://framework.zend.com/issues/browse/zf - 2914
这里我发现空字符串到元信息的转换实际上是在gettext:
的规范中。这还有另一个优点,因为PO文件GNU gettext中的空字符串通常被翻译成附加到该特定MO文件的一些系统信息,并且空字符串必然成为原始表和翻译表中的第一个,使得系统信息非常容易找到。
您可以尝试创建另一个函数,仅当消息不同于空白或空字符串(")时调用gettext。php中这样写:
function _tl($msg)
{
$ret = "";
if($msg != "")
{
$ret = _($msg);
}
return $ret;
}
然后在目录首选项中,在keywords选项卡中设置新函数_tl的使用。这是poedit在您的代码中识别它的方式。