over 4 years ago

前言

最近,在使用 jinja2 渲染 html 時,遇到了多國語言 (i18n) 的問題。jinja2 本身很完善,對於 i18n 的支援也沒有問題,只是沒有標準的翻譯檔建立機制。後來發現 pocoo 其實也有提供建立翻譯檔的 Solution,叫做 Babel,只是當初我只專注在 Template Syntax,而沒有仔細的去看文件。

安裝

只需要使用 pip 即可完成安裝。

pip install babel

如何使用

在使用 babel 之前,當然要先準備好需要翻譯的 Template 檔 。除此之外,還需要在 babel 的執行路徑建立一個名為 babel.config 的檔案。此檔案的用意在於告訴 babel 需要檢查的路徑,以及要使用何種的翻譯模式。以 jinja2 為例,babel 會自動搜尋 Template 中,使用 _ 或是 gettext 包覆的字串,如:{{ _("Translate Me.") }}

babel 設定檔範例

babel.config
[ignore: .venv/**]
[ignore: test/**]

[python: **.py]

[jinja2: **/templates/**.html]
encoding = utf-8

指令 (Command line tool)

在翻譯過程中,會使用的指令主要有四個。

  1. 從 Template 產生 POT 檔

    $ pybabel extract -F babel.config . -o i18n/messages.pot
    
  2. 從 POT 檔產生各個語言的翻譯檔 (PO 檔)

    $ pybabel init(update) -l zh_TW -d ./i18n -i ./i18n/messages.pot
    
  3. 從 POT 檔產生各個語言的翻譯檔 (PO 檔)

    $ pybabel init(update) -l zh_TW -d ./i18n -i ./i18n/messages.pot
    
  4. 編譯翻譯好的 PO 檔。

    $ pybabel compile -f -d ./i18n
    

延伸閱讀

  1. Differences Between POT and PO Files
  2. gettext syntax of jinja2 template
← Login by remote user in django Introduce to Saltstack (1) - 安裝篇 →
 
comments powered by Disqus