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
相关产品推荐
相关产品推荐

