Django 支持國際化,多語言。Django的國際化是默認(rèn)開啟的,如果您不需要國際化支持,那么您可以在您的設(shè)置文件中設(shè)置 USE_I18N = False,那么Django會進(jìn)行一些優(yōu)化,不加載國際化支持機(jī)制。NOTE: 18表示Internationlization這個單詞首字母I和結(jié)尾字母N之間的字母有18個。I18N就是Internationlization的意思。
Django 完全支持文本翻譯,日期時間數(shù)字格式和時區(qū)。 本質(zhì)上講,Django做了兩件事: 它允許開發(fā)者指定要翻譯的字符串 Django根據(jù)特定的訪問者的偏好設(shè)置 進(jìn)行調(diào)用相應(yīng)的翻譯文本。
一,開啟國際化的支持,需要在settings.py文件中設(shè)置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | MIDDLEWARE_CLASSES = (
...
'django.middleware.locale.LocaleMiddleware',
)
LANGUAGE_CODE = 'en'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LANGUAGES = (
('en', ('English')),
('zh-cn', ('中文簡體')),
('zh-tw', ('中文繁體')),
)
#翻譯文件所在目錄,需要手工創(chuàng)建
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
TEMPLATE_CONTEXT_PROCESSORS = (
...
"django.core.context_processors.i18n",
)
|
注意:Django 1.9 及以上版本中,語言的代碼發(fā)生變化(詳情鏈接:github, django ticket,如下 1 2 3 4 5 | LANGUAGES = (
('en', ('English')),
('zh-hans', ('中文簡體')),
('zh-hant', ('中文繁體')),
)
|
二,生成需要翻譯的文件(Django 1.8及以下的版本): 1 2 | python manage.py makemessages -l zh-cn
python manage.py makemessages -l zh-tw
|
Django 1.9 及以上版本要改成 1 2 | python manage.py makemessages -l zh_hans
python manage.py makemessages -l zh_hant
|
三,手工翻譯 locale 中的 django.po 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 此處省去500字
...
#: .\tutorial\models.py:23
msgid "created at"
msgstr "創(chuàng)建于"
#: .\tutorial\models.py:24
msgid "updated at"
msgstr "更新于"
...
此處省去幾百字
|
四,編譯一下,這樣翻譯才會生效
1 | python manage.py compilemessages
|
如果翻譯不生效,請檢查你的語言包的文件夾是不是有 中劃線,請用下劃線代替它。 比如 zh-hans 改成 zh_hans
Django 官方教程:internationalization-and-localization
|