国际化需要 gettext 支持
mac:
brew install gettext
brew 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 = True
LANGUAGES = (
('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 en
python 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