NOTE: 18表示Internationlization這個(gè)單詞首字母I和結(jié)尾字母N之間的字母有18個(gè)。I18N就是Internationlization的意思。
Django 完全支持文本翻譯,日期時(shí)間數(shù)字格式和時(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 "更新于" ... 此處省去幾百字 |
四,編譯一下,這樣翻譯才會(huì)生效
1 | python manage.py compilemessages |
如果翻譯不生效,請(qǐng)檢查你的語言包的文件夾是不是有 中劃線,請(qǐng)用下劃線代替它。
比如 zh-hans 改成 zh_hans
Django 官方教程:internationalization-and-localization
聯(lián)系客服