介紹
Django 支持國際化,多語言。Django的國際化是默認開啓的,若是您不須要國際化支持,那麼您能夠在您的設置文件中設置 USE_I18N = False,那麼Django會進行一些優化,不加載國際化支持機制。python
NOTE: 18表示Internationalization這個單詞首字母I和結尾字母N之間的字母有18個。I18N就是Internationalization(國際化)的意思。django
Django 徹底支持文本翻譯,日期時間數字格式和時區。優化
本質上講,Django作了兩件事:spa
- 它容許開發者指定要翻譯的字符串
- Django根據特定的訪問者的偏好設置 進行調用相應的翻譯文本。
開啓國際化的支持,須要在settings.py文件中設置
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', ('中文繁體')), ) # 翻譯文件所在目錄,須要手工建立 LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), ) TEMPLATE_CONTEXT_PROCESSORS = ( ... "django.core.context_processors.i18n", )
注意:Django 1.9 及以上版本中,語言的代碼發生變化翻譯
LANGUAGES = ( ('en', ('English')), ('zh-hans', ('中文簡體')), ('zh-hant', ('中文繁體')), ) # en,zh-hans就是語言的代碼
生成須要翻譯的文件
會自動將你要翻譯的地方都更新到.po文件中code
Django 1.8及如下的版本開發
python manage.py makemessages -l zh-cn python manage.py makemessages -l zh-tw
Django 1.9 及以上版本要改爲字符串
python manage.py makemessages -l zh_hans python manage.py makemessages -l zh_hant
手工翻譯 locale 中的 django.po
... #: .\tutorial\models.py:23 msgid "created at" # 要翻譯的語句 msgstr "建立於" # 翻譯後的語句 #: .\tutorial\models.py:24 msgid "updated at" msgstr "更新於" ...
編譯一下,這樣翻譯纔會生效
python manage.py compilemessages
若是翻譯不生效,請檢查你的語言包的文件夾是否是有 中劃線,請用下劃線代替它。io
好比 zh-hans 改爲 zh_hans (可是要注意 setttings.py 中要用 中劃線,不要也改了)編譯