2012-05-18 50 views
4

我在尋找i18ndude的改進版本(簽出v3.2.2)或某種繼任者。 i18ndude從Python代碼(使用pygettext)和Zope頁面模板中提取可翻譯的字符串,但它有點不夠實際:正在尋找i18ndude的替代產品,或者是改進版本

  • 它隱藏pygettext的命令行選項,不可能在沒有黑客代碼的情況下指定關鍵字
  • 很難理解和難以擴展(例如,可能想要以某種方式添加對Javascript文件的解析)
  • 命令行語法很麻煩(例如「i18ndude merge --pot ... --merge ... --merge2 ...「)
  • 某些文件未以錯誤的方式進行分析或解析,導致某些字符串未找到(例如,每個文件命名爲」* pt「被認爲是HTML,甚至是「* .xml.pt」)。
  • 發展似乎在2010年

已經結束這將是不錯的東西

  • 一個更好的命令行界面,例如像Subversion一樣,支持「命令」和「幫助命令」
  • 易於擴展
  • 易於配置(例如,使用哪個解析器解析什麼類型的文件,或者如何分辨文件類型,例如,使用svn: mime類型的屬性)

由於命令行界面可能與i18ndude中的一個不兼容,我認爲最好去替換。

現在是否有人寫過這樣的工具,願意分享它,還是這個任務還有待完成?

回答

4

你試過Babel?它支持用於從各種來源提取消息的插件系統。

lingua爲ZPT和zope.i18nmessageid提供插件,爲您提供i18ndude的所有功能,但是具有相當活躍的開源社區。

要在您的項目中使用babel,您需要configure your setup.py to use babel commands,然後將這些函數作爲setup.py命令運行;例如python yourpackage/setup.py extract_messages

提供的lingua雞蛋可以作爲一個依賴,那麼你可以它在message_extractors結構插件,你setup.py告訴巴貝爾如何從源文件中提取信息的i18n:

... 
from babel.messages import frontend as babel 
... 


setup(... 
    setup_requires=['lingua'], 
    cmdclass = dict(
     compile_catalog=babel.compile_catalog, 
     extract_messages=babel.extract_messages, 
     init_catalog=babel.init_catalog, 
     update_catalog=babel.update_catalog, 
    ), 
    message_extractors = { 
     'path/in/package': [ 
      ('**.py',    'lingua_python', None), 
      ('**/templates/**.pt', 'lingua_xml', None), 
     ], 
    }, 
    ... 
) 

注意您不能將Babel作爲setup_requires依賴項包含在內,因爲setup.py腳本只有在它可以實際導入babel時才起作用!你可以嘗試通過爲cmdclass條目創建填充來解決這個問題,但我還沒有嘗試過。現在,只需在您的virtualenv或全球安裝Babel蛋。

如果你想使用--mapping-file CLI選項而不是message_extractors項,該選項期望一個INI風格文件格式[method fileglob]標題:

[lingua_python **.py] 

[lingua_xml **/templates/**.pt] 

每個部分都包含選項要傳遞給提取函數(每個option = value行在傳遞給它的選項字典中成爲鍵 - 值對),但我不認爲lingua_ *方法會採用任何選項。

提取器配置然後用於您在命令行中提到的每個輸入目錄或setup.py packages選項中提到的每個包。

+0

謝謝,我會給lingua一個嘗試。 「pip install lingua」首先失敗,但使用我的啓用ssl的解釋器工作。 – Tobias

+0

我安裝了通用語言和babel。至於語言,我發現了4個新的可執行文件(po-to-xls,xls-to-po,runxlrd.py和polint),這些對我來說都不是一個抽象工具。使用babel我認爲要創建一個setup.py文件來使用extract_messages ...命令,對吧? – Tobias

+0

我已經更新了我的答案,以展示巴貝爾如何融入您的項目。 –