正经的官网链接:https://docs.djangoproject.com/zh-hans/3.0/topics/i18n/translation/

settings.py 配置

  1. MIDDLEWARE = [
  2. '...',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.locale.LocaleMiddleware', # 添加中间件
  5. 'django.middleware.common.CommonMiddleware',
  6. '...',
  7. ]
  8. TEMPLATES = [
  9. {
  10. 'OPTIONS': {
  11. 'context_processors': [
  12. '...',
  13. 'django.contrib.messages.context_processors.messages',
  14. 'django.template.context_processors.i18n', # 添加模板上下文
  15. ],
  16. },
  17. },
  18. ]
  19. LANGUAGE_CODE = 'en-us'
  20. TIME_ZONE = 'UTC'
  21. USE_I18N = True
  22. USE_L10N = True
  23. USE_TZ = True
  24. LANGUAGES = (
  25. ('en-us', ('English')),
  26. ('zh-hans', ('简体中文')), # 这里的 zh-hans 是小写
  27. )
  28. LOCALE_PATHS = (
  29. os.path.join(BASE_DIR, 'locale'), # 把翻译文件单独放到项目目录 locale 下
  30. )

生成翻译文件 .po

  1. python manage.py makemessages -l zh_Hans # 注意大小写,不是 zh_hans,这点很坑

编译生成 .mo

  1. python manage.py compilemessages

常见问题

CommandError: Can’t find msguniq

CommandError: Can’t find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.

GNU gettext 官网:http://www.gnu.org/software/gettext/
Windows 下载地址:https://mlocati.github.io/articles/gettext-iconv-windows.html
Ubuntu安装gettext:apt install gettext