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

Django生产环境compilemessages不生效,页面翻译未更新

Django生产环境修改PO文件后翻译不更新的解决方案

针对你遇到的问题——开发环境修改PO文件并编译后翻译正常更新,但Docker+Nginx+Gunicorn的生产环境中页面翻译未同步,以下是具体排查和解决步骤:

1. 确认Django翻译文件路径配置

检查项目settings.py中的LOCALE_PATHS是否指向容器内挂载的/locale/目录:

LOCALE_PATHS = [
    '/locale/',
]

确保Django读取的翻译文件与你修改的是同一位置,避免路径不匹配导致更新无效。

2. 重载Gunicorn进程

Django的翻译内容会在应用进程启动时加载到内存,修改PO文件并编译后,必须让Gunicorn重新加载进程才能读取新生成的.mo文件:

  • 在容器内执行平滑重载命令(不中断服务):
    pkill -HUP gunicorn
    
  • 也可以在Python代码中调用compilemessages后,添加执行该命令的逻辑(需确保应用用户有执行权限)。

3. 确保compilemessages执行正确

调用call_command("compilemessages")时,需指定目标语言并确认编译路径:

from django.core.management import call_command

# 编译指定语言的翻译文件
call_command("compilemessages", locale='zh_Hans', verbosity=1)

执行后检查/locale/<lang>/LC_MESSAGES/django.mo文件是否更新,且文件权限允许应用进程读取(通常设置为644即可)。

4. 排查Nginx缓存影响

如果Nginx对动态页面设置了缓存,可能会导致旧翻译内容被缓存:

  • 修改Nginx配置文件,禁用动态请求的缓存:
    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # 禁用缓存,确保实时获取后端内容
        proxy_no_cache 1;
        proxy_cache_bypass 1;
    }
    
  • 修改配置后重启Nginx容器:docker-compose restart nginx

5. 实现PO文件修改的永久保存

当前locale_volume为Docker匿名卷,修改内容仅保存在容器内。要同步到宿主机,修改docker-compose.prod.yml中的挂载配置:

services:
  web:
    volumes:
      - static_volume:/staticfiles/
      - ./app/locale:/locale/  # 替换原匿名卷为宿主机绑定挂载

这样修改后的PO文件会同步到宿主机./app/locale目录,容器销毁后数据不会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:24:53