2010-02-09 60 views
4

我正在使用PHP的gettext函数进行本地化。我使用Poedit来进行实际翻译,并且通过“从源代码更新”功能,可以非常容易地提取需要翻译的所有字符串 - 除了在heredoc语法中。从PHP heredoc语法中提取gettext翻译?

Poedit正在使用xgettext程序从PHP源文件生成.po文件。它精美的作品时,PHP代码如下所示:

echo "<h1>". _("test") ."</h1>"; 

但是下面没有得到提取(请注意,伪T-对象需要使用):

echo <<<EOD 
<h1>{$->_('test')} 
EOD; 

在PHP代码,你可以通过以下方式解决该问题:

<?php 
$t = _('test'); 
echo <<<EOD 
<h1>$t</h1> 
EOD 
?> 

但我真的宁愿在节目了xgettext可从定界符块中提取字符串。

在PHP文档注释workaround for that has been suggested。解决方法是处理告诉xgettext程序将PHP源文件视为Python代码。但是在Poedit中使用这种方法给了我很多来自xgettext解析器的语法错误。

有谁知道了xgettext获得从中提取PHP定界符语法翻译一个解决方法吗?

一个有点相关的票已经打开的gettext项目的门票系统上:http://savannah.gnu.org/bugs/?27740这表明了定界符支持可以改善?

+0

我创建了一个售票专为此:http://savannah.gnu.org/bugs/index.php?35944我希望没有更多的纯粹主义者来给解决方法。这只是烦人的,这不被支持。 – Ciantic 2012-03-22 11:51:30

回答

3

我是您在帖子中提及的gettext门票的记者。 当我提交了票,我脑海中完全不同的,更多的东西沿着这些线路:

<?php 
    $msg = _(<<<TXT 
    He said: "Hello world!". 
    TXT 
); 
?> 

的Gettext无法提取这样的定界符/ nowdoc字符串文本,但翻译大块时,这可能是真正有用的的文字。

就我而言,我使用gettext的CLI PHP脚本翻译包含XML标记的文本块。该标记是原文的一部分,需要翻译。必须手动转义标记中的每个引号或撇号,这些信息在POedit或其他编辑器中很难阅读。

在你的情况,看来你想在(定界符/ nowdoc)串插代码中提取。您可以轻松地通过准备文本解决这一问题之前,你实际使用插值:

<?php 
$t = _('test'); 
echo <<<EOD 
<h1>$t</h1> 
EOD 
?> 

我不认为这应该被认为是一个错误,因为不完全等同于您发布使用定界符将是代码:

<?php 
echo "<h1>{$t->_('test')}</h1>"; 
?> 

其中gettext无法提取“测试”消息。

+0

感谢您的回答! Ups - 显然我没有足够透彻地阅读gettext ticket。因为我想要的是 - 种 - 相反:从Poedit中提取的字符串中删除标记。 我正朝着你所建议的方向前进;在插值之前准备外部文本。但我仍然认为这是一种解决方法,从heredoc语法(IMHO)中提取文本将非常有用。 – 2010-02-15 11:47:29

+0

“你可以很容易的解决方法”呃,如果有人使用heredoc(像我一样)的内容是巨大的!这是一个缺陷功能。它应该是固定的。 – Ciantic 2012-03-22 11:42:15