2012-03-06 206 views
7

我需要從.po文件中提取消息。有沒有一個Python模塊來做到這一點?我寫了一個解析器,但它依賴於平臺(如\ r \ n,\ n),所以也許有一些正常的方法來達到那個目的?用python解析gettext .po文件

回答

-2

使用內置的gettext模塊:http://docs.python.org/library/gettext.html

看來,我作爲谷歌在第一個搜索結果提供python gettext後。如果你想知道這是你搜索的內容,那麼是的,它是。

+1

'gettext'是真棒,但它只能編譯'mo'文件,而不是純文本'po'那些 – MestreLion 2013-04-30 23:01:45

17

在大多數情況下,您不需要自己解析.po文件。開發人員給翻譯人員一個.pot模板文件,他們將其重命名爲xx_XX.po並翻譯字符串。然後,你作爲開發者只需要使用GNU的gettext工具(或它的Python實現,pygettext

他們「編譯」到.mo文件,但是,如果你想/需要解析的PO文件自己,而不是編譯它們,我強烈建議您使用polib,一個知名的python庫來處理po文件。它由幾個大型項目,如水銀和Ubuntu的Launchpad翻譯引擎:

的PyPI包家: http://pypi.python.org/pypi/polib/

代碼庫: https://bitbucket.org/izi/polib/wiki/Home

文檔: http://polib.readthedocs.org

導入模塊是一個具有MIT許可證的單個文件,因此您可以輕鬆地將它合併到代碼中,如下所示:

import polib 
po = polib.pofile('path/to/catalog.po') 
for entry in po: 
    print entry.msgid, entry.msgstr 

它不能比這更容易;)

+1

@saeedgnu作品:也許你可以幫助改善它? 'polib'是用於處理po文件的最廣泛使用的庫,並且它被主動地維護,所以任何改進都將有益於很多*軟件 – MestreLion 2016-03-22 15:02:05

+0

我認爲它應該是這樣的,使用它的程序可能會添加一些條目加載po文件(或創建一個新的pofile對象),它都在內存中 – saeedgnu 2016-03-23 17:41:04