错误:在翻译wordpress主题时,msgstr不是有效的PHP

时间:2013-10-04 18:25:22

标签: php wordpress wordpress-theming gettext

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

  

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

该字符串的资源如下:

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

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

修改

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

更新

文档here%将被评论数量替换,所以我认为实际问题是Poedit而不是代码。

2 个答案:

答案 0 :(得分:1)

问题在于POEdit和使用其他翻译工具,我得到了我想要的东西。

答案 1 :(得分: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标志,它应该会有所帮助。它不会尝试验证sprintf格式,它不是printf格式。