Gettext 和 POedit - 验证带有“%”的文件时出错

Gettext & POedit - Errors validating files with '%'

对于 POedit 中带有“%”符号的字符串,我遇到了一些不同的错误。

第一个:

a format specification for argument 1 doesn't exist in 'msgstr'

第二个:

msgstr is not a valid PHP string, unlike 'msgid'. Reason: In the directive number 1, the character 'a' is not a valid conversion specifier.

在这种情况下,'a' 是“%”符号后的字母。 (例如,“100% 不锈钢”变为“100% 耐酸碱”)

为了尝试解决这个问题,我已经尝试过:

1) 在 .po 文件头中添加以下行:

"Content-Type: text/plain; charset=UTF-8\n"
"X-Poedit-SourceCharset: UTF-8\n"

2) 根据 How can I escape '%' character in a gettext string?

在翻译字符串中使用 %% 代替 '%'

3) 使用 & #37 ;而不是翻译字符串中的“%”。

4) 在翻译字符串中使用 'percent' 而不是 '%'。

我是不是遗漏了什么或者我应该替换源文本中所有“%”的实例?

编辑

所以我试着修改我的源文本。

我将源代码中的“%”替换为“%%”,并且能够输入“& #37 ;”进入翻译并验证 .po 文件。

但是...它不起作用,我的英文版本现在只有前端的“%%”,不会翻译成任何语言。

备注

'& #37 ;'它实际上没有空格,如果我不把它们放在那里,它只会显示为 %,所以我无法展示示例。

因此,当您在 POedit 中验证文件时,如果存在此类错误,它会在实际文件中添加如下内容:

#, php-format

将“%”保留原样并删除它似乎可行,但我不确定这是否会导致后续问题。

在您的源代码和生成的 .po 文件中缺少示例,我只能猜测。您可能可以在这样的来源中解决您的问题:

/* xgettext: no-php-format */
echo(gettext("string with % sign"));

我不是 PHP 程序员。语法错误请见谅

xgettext: 特殊评论记录在 https://www.gnu.org/software/gettext/manual/html_node/c_002dformat-Flag.html#c_002dformat-Flag

您可以输入来源:% 我想你也可以使用 %但是我没试过。

请记住,如果 % 符号在源代码中而不是在翻译中,就会出现问题。您可以在翻译中使用 % 符号而不会出错。