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

Django+Heroku:compilemessages可运行但自定义翻译文件不生效

解决Heroku上compilemessages仅处理Django内置翻译的问题

我之前也碰到过一模一样的坑!咱们一步步排查和解决:

1. 确认自定义翻译文件的路径结构

Django对翻译文件的路径有严格要求,必须是以下两种结构之一:

  • 项目级翻译:项目根目录/locale/<语言代码>/LC_MESSAGES/django.po
  • APP级翻译:你的APP目录/locale/<语言代码>/LC_MESSAGES/django.po

如果你的文件路径不符合这个规则,compilemessages会直接忽略它们。可以先通过命令确认文件是否存在于Heroku服务器上:

heroku run ls -la <你的locale文件夹路径>

比如项目级的话就跑heroku run ls -la locale,确保django.po确实被部署上去了(毕竟你没提交.mo文件,但.po文件肯定要在Git仓库里对吧?)

2. 检查Django配置是否正确

打开settings.py,确认以下几项:

  • 开启国际化:USE_I18N = True
  • 配置翻译文件的搜索路径(如果是项目级翻译必须加):
    import os
    from pathlib import Path
    
    BASE_DIR = Path(__file__).resolve().parent.parent
    LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]
    
  • 确保LANGUAGES包含了你要编译的语言,比如:
    LANGUAGES = [
        ('zh-hans', '简体中文'),
        ('en', 'English'),
    ]
    

3. 验证Heroku构建包配置

确保gettext构建包已经正确添加,并且顺序正确(要在Python构建包之前,这样先安装gettext依赖):

heroku buildpacks:add --index 1 https://github.com/piotras/heroku-buildpack-gettext.git

然后重新部署一次,确保gettext工具被正确安装。可以验证一下:

heroku run msgfmt --version

如果能输出版本号,说明工具没问题。

4. 精准运行compilemessages命令

如果你的翻译文件在特定路径或使用了自定义domain,可以指定参数让命令精准找到它们:

  • 指定语言:heroku run python manage.py compilemessages -l zh-hans
  • 指定路径:heroku run python manage.py compilemessages --path myapp/locale
  • 指定自定义domain(如果你的翻译文件不是django.po,而是比如myapp.po):heroku run python manage.py compilemessages -d myapp

最常见的坑

大部分情况下问题都是**LOCALE_PATHS没配置**,或者配置的路径和实际翻译文件的位置不匹配,导致Django找不到你的自定义.po文件。先检查这一项,大概率能解决问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:21:25