django的多语言国际化

介绍

Django 支持国际化,多语言。Django的国际化是默认开启的,若是您不须要国际化支持,那么您能够在您的设置文件中设置 USE_I18N = False,那么Django会进行一些优化,不加载国际化支持机制。python

NOTE: 18表示Internationalization这个单词首字母I和结尾字母N之间的字母有18个。I18N就是Internationalization(国际化)的意思。django

Django 彻底支持文本翻译,日期时间数字格式和时区。优化

本质上讲,Django作了两件事:spa

  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文件中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 中要用 中划线,不要也改了编译

相关文章
相关标签/搜索