Django项目部署Ubuntu服务器后国际化功能失效求助
Django i18n 失效排查(Ubuntu + Gunicorn 部署场景)
结合你描述的情况——已经确认了 MIDDLEWARE、LANGUAGES、LOCALE_PATHS 等核心配置,且怀疑 Gunicorn 未加载 settings 修改,咱们一步步定位问题:
1. 先确认 Gunicorn 确实加载了最新的 Settings 并重启生效
这是最常见的“配置改了但没生效”原因:
- 检查 Gunicorn 启动命令是否指定了正确的 settings 模块,针对你的项目结构,启动命令应该类似:
gunicorn --bind 192.168.80.6:8000 intenseTBM_eTool.wsgi:application --settings=intenseTBM_eTool.settings - 必须重启 Gunicorn才能让 settings 修改生效:
- 如果用 systemd 管理 Gunicorn,执行
sudo systemctl restart gunicorn - 如果是后台进程,找到 PID 杀掉后重新启动(比如
ps aux | grep gunicorn找到进程,再kill -9 <PID>)
- 如果用 systemd 管理 Gunicorn,执行
- 可以给 settings 加个临时验证:在
LOCALE_PATHS下方加一行打印代码:
重启 Gunicorn 后查看日志,确认这条输出存在——如果没有,说明 Gunicorn 根本没加载你修改的 settings 文件。print("Loaded LOCALE_PATHS:", LOCALE_PATHS)
2. 检查 locale 文件是否完成编译
.po 翻译文件必须编译成 .mo 二进制文件,Django 才能识别:
- 进入 manage.py 所在目录(
/home/test/intensetbm_app/intensetbm-etool/),执行编译命令:django-admin compilemessages - 检查编译后的文件是否存在:
/home/test/intensetbm_app/intensetbm-etool/locale/fr/LC_MESSAGES/django.mo- 如果没有生成
.mo文件,查看编译时的报错信息(大概率是.po文件存在语法错误,比如未闭合的引号)。
- 如果没有生成
3. 确认服务器系统支持目标语言的 locale
Ubuntu 系统需要先安装并生成对应语言的 locale 包,否则 Django 无法调用系统翻译能力:
- 安装法语语言包:
sudo apt-get install language-pack-fr - 生成系统 locale:
sudo locale-gen fr_FR.UTF-8 - 重启 Gunicorn,让它读取新的系统 locale 配置。
4. 再次验证 i18n 相关细节配置
虽然你说配置齐全,但再核对几个容易忽略的点:
- 模板翻译标签:确保模板里用了正确的翻译语法,比如
{% trans "Text to translate" %}或{% blocktrans %}Multi-line text{% endblocktrans %},没加标签的文本不会被翻译。 - URL 国际化配置:在项目根 urls.py 里需要添加 i18n 前缀规则,否则切换语言的逻辑不会触发:
这样访问from django.conf.urls.i18n import i18n_patterns urlpatterns = [ # 不需要国际化的基础 URL(比如 admin) ] + i18n_patterns( # 你的应用路由,比如 path('', include('monitor.urls')), )/fr/开头的 URL 才会加载法语翻译。
5. 快速测试翻译逻辑是否正常
可以写个简单的视图直接验证翻译函数,排除模板层面的问题:
from django.utils.translation import gettext as _ from django.http import HttpResponse def test_translate(request): translated_text = _("English text") print(translated_text) # 看控制台输出是否为法语 return HttpResponse(translated_text)
添加对应 URL 后,切换语言访问这个视图,看返回内容是否正确翻译。
内容的提问来源于stack exchange,提问作者SLATER
相关产品推荐
相关产品推荐

