自强学堂
自强学堂:学习、分享、让你更强!
Django 教程HTMLCSSJAVASCRIPTJQUERYSQLPHPBOOTSTRAPANGULARXML
 

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 及以上版本中,语言的代码发生变化(详情链接:github, django ticket,如下

LANGUAGES = (
    ('en', ('English')),
    ('zh-hans', ('中文简体')),
    ('zh-hant', ('中文繁體')),
)


二,生成需要翻译的文件(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

此处省去500字
...


#: .\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 中要用 中划线,不要也改了,就这一句话,你可能会浪费几个小时或几天)

Django 官方教程:internationalization-and-localization

自强学堂 源代码下载:https://github.com/twz915/zqxt
服务承诺:2017年03月11日到12日出现了网站不可访问,不少同学发来了邮件关心,感谢大家对自强堂Django教程的支持与厚爱。自强学堂不会关闭,我向大家承诺,我依然会坚持每天答疑,看邮件回复邮件,服务器费用已经缴纳三年,后期会努力提高服务稳定性。我也还至少会再坚持做三年,直到2020年03月12日,我愿意坚持做这件事,是因为我认为这很有意义,2015年劳动节开始写这个教程的时候,我没有想到如今,每天会有5000人来自强学堂看Django教程,我希望能帮助到更多的人。—— 2017年03月12日于北京深夜 涂伟忠