Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:翻译wordpress主题时,msgstr不是有效的PHP_Php_Wordpress_Wordpress Theming_Gettext - Fatal编程技术网

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

错误:翻译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

我正在尝试使用Poedit为WordPress翻译一个主题。当我尝试翻译
%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()