2010-08-03 38 views
5

我編寫了一個使l10n的整個過程更簡單一點的gettext包裝,但不知何故,我無法讓PoEdit正確識別並解析函數的多個版本調用。這是我原來的:如何讓PoEdit正確解析自定義的「ngettext」實現?

_e(array('%d house', '%d houses'), 5); 

但是,這根本不起作用,PoEdit根本沒有選擇。我也試過:

_e('%d house', '%d houses', 5); 

這次PoEdit軟件捕捉%d house但不是%d houses複數形式,但如果我嘗試完全一樣,但有ngettext()稱之爲完美的作品,單數和複數形式被確定:

ngettext('%d house', '%d house', 5); 

我正確的(?)的添加_e關鍵字項目設置,但它不拿起復數形式。我也注意到,PoEdit只有_,gettextgettext_noop作爲默認的鍵盤才能拿起,沒有任何參考ngettext,dngettextdcngettext的功能,但它仍然可以正確地拿起ngettext調用...這使得我想知道PoEdit是否對ngettext關鍵字進行了硬編碼 - 這真的很讓人傷心。

無論如何,有沒有辦法讓PoEdit(或任何其他類似的應用程序),正確解析自定義函數?

+0

你有至少poEdit的1.3.0? – 2010-08-03 02:36:32

+0

@Alexandre:Poedit 1.4.6(Windows)。 – 2010-08-03 02:38:51

+0

我發現這個鏈接(http://www.devcomments.com/Zend_Translate-plural-forms-and-poedit-at188420.htm)似乎是不可能的。有沒有其他的選擇? – 2010-08-03 02:39:19

回答

0

這裏是另一種解決方案,它是非常容易安裝。只需按照以下步驟操作:

菜單:目錄 - >設置將打開設置對話框。在項目信息選項卡上,您會在底部找到「複數形式」。只要複製粘貼&在這一領域的以下行:

nplurals=2; plural=n != 1; 

這將完全解決問題。我甚至不需要重新消息來源;正確的行自動出現在PoEditer中。

+1

我不認爲你理解我的問題。 – 2011-04-03 17:33:00

3

其實你需要做以上兩件事。

  • 定義關鍵字像 '_E:1,2' AND
  • 添加複數形式 nplurals = 2;複數= n!= 1;

到類別設置

+1

複數形式因語言而異,但仍與問題無關。 – 2011-06-21 05:23:03

+0

ngettext只支持兩個複數形式,所以你有什麼意思? – Deckard 2011-08-17 16:54:48

+1

其實沒有。查看http://php.net/manual/en/function.ngettext.php上的第一個(也是唯一)示例:「1 okno」,「2 okna」和「5 oken」。 – 2011-08-17 17:38:20