个性化阅读
专注于IT技术分析

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

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

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

该字符串的资源在下面的行中:

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

我看了gettext手册, 但不明白是什么原因导致这些错误。起初, 我想知道格式字符串中只可以包含一个%, 但是主题本身显示注释计数正确。

编辑:

如果我在翻译中使用%%而不是%, 则错误仍然存​​在, 并且如果我在PHP代码中进行了更改, 则会得到两次注释, 例如22而不是2

更新:

这里的文档说%将被注释数量代替, 所以我认为实际问题出在Poedit而不是代码。


#1


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


#2


你到底想完成什么?在我看来, 你正在重新发明轮子, 并在此之上做错了路。它认为你应该使用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格式。

赞(0)
未经允许不得转载:srcmini » 错误:翻译wordpress主题时,msgstr不是有效的PHP

评论 抢沙发

评论前必须登录!