我正在尝试使用Poedit为WordPress翻译主题。当我尝试翻译% comment
字符串时,无论我是否在翻译中使用%
,我都会收到此错误:
错误:'msgstr'不是有效的PHP格式字符串,与'msgid'不同 原因:终止指令编号1的字符不是有效的转换说明符。
该字符串的资源如下:
comments_number(
__( '0 comments' , 'hbthemes' ) ,
__( '1 comment' , 'hbthemes' ),
__( '% comments' , 'hbthemes' )
);
我看了一下gettext手册,但不明白是什么会造成这些错误。起初我想知道如何在格式字符串中只有一个%
,但主题本身显示注释正确计数。
修改:
如果我在翻译中使用%%
而不是%
,则错误仍然存在,如果我在PHP代码中更改它,我会将注释计数两次,例如22
代替2
。
更新:
文档here说%
将被评论数量替换,所以我认为实际问题是Poedit而不是代码。
答案 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格式。