2014-10-21 53 views
0

我的.po文件包含:poEdit的不承認_x

"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;」位將足以拾取字符串,但它永遠不會。

有沒有我做錯了,或者我遇到了一個實際的錯誤?

回答

1

請參閱_x()的文檔http://codex.wordpress.org/Function_Reference/_x - 第二個參數是上下文,它是PO中包含的字符串,與源文本一起用於消除其他含義不同的相同字符串。上面的codex頁面有一個例子;另一個例如是可以在不同情況下使用的「打開」,所以程序員可以使用例如「文件菜單」作爲上下文。

重要的部分是它的處理方式與待翻譯的文本相同。對於xgettext,文本必須是字符串文字才能提取它,上下文也是如此(它必須是:這是進入PO文件的東西!)。

$this->post_type不是字面意思,這就是爲什麼xgettext不能識別它。它無法知道post_type值在運行時可能是什麼,所以它不可能知道要在創建的PO文件中寫入什麼內容。

要解決此問題,您需要使用_x()以及至少前兩個參數字符串文字。

+0

謝謝。我忘了用你的電子郵件回答完成這件事! – yivi 2014-10-23 11:40:36