Django 基于 gettext 的国际化

96
与蟒唯舞
2018.06.07 13:34 字数 149

Django 框架具有很好的 I18N 和 L10N 的支持,其实现是基于 GNU 的 gettext。

设置

在项目的 settings.py 文件中进行设置:

from django.utils.translation import ugettext_lazy as _

MIDDLEWARE = [
   ...
   'django.middleware.locale.LocaleMiddleware',
]

USE_I18N = True

USE_L10N = True

LANGUAGES = (
    ('ko', _('Korean')),
    ('ja', _('Japanese')),
    ('zh_CN', _('Chinese'))
)

# 翻译文件所在目录
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)
创建及编译语言文件

Django 为我们提供了工具,makemessages 用来自动创建和维护这些文件。

python manage.py makemessages -l zh_CN

创建语言文件后,每次对其进行更改时,都需要将其编译为更有效的形式,以供 gettext 使用。

python manage.py compilemessages

生成的目录结构如图:


更多使用方法请参考官方文档:
https://docs.djangoproject.com/en/2.0/topics/i18n/translation/

Django
Web note ad 1