我正在尝试使用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格式。
评论前必须登录!
注册