如何正确配置Django翻译?执行makemessages遇导入错误
问题分析与解决
你遇到的报错根源是第三方包translations的代码未适配新版Django——该包的apps.py文件仍在导入已被Django 4.0+移除的ugettext_lazy,而你修改自己代码的操作无法解决第三方库的兼容性问题。
具体解决步骤
方案1:升级translations包
先检查该包是否有适配新版Django的版本,执行升级命令:
pip install --upgrade translations
升级后重新运行py manage.py makemessages --all,若问题解决则无需后续操作。
方案2:降级Django到兼容版本
如果translations包暂无适配版本,可将Django降级到3.2.x(长期支持版,仍保留ugettext系列函数的兼容):
pip install django==3.2.*
方案3:手动修改第三方包代码
若不想降级Django,可直接修改translations包的代码:
- 找到报错文件:
C:\Users\rodne\AppData\Local\Programs\Python\Python311\Lib\site-packages\translations\apps.py - 将第一行导入代码替换为:
from django.utils.translation import gettext_lazy as _ - 检查该包其他文件,若存在
ugettext、ugettext_noop等旧函数,全部替换为对应的gettext、gettext_noop。
Django翻译正确配置流程
解决报错后,按以下步骤配置翻译:
- 在
settings.py中添加基础配置:
# 支持的语言列表 LANGUAGES = [ ('zh-hans', '简体中文'), ('en', 'English'), ] # 翻译文件存放目录(需手动创建locale文件夹) LOCALE_PATHS = [ BASE_DIR / 'locale', ] # 默认语言 LANGUAGE_CODE = 'zh-hans' # 启用国际化中间件(需放在CommonMiddleware之后) MIDDLEWARE = [ # ... 其他中间件 'django.middleware.locale.LocaleMiddleware', ]- 在
- 在代码中使用翻译:
- Python代码:导入
gettext_lazy后标记待翻译文本from django.utils.translation import gettext_lazy as _ label = _("提交") - 模板文件:使用
trans模板标签{% trans "欢迎访问" %}
- 生成翻译文件:
执行后会在py manage.py makemessages --alllocale目录下生成对应语言的.po文件。- 编辑
.po文件,填写对应翻译内容
- 编辑
- 编译翻译文件:
编译后会生成py manage.py compilemessages.mo二进制文件,Django运行时会加载该文件实现翻译。
内容的提问来源于stack exchange,提问作者Rodney Shen
相关产品推荐
相关产品推荐

