错误:翻译wordpress主题时,msgstr不是有效的PHP
我正在尝试使用Poedit为WordPress翻译一个主题。当我尝试翻译错误:翻译wordpress主题时,msgstr不是有效的PHP,php,wordpress,wordpress-theming,gettext,Php,Wordpress,Wordpress Theming,Gettext,我正在尝试使用Poedit为WordPress翻译一个主题。当我尝试翻译%comment字符串时,无论是否在翻译中使用%,我都会遇到以下错误: 错误:“msgstr”与“msgid”不同,不是有效的PHP格式字符串。 原因:终止指令号1的字符不是有效的转换说明符 该字符串的资源位于下一行: comments_number( __( '0 comments' , 'hbthemes' ) , __( '1 comment' , 'hbthemes' ), __( '% co
%comment
字符串时,无论是否在翻译中使用%
,我都会遇到以下错误:
错误:“msgstr”与“msgid”不同,不是有效的PHP格式字符串。原因:终止指令号1的字符不是有效的转换说明符 该字符串的资源位于下一行:
comments_number(
__( '0 comments' , 'hbthemes' ) ,
__( '1 comment' , 'hbthemes' ),
__( '% comments' , 'hbthemes' )
);
我看了一下gettext手册,但不明白是什么导致了这些错误。起初,我想知道为什么只有一个%
可以是一个格式字符串,但是主题本身正确地显示了注释计数
编辑:
如果我在翻译中使用%%
而不是%%
,错误仍然存在,如果我在PHP代码中更改它,我会得到两次注释计数,例如22
而不是2
更新:
文档中说,
%
将被注释数取代,所以我认为实际的问题在于Poedit而不是代码。您到底想实现什么?在我看来,你是在重新发明轮子,而且在上面做得不对。它认为您应该使用sprintf(uuuu(“%d个注释”)、get_comments_number()),并希望强制您将其更正。你不应该这样翻译。我不确定wordpress是否使用gettext本身。如果是,请使用ngettext(“%d个注释”,““%d个注释”,获取注释编号()。这样,它将具有其他语言的正确形式,例如1、3和5之间的不同
看
也许这样:
$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格式标志,应该会对您有所帮助。它不会尝试验证不是printf格式的sprintf格式。问题在于POEdit,通过使用另一个翻译工具,我得到了我想要的。我编辑了问题并解释了结果。我只想翻译
。(“%comments”,“hbthemes”)
。我想如果我想像你说的那样做,我需要将\n()
添加到目录函数中。我现在不能尝试,但我会,我会分享结果。我尝试了,它打印了2d评论
,而不是2评论
。也许我需要看看get\u comments\u number()
。