python gettext_python gettext使用
python中使用gettext進行語言國際化的方法
1.編輯源代碼, 保存為gettextdemo.py
import gettext
catalogs = gettext.find("example", localedir="locale", all=True)
print 'catalogs:',catalogs
t = gettext.translation('example', "locale", fallback=True)
_=t.ugettext
print(_("this message"))
2.從源代碼中抽取需要國際化的文本消息,并轉換創建.pot文件, 可以使用的工具為pygettext.py 或者GNU工具 xgettext
這里我使用xgettext, ?MAC上使用homebrew 安裝, 輸入命令:
>brew install xgettext
即可自動完成安裝, 安裝后的默認目錄:/usr/local/Cellar/gettext/0.19.2/,
進入/usr/local/Cellar/gettext/0.19.2/bin 可以看到有很多可執行文件 , 我們這里需要用到xgettext 和 msgfmt
回到正題, 輸入以下命令生成example.pot文件
xgettext -o example.pot gettextdemo.py
3.將example.pot復制到./local/en_US/LC_MESSAGES/example.po, 修改這個文件,替換要國際化的消息內容
如把
msgid "this message"
msgstr "translated message"修改為:
msgid "this message"msgstr "translated message"
4.將po文件轉換成.mo 二進制文件,
cd locale/en_US/LC_MESSAGES/
msgfmt -o example.mo example.po可以看到轉換后生成的mo是二進制文件,而po,pot都是文本文件
這一步很關鍵,我在弄的時候沒注意到這一步, 直接把.po文件復制成.mo文件, 導致出現以下類似的情況, 掉到坑里,半天爬不出來,汗~
File "C:\env\lib\gettext.py", line 281, in _parse
raise IOError(0, 'Bad magic number', filename)
IOError: [Errno 0] Bad magic number: 'advbus/locale\\ja\\LC_MESSAGES\\noname.mo'
參考資料:
1. 15.1.3
總結
以上是生活随笔為你收集整理的python gettext_python gettext使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 2259 team queue团
- 下一篇: LeetCode 109. 有序链表转换