我正在尝试使用Poedit为WordPress翻译主题。当我尝试翻译%注释字符串时, 无论是否在翻译中使用%, 都会收到此错误:
【错误(翻译wordpress主题时,msgstr不是有效的PHP)】错误:” 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格式。
推荐阅读
- 从缓存中排除短代码内容-WordPress
- 图文详解Java对象内存布局
- findmnt命令查找已挂载的文件系统
- Mybatis自定义拦截器与插件开发
- 华为P50pro手机丢了或被偷了怎么定位找回?教你一个找回的教程
- Seata TCC模式原理与实战
- 教你用OpenCV 和 Python实现圆物检测
- Python高级用法总结-字典排序
- 教你用OpenCV 和 Python给证件照换底色(蓝底 <-;红底-;白底)