[Python] i18n

  • 5248
  • 0
  • 2013-07-02

[Python] i18n

1. 將下列文字存成 lang.po

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR [EMAIL@ADDRESS], YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version PACKAGE VERSION\n"
"POT-Creation-Date: 2013-06-24 14:16+台北標準時間\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME [EMAIL@ADDRESS]\n"
"Language-Team: LANGUAGE [LL@li.org]\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Generated-By: pygettext.py 1.5\n"

msgid "Hello World!!"
msgstr "哈囉世界!!"

charset 與 endocding 可以自訂,我都設為 utf-8,

這個檔案是由 pygettext.py 所產生的,

但你可以不用管它,

最後我會介紹功能更強大的 GNU xgettext。

 

2. 將 lang.po 編譯為 lang.mo:

C:\Python33\Tools\i18n\msgfmt.py –o lang.mo lang.po

然後放到 APP_DIR\locale\cn\LC_MESSAGES 目錄下,
APP_DIR就是程式的所在目錄。

 

3. 程式內容如下:

test.py

import gettext
gettext.install('lang', './locale', unicode=True)
gettext.translation('lang', './locale', languages=['cn']).install(True)
print (_('Hello World!!'))

 

執行結果:

 

[ 關於 GNU xgettext ]

它可以 parse 多種程式語言原始碼,

(pygettext 只能 parse Python 原始碼)

找出所有字串,產生 .po 檔,

用法如下:

xgettext --language=Python --keyword=_ --output=test.po test.py

Windows要另外下載 xgettext.exe for win32

裡面也有 msgfmt.exe (如果你不想用 Python 附的 msgfmt.py 的話也可以用這個)

 

參考:

[1] Internationalize a Python application

[2] python國際化(i18n)和中英文切換