Emi*_*sen 5 php heredoc gettext
我正在使用PHP的gettext函数进行本地化.我正在使用Poedit进行实际翻译,并且通过其"从源代码更新"功能,可以很容易地提取所有需要翻译的字符串 - 除了内部heredoc语法.
Poedit正在使用xgettext程序从PHP源文件生成.po文件.当PHP代码如下所示,它工作得很好:
echo "<h1>". _("test") ."</h1>";
Run Code Online (Sandbox Code Playgroud)
但是没有提取以下内容(请注意需要使用伪t对象):
echo <<<EOD
<h1>{$->_('test')}
EOD;
Run Code Online (Sandbox Code Playgroud)
在PHP代码中,您可以通过以下方式解决问题:
<?php
$t = _('test');
echo <<<EOD
<h1>$t</h1>
EOD
?>
Run Code Online (Sandbox Code Playgroud)
但我真的希望xgettext程序可以从heredoc块中提取字符串.
一个对于解决办法已建议在PHP文档注释.解决方法是告诉xgettext程序将PHP源文件视为Python代码.但是在Poedit中使用这种方法会给我带来很多来自xgettext解析器的语法错误.
有没有人知道获取xgettext从PHP heredoc语法中提取翻译的解决方法?
在gettext项目的票证系统上打开了一个有点相关的票证:http://savannah.gnu.org/bugs/?27740这表明可以改进对heredoc语法的支持?
小智 4
我是您在帖子中提到的 gettext 票证的记者。当我提交票证时,我的想法完全不同,更多的是这样的:
<?php
$msg = _(<<<TXT
He said: "Hello world!".
TXT
);
?>
Run Code Online (Sandbox Code Playgroud)
Gettext 无法从此类heredoc/nowdoc 字符串中提取文本,但这在翻译大段文本时非常有用。
就我而言,我在 CLI PHP 脚本中使用 gettext 来翻译包含 XML 标记的文本块。该标记是原文的一部分,也必须翻译。必须手动转义标记中的每个引号或撇号使得消息在 POedit 或任何其他编辑器中很难阅读。
就您而言,您似乎希望提取 (heredoc/nowdoc) 字符串中的内插代码。您可以通过在实际使用插值之前准备文本来轻松解决此问题:
<?php
$t = _('test');
echo <<<EOD
<h1>$t</h1>
EOD
?>
Run Code Online (Sandbox Code Playgroud)
我认为这不应该被视为错误,因为与您使用heredoc语法发布的代码完全相同:
<?php
echo "<h1>{$t->_('test')}</h1>";
?>
Run Code Online (Sandbox Code Playgroud)
gettext 也无法从中提取“test”消息。
| 归档时间: |
|
| 查看次数: |
1614 次 |
| 最近记录: |