Django表单自定义验证器文本未翻译,内置验证器翻译正常是什么原因?
Django自定义验证器翻译失效问题排查方案
你遇到的问题属于Django翻译流程常见异常,可按以下步骤逐一排查:
- 确认翻译字符串已被扫描到
Django的makemessages命令默认仅扫描INSTALLED_APPS中已注册应用下的代码,如果你存放too_much_compounds_validator的文件所属应用未注册,或者存放在非应用目录下,命令无法识别_("translate this")为待翻译字符串。
重新执行扫描命令,过滤虚拟环境目录避免冗余扫描:python manage.py makemessages -l nl --ignore=venv - 确认翻译条目存在且已填写
扫描完成后打开locale/nl/LC_MESSAGES/django.po文件,搜索msgid "translate this"条目:- 如无该条目:回到上一步确认代码所在位置是否能被扫描到
- 如有该条目:确认对应
msgstr字段已经填写了荷兰语翻译内容
- 确认翻译文件已编译
填写完翻译内容后,必须执行编译命令生成二进制.mo文件Django才能读取:python manage.py compilemessages -l nl - 确认翻译路径配置正确
检查settings.py中LOCALE_PATHS配置是否指向你存放翻译文件的目录,该路径优先级高于应用内的locale目录,示例配置:LOCALE_PATHS = [ BASE_DIR / "locale", ] - 可选:替换为惰性翻译
如果排查完以上步骤仍不生效,可将导入的gettext替换为惰性翻译版本,避免模块加载阶段翻译提前执行无法匹配当前请求语言:
替换后重新执行扫描、编译流程即可。from django.utils.translation import gettext_lazy as _
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

