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

如何让Django自定义翻译在JavaScript中生效?已配置仍无效

问题排查与解决

以下是几个常见的原因和对应的修复步骤:

1. JavaScriptCatalog路由未指定自定义应用

默认情况下,JavaScriptCatalog视图只会收集Django核心模块的翻译,自定义应用的翻译不会自动纳入。你需要在路由配置里显式指定packages参数,把你的应用添加进去:

# urls.py
from django.views.i18n import JavaScriptCatalog

urlpatterns = [
    # 自定义JS翻译路由,替换为你的实际应用名
    path('ja/jsi18n/', JavaScriptCatalog.as_view(packages=['app1', 'app2']), name='javascript-catalog'),
    # 若要让admin的jsi18n包含自定义翻译,需重写默认路由
    path('admin/jsi18n/', JavaScriptCatalog.as_view(packages=['django.contrib.admin', 'app1']), name='admin:jsi18n'),
]

2. 缺失JS专用翻译文件的生成与编译

如果自定义翻译写在JS文件里,仅生成django.po是不够的,必须单独处理JS翻译:

  • 运行命令生成JS专用的djangojs.po:django-admin makemessages -l ja -d djangojs
  • 编译成djangojs.mo:django-admin compilemessages
    只有这样,JS中用django.gettext('需要翻译的文本')标记的内容才会被收集进JS目录。

另外,Python代码中要在JS里使用的翻译,必须用gettext()(或_())标记,确保这些文本被提取到django.po中,且msgstr字段有正确的日语翻译、没有# fuzzy注释。

3. 翻译文件路径或编译状态异常

  • 检查每个应用的locale/ja/LC_MESSAGES/目录下,是否同时存在django.mo和djangojs.mo(如果有JS翻译需求),缺失的话重新运行compilemessages。
  • 确认django.po和djangojs.po中的目标翻译条目已完成(msgstr不为空),未翻译的内容不会被加载。

4. 缓存导致旧内容未更新

Django和浏览器都会缓存翻译内容,可尝试:

  • 重启Django开发服务器
  • 清除浏览器缓存(快捷键Ctrl+Shift+R)
  • 若使用了Django缓存框架,运行python manage.py clearcache清空缓存

5. 语言代码不匹配

确保请求的语言代码是ja,和你的locale目录名称完全一致(大小写敏感,不能是JA或jp),否则系统无法匹配到对应的翻译文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:50:18