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

Django 4.2执行makemessages遇孤立代理警告且djangojs.po未生成

解决Django 4.2中makemessages -d djangojs无法生成po文件及孤立代理警告问题

一、处理lone surrogate U+XXXX警告

xregexp.min.js文件中的孤立代理字符触发了扫描警告,可通过以下方式解决:

  • 排除该文件不被扫描:在项目根目录创建locale/exclude.patterns文件,写入规则:
    **/xregexp.min.js
    
    执行命令时指定排除规则:
    django-admin makemessages -d djangojs -l de --exclude=locale/exclude.patterns
    
  • 修复文件编码:用文本编辑器打开xregexp.min.js,将其重新保存为标准UTF-8编码,清除孤立代理字符。

二、排查djangojs.po文件无法生成的核心原因

即使消除警告后文件仍未生成,需从以下方向检查:

1. 确认JS代码包含可扫描的翻译标记

makemessages -d djangojs仅扫描带有gettext、django.gettext等规范翻译函数的JS代码,比如:

django.gettext("需要翻译的文本");

若没有符合规则的翻译字符串,工具不会生成po文件。

2. 检查命令执行路径与权限

  • 必须在**项目根目录(含manage.py的目录)**执行命令,若不在根目录需指定settings路径:
    django-admin makemessages -d djangojs -l de --settings=你的项目名.settings
    
  • 确保LOCALE_PATHS配置的目录存在且有读写权限,若不存在则创建:
    mkdir -p locale/de/LC_MESSAGES
    

3. 优化JavaScriptCatalog路由配置

你的urls.py中重复使用i18n_patterns,可合并为一个避免潜在冲突:

# urls.py 优化后配置
urlpatterns = [
    path('django-admin/', admin.site.urls),
    path('admin/', include('django.contrib.auth.urls')),
]

urlpatterns += i18n_patterns(
    path('', include('website.urls', namespace='website')),
    path("jsi18n/", JavaScriptCatalog.as_view(), name="javascript-catalog"),
)

if 'rosetta' in settings.INSTALLED_APPS:
    urlpatterns += [
        re_path(r'^rosetta/', include('rosetta.urls'))
    ]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4. 强制生成空po文件(用于测试)

若暂时没有可翻译字符串但需要生成文件,添加--force参数:

django-admin makemessages -d djangojs -l de --force

三、验证结果

执行命令后,检查locale/de/LC_MESSAGES/djangojs.po是否存在。生成成功后,可通过Rosetta编辑翻译,再执行django-admin compilemessages编译为mo文件,即可在JS中启用国际化翻译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:35:09