如何翻译Django默认密码验证器的提示信息?
如何翻译Django默认密码验证器的提示文本
当然可以搞定这个需求!针对Django默认密码验证器的提示文本翻译,这里有两种实用的方案,你可以根据自己的场景来选:
方案一:用Django国际化(i18n)框架(官方推荐)
这是最标准的多语言适配方式,适合需要支持多种语言的项目:
开启项目国际化
先确保你的settings.py里已经开启了国际化配置:USE_I18N = True # 指定翻译文件存放目录 LOCALE_PATHS = [ BASE_DIR / 'locale', ]提取内置验证器的翻译字符串
Django内置的验证器提示文本已经做好了国际化标记,你只需要用命令提取这些字符串。比如要生成中文翻译文件,运行:django-admin makemessages -l zh_Hans填写翻译内容
找到生成的locale/zh_Hans/LC_MESSAGES/django.po文件,搜索验证器对应的提示文本(比如Your password is too similar to your other personal information.),然后在对应的msgstr字段里填上你的翻译:msgid "Your password is too similar to your other personal information." msgstr "您的密码与个人信息过于相似,请更换密码。"把所有验证器的提示文本都翻译一遍即可。
编译翻译文件
翻译完成后,运行命令编译成Django能识别的格式:django-admin compilemessages设置默认语言
最后在settings.py里把默认语言改成中文:LANGUAGE_CODE = 'zh-hans'
方案二:自定义验证器类(灵活修改个别提示)
如果你只想修改某几个验证器的提示文本,不想搞全量翻译,这种方法更直接:
创建自定义验证器
在你的app下新建一个validators.py文件,继承默认的验证器并重写错误消息:from django.contrib.auth.password_validation import ( UserAttributeSimilarityValidator, MinimumLengthValidator, CommonPasswordValidator, NumericPasswordValidator ) from django.utils.translation import gettext_lazy as _ class CustomUserAttributeSimilarityValidator(UserAttributeSimilarityValidator): default_error_messages = { 'password_too_similar': _("您的密码与个人信息过于相似,请换一个。"), } class CustomMinimumLengthValidator(MinimumLengthValidator): default_error_messages = { 'password_too_short': _("密码长度不能少于 %(min_length)d 位。"), } class CustomCommonPasswordValidator(CommonPasswordValidator): default_error_messages = { 'password_too_common': _("这个密码太常见了,请换一个更安全的。"), } class CustomNumericPasswordValidator(NumericPasswordValidator): default_error_messages = { 'password_entirely_numeric': _("密码不能全是数字,请包含其他字符。"), }替换默认验证器
在settings.py的AUTH_PASSWORD_VALIDATORS里替换成你的自定义类:AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'yourapp.validators.CustomUserAttributeSimilarityValidator', }, { 'NAME': 'yourapp.validators.CustomMinimumLengthValidator', 'OPTIONS': { 'min_length': 6, } }, { 'NAME': 'yourapp.validators.CustomCommonPasswordValidator', }, { 'NAME': 'yourapp.validators.CustomNumericPasswordValidator', }, ]
两种方案各有优劣:第一种适合多语言项目,后续维护更方便;第二种更灵活,能快速修改个别提示。你可以根据自己的需求来选~
内容的提问来源于stack exchange,提问作者El Poisen
相关产品推荐
相关产品推荐

