国际化需要 gettext 支持
mac:
brew install gettextbrew link gettext --force
配置 settings.py
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware',# 国际化翻译,位置必须在 Common 前 session 后,'django.middleware.locale.LocaleMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'users/templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': [# 国际化渲染'django.template.context_processors.i18n','django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},]# 开启国际化USE_I18N = True# 开启本地化USE_L10N = TrueLANGUAGES = (('en', 'English'),('zh-hans', '中文简体'),('es', 'Español'))# 翻译文件所在目录, 与 manage.py 文件在同级目录下LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),)
模板使用
中文索引可能存在不翻译的情况,所以尽量使用英文索引
{%trans “需要翻译的字符串” %}
<!DOCTYPE html>{% load i18n %}<body><h2>{%trans "Email format error" %}</h2></body>
view 使用
#from django.utils.translation import ugettext_lazy as _ 2.0以前from django.utils.translation import gettext as _def some_view(request):return _("Email format error")
如果不想使用django 的国际化,自己判断也可以
通过 request.LANGUAGE_CODE 获取 Accept-Language
生成翻译文件 locale/en/LC_MESSAGES/django.po
生成全部
python manage.py makemessages --all
指定生成
python manage.py makemessages -l enpython manage.py makemessages -l es
填写翻译
e s:
msgid "Email format error"msgstr "Error de formato de correo electrónico"
生成 django.mo
python manage.py compilemessages
