2

我正在尝试使用 Poedit 为 WordPress 翻译一个主题。当我尝试翻译% comment字符串时,无论是否%在翻译中使用,我都会收到此错误:

错误:与“msgid”不同,“msgstr”不是有效的 PHP 格式字符串。
原因:终止指令编号 1 的字符不是有效的转换说明符。

该字符串的资源如下:

comments_number(
    __( '0 comments' , 'hbthemes' ) ,
    __( '1 comment' , 'hbthemes' ),
    __( '% comments' , 'hbthemes' )
);

我查看了 gettext 手册,但不明白什么会导致这些错误。起初我想知道如何%在格式字符串中只有一个,但主题本身显示评论计数正确。

编辑

如果我在翻译中使用%%而不是%,错误仍然存​​在,如果我在 PHP 代码中更改它,我会得到两次注释计数,例如,22而不是2.

更新

这里的文档说%将被评论的数量所取代,所以我认为实际的问题是 Poedit 而不是代码。

4

2 回答 2

1

问题出在 POEdit 上,通过使用另一个翻译工具,我得到了我想要的东西。

于 2014-02-24T13:07:42.940 回答
0

你到底想完成什么?在我看来,您正在重新发明轮子并在其上以错误的方式做事。它认为你应该使用 sprintf(__('%d comments'), get_comments_number()) 并且它想强迫你让它正确。你不应该这样翻译。我不确定 wordpress 是否使用 gettext 本身。如果是,请使用 ngettext('%d comment', '%d comments', get_comments_number())。这样,它将具有其他语言的正确形式,例如在 1、3 和 5 之间有所不同。

请参阅http://codex.wordpress.org/Function_Reference/_n 可能是这样:

    $localized = _n( "%d comment", "%d comments", get_comments_number(), 'hbthemes' );
    // Not sure how it behaves on number 0, try $localized, $localized, $localized
    comments_number( __('0 comment', 'hbthemes'), $localized, $localized);

问题是 Wordpress 是如何设计的,不能很好地翻译。如果您在 po 文件中手动删除此字符串之前的 #, php-format 标志,它应该会对您有所帮助。它不会尝试验证不是 printf 格式的 sprintf 格式。

于 2013-11-05T17:53:31.880 回答