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

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>)
  • 可以给 settings 加个临时验证:在 LOCALE_PATHS 下方加一行打印代码:
    print("Loaded LOCALE_PATHS:", LOCALE_PATHS)
    
    重启 Gunicorn 后查看日志,确认这条输出存在——如果没有,说明 Gunicorn 根本没加载你修改的 settings 文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:18:11