我的.po文件包含:
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
"_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_ex:1,2c;"
"esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n"
我的php / wordpress代码包含:
_x( 'Add New', $this->post_type , $domain ),
我知道Poedit正在扫描该文件(所有其他可翻译的字符串都在"更新目录"并共享同一个域)。如果我将_x更改为__(并删除上下文参数),它也会选择那个。但正如它所写,"添加新"字符串根本不会在PoEdit中显示。
即使我手动将字符串添加到po文件中,它也会将其放入"过时的字符串"尝试从源代码更新到.po文件后...
会想到" _x:1,2c;" bit就足以拿起字符串,但它永远不会。
我做错了什么,或者我遇到过一个真正的错误?
答案 0 :(得分:1)
请参阅http://codex.wordpress.org/Function_Reference/_x _x()
的文档 - 第二个参数是context,它是PO中包含的字符串以及源文本,用于消除具有不同含义的其他相同字符串的歧义。上面的codex页面有一个例子;另一个是例如"开"可以在不同的上下文中使用,因此程序员可以使用例如"文件菜单"作为背景。
重要的是,它的处理方式与要翻译的文本相同。文本必须是xgettext
的字符串文字来提取它,上下文也是如此(它必须是:它是进入PO文件的东西!)。
$this->post_type
不是文字,这就是xgettext
无法识别的原因。它无法知道post_type值在运行时可能是什么,所以它不可能知道写入创建的PO文件的内容。
要解决此问题,您需要使用_x()
至少包含前两个参数字符串文字。