使用Django进行HTML5约束验证转换

时间:2017-02-07 14:18:05

标签: django html5 python-3.x validation

我有一些使用标准django.forms.ModelForm生成的表单。如果未填写必填字段,则会触发HTML5验证错误(即请填写此字段,或者请将此文本延长至200个字符或更多(您当前使用的是3个字符)。但是,验证文字未翻译,我在makemessages生成的翻译中没有看到。我怎样才能确保这些验证错误得到适当翻译?

谢谢,

1 个答案:

答案 0 :(得分:0)

您需要设置输入字段的属性,以便使用setCustomValidity(“您的翻译消息。”)值来使用无效属性。

我将在此处发布示例,用于通过ugettext_lazy为您的输入字段翻译字符串进行电子邮件验证。

首先在表单中定义电子邮件字段(与此类似):

contact_email = forms.CharField(widget=forms.EmailInput(
                                attrs={ 'class':'form-control',
                                        'placeholder':_('YOUR_EMAIL'),
                                        'max_length':30,
                                        'oninvalid':_('CUSTOM_VALIDITY'),
                                        'onchange':"setCustomValidity('')",}),
                                label=_('YOUR_EMAIL_LABEL_TAG'),
                                help_text=_('YOUR_EMAIL_TAG_HELP'),
                                required=True)

现在你需要翻译你的字符串,所有翻译都是直接的,除了CUSTOM_VALIDITY,它需要是带有翻译的jQuery。

转到.po文件并找到以下行: msgid "CUSTOM_VALIDITY" 并将msgstr设置为:

msgstr ""
"if(this.validity.typeMismatch){this.setCustomValidity('Please enter a valid email address!');}"
"else{this.setCustomValidity('Please fill out this field.');}"

将这两条消息翻译成您的语言:
请输入有效的电子邮件地址!
请填写此字段。'

不要忘记在最上面加上这一行:

from django.utils.translation import ugettext_lazy as _