【问题标题】:Gettext & POedit - Errors validating files with '%'Gettext 和 POedit - 使用“%”验证文件时出错
【发布时间】:2019-01-28 16:22:48
【问题描述】:

对于 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 文件。

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

注意

'%'它实际上没有空格,如果我不把它们放在那里它只会​​显示为 % 所以我不能显示一个例子。

【问题讨论】:

    标签: php html gettext html-entities poedit


    【解决方案1】:

    您的源代码和生成的.po 文件中没有一个示例,我只能猜测。您可能可以在以下来源中解决您的问题:

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

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

    xgettext: 特殊 cmets 记录在(有点...)https://www.gnu.org/software/gettext/manual/html_node/c_002dformat-Flag.html#c_002dformat-Flag

    【讨论】:

      【解决方案2】:

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

      #, php-format
      

      保持 '%' 原样并删除它似乎可行,尽管我不确定这是否会导致问题。

      【讨论】:

      • 它可以工作,但它是一个需要手动交互的 hack,每当您生成 .po 文件的新版本时。此外,格式规范是有意义的,当您运行msgfmt --check 编译.po 文件时,检查它们的语法正确性很重要。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-22
        • 2013-08-15
        • 2012-09-17
        • 2013-01-12
        • 1970-01-01
        • 2016-05-26
        • 2011-01-15
        • 2011-03-19
        相关资源
        最近更新 更多