Django的國際化
Django基于python的gettext來實作國際化。其過程為安裝gettext工具,然後再代碼中調用指定方法,然後用gettext提供的程式來把代碼中需要翻譯的部分找出來寫到一個po的檔案中,翻譯po中的内容,最後通過gettext工具編譯成mo檔案。
安裝gettext
在windows上安裝gettext
可以自己從下面網址下載下傳:
http://gnuwin32.sourceforge.net/packages/gettext.htm
需要下載下傳兩個東西:
- gettext-0.14.4-bin.zip
- gettext-0.14.4-dep.zip
在Ubuntu上安裝gettext
apt-get install gettext
配置環境變量
解壓上面的兩個下載下傳的zip包。然後把裡面的bin目錄配置到環境變量的path中。
代碼中使用gettext
cd ..
from django.utils.translation import ugettext as _
from django.http import HttpResponse
def my_view(request):
output = _("Welcome to my site.")
return HttpResponse(output)
生成消息檔案
上面的例子中的消息可通過下面的指令生成消息檔案
django-admin makemessages -l zh_hans
注意: 需要在一個app目錄下執行此指令。
另外此指令隻需要執行一次。以後直接添加消息的翻譯。
翻譯消息
打開locale\zh_hans\LC_MESSAGES下面的django.po檔案。
msgid "username"
msgstr "使用者名"
開始對每一個消息進行翻譯。
編譯消息檔案
在消息檔案翻譯之後,還需要把此消息檔案變成二進制檔案。需要運作下面指令:
django-admin compilemessages
編譯之後會生成django.mo檔案。
接下來就可以開始進行測試了。
其他事項
注意:決不要在settings檔案中導入 django.utils.translation ,因為這個子產品本身是依賴于settings,這樣做會導緻無限循環,而是使用一個“虛構的” gettext()
ugettext = lambda s: s
LANGUAGES = (
('de', ugettext('German')),
('en', ugettext('English')),
)
錯誤
OSError: No translation files found for default language zh_CN.
需要把settings.py中的LANGUAGE_CODE配置zh-cn修改成zh-hans,就好了