Django的國際化

Django的國際化

Django基於python的gettext來實現國際化。其過程爲安裝gettext工具,而後再代碼中調用指定方法,而後用gettext提供的程序來把代碼中須要翻譯的部分找出來寫到一個po的文件中,翻譯po中的內容,最後經過gettext工具編譯成mo文件。python

安裝gettext

在windows上安裝gettext

能夠本身從下面網址下載: http://gnuwin32.sourceforge.net/packages/gettext.htmdjango

須要下載兩個東西:windows

  • gettext-0.14.4-bin.zip
  • gettext-0.14.4-dep.zip

在Ubuntu上安裝gettext

apt-get install gettext

配置環境變量

解壓上面的兩個下載的zip包。而後把裏面的bin目錄配置到環境變量的path中。app

代碼中使用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目錄下執行此命令。 另外此命令只須要執行一次。之後直接添加消息的翻譯。.net

翻譯消息

打開locale\zh_hans\LC_MESSAGES下面的django.po文件。翻譯

msgid "username"
msgstr "用戶名"

開始對每個消息進行翻譯。code

編譯消息文件

在消息文件翻譯以後,還須要把此消息文件變成二進制文件。須要運行下面命令:htm

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

相關文章
相關標籤/搜索