天天看點

Django的國際化

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,就好了