国际化需要 gettext 支持

mac:

  1. brew install gettext
  2. brew link gettext --force

配置 settings.py

  1. MIDDLEWARE = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. # 国际化翻译,位置必须在 Common 前 session 后,
  5. 'django.middleware.locale.LocaleMiddleware',
  6. 'django.middleware.common.CommonMiddleware',
  7. 'django.middleware.csrf.CsrfViewMiddleware',
  8. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  9. 'django.contrib.messages.middleware.MessageMiddleware',
  10. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  11. ]
  12. TEMPLATES = [
  13. {
  14. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  15. 'DIRS': [os.path.join(BASE_DIR, 'users/templates')],
  16. 'APP_DIRS': True,
  17. 'OPTIONS': {
  18. 'context_processors': [
  19. # 国际化渲染
  20. 'django.template.context_processors.i18n',
  21. 'django.template.context_processors.debug',
  22. 'django.template.context_processors.request',
  23. 'django.contrib.auth.context_processors.auth',
  24. 'django.contrib.messages.context_processors.messages',
  25. ],
  26. },
  27. },
  28. ]
  29. # 开启国际化
  30. USE_I18N = True
  31. # 开启本地化
  32. USE_L10N = True
  33. LANGUAGES = (
  34. ('en', 'English'),
  35. ('zh-hans', '中文简体'),
  36. ('es', 'Español')
  37. )
  38. # 翻译文件所在目录, 与 manage.py 文件在同级目录下
  39. LOCALE_PATHS = (
  40. os.path.join(BASE_DIR, 'locale'),
  41. )

模板使用

中文索引可能存在不翻译的情况,所以尽量使用英文索引
{%trans “需要翻译的字符串” %}

  1. <!DOCTYPE html>
  2. {% load i18n %}
  3. <body>
  4. <h2>{%trans "Email format error" %}</h2>
  5. </body>

view 使用

  1. #from django.utils.translation import ugettext_lazy as _ 2.0以前
  2. from django.utils.translation import gettext as _
  3. def some_view(request):
  4. return _("Email format error")

如果不想使用django 的国际化,自己判断也可以
通过 request.LANGUAGE_CODE 获取 Accept-Language

生成翻译文件 locale/en/LC_MESSAGES/django.po

生成全部

  1. python manage.py makemessages --all

指定生成

  1. python manage.py makemessages -l en
  2. python manage.py makemessages -l es

填写翻译
e s:

  1. msgid "Email format error"
  2. msgstr "Error de formato de correo electrónico"

生成 django.mo

  1. python manage.py compilemessages

后序更新索引与翻译,需要重新生成翻译文件,重新编译