You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确配置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包的代码:

  1. 找到报错文件:C:\Users\rodne\AppData\Local\Programs\Python\Python311\Lib\site-packages\translations\apps.py
  2. 将第一行导入代码替换为:
    from django.utils.translation import gettext_lazy as _
    
  3. 检查该包其他文件,若存在ugettext、ugettext_noop等旧函数,全部替换为对应的gettext、gettext_noop。
Django翻译正确配置流程

解决报错后,按以下步骤配置翻译:

    1. 在settings.py中添加基础配置:
    # 支持的语言列表
    LANGUAGES = [
        ('zh-hans', '简体中文'),
        ('en', 'English'),
    ]
    # 翻译文件存放目录(需手动创建locale文件夹)
    LOCALE_PATHS = [
        BASE_DIR / 'locale',
    ]
    # 默认语言
    LANGUAGE_CODE = 'zh-hans'
    # 启用国际化中间件(需放在CommonMiddleware之后)
    MIDDLEWARE = [
        # ... 其他中间件
        'django.middleware.locale.LocaleMiddleware',
    ]
    
    1. 在代码中使用翻译:
    • Python代码:导入gettext_lazy后标记待翻译文本
      from django.utils.translation import gettext_lazy as _
      label = _("提交")
      
    • 模板文件:使用trans模板标签
      {% trans "欢迎访问" %}
      
    1. 生成翻译文件:
    py manage.py makemessages --all
    
    执行后会在locale目录下生成对应语言的.po文件。
    1. 编辑.po文件,填写对应翻译内容
    1. 编译翻译文件:
    py manage.py compilemessages
    
    编译后会生成.mo二进制文件,Django运行时会加载该文件实现翻译。

内容的提问来源于stack exchange,提问作者Rodney Shen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:57:13