poedit不承认_x

时间:2014-10-21 22:12:25

标签: wordpress translation poedit

我的.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就足以拿起字符串,但它永远不会。

我做错了什么,或者我遇到过一个真正的错误?

1 个答案:

答案 0 :(得分:1)

请参阅http://codex.wordpress.org/Function_Reference/_x _x()的文档 - 第二个参数是context,它是PO中包含的字符串以及源文本,用于消除具有不同含义的其他相同字符串的歧义。上面的codex页面有一个例子;另一个是例如"开"可以在不同的上下文中使用,因此程序员可以使用例如"文件菜单"作为背景。

重要的是,它的处理方式与要翻译的文本相同。文本必须是xgettext的字符串文字来提取它,上下文也是如此(它必须是:它是进入PO文件的东西!)。

$this->post_type不是文字,这就是xgettext无法识别的原因。它无法知道post_type值在运行时可能是什么,所以它不可能知道写入创建的PO文件的内容。

要解决此问题,您需要使用_x()至少包含前两个参数字符串文字。