django的多語言國際化


介紹

Django 支持國際化,多語言。Django的國際化是默認開啟的,如果您不需要國際化支持,那么您可以在您的設置文件中設置 USE_I18N = False,那么Django會進行一些優化,不加載國際化支持機制。

NOTE: 18表示Internationalization這個單詞首字母I和結尾字母N之間的字母有18個。I18N就是Internationalization(國際化)的意思。

Django 完全支持文本翻譯,日期時間數字格式和時區。

本質上講,Django做了兩件事:

  1. 它允許開發者指定要翻譯的字符串
  2. 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文件中

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

如果翻譯不生效,請檢查你的語言包的文件夾是不是有 中划線,請用下划線代替它

比如 zh-hans 改成 zh_hans (但是要注意 setttings.py 中要用 中划線,不要也改了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM