【发布时间】:2015-02-09 09:37:14
【问题描述】:
我遇到了给定来源的翻译问题;
<?php
$this->messageAdd($this->_("Ett okänt fel uppstod när %0 skulle skapas!", $term2), "error");
return $this->setResultCode(self::RESULT_ERROR);
?>
如果我不是盲人,这是一个完全正常的字符串,我在其他源文件中有很多类似的字符串,但是这个特定的会导致 po 文件中出现这些行;
#: ../../../../path/to/source_file.php:552
#, php-format
msgid "Ett okänt fel uppstod när %0 skulle skapas!"
msgstr "An unknown error occurred while creating the %0!"
出现错误
错误:与“msgid”不同,“msgstr”不是有效的 PHP 格式字符串。原因:在指令编号 1 中,字符“w”不是有效的对话说明符。
问题是什么,为什么只有这个字符串会导致错误?如果我从源文件中删除字符串,poedit 中不会产生错误。
编辑#1;经过进一步研究,我找到了this issue,发现在源文件中的翻译字符串之前添加注释/* xgettext:no-php-format */可以解决问题。很高兴知道为什么这只发生在指定的字符串上而不是我的 5k+ 字符串中的任何其他字符串。
【问题讨论】:
-
因为
xgettext使用 启发式 可能是由在字符串中使用 % 触发的(你可能不会在所有 5k+字符串)。启发式(根据定义)偶尔会失败,这就是 gettext 内置支持手动更正它们的原因。 -
@VáclavSlavík 好的,谢谢。没错,我没有在所有字符串中使用 %,但我做了一个脚本计数,并且 3219 个字符串中有一个或多个 %[0-9] 实体。所以我仍然不确定为什么只有给定的字符串会导致错误。无论如何,内联注释有效。