【问题标题】:HTML5 constraint validation translation with Django使用 Django 进行 HTML5 约束验证翻译
【发布时间】:2017-06-24 19:59:07
【问题描述】:

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

谢谢,

【问题讨论】:

  • HTML5 验证不是由 Django 提出的,也不会在您翻译的消息中找到。如果您的消息没有被翻译,请检查 HTML 是否包含语言声明。
  • 感谢@DanielRoseman 的建议。我已经通过<!DOCTYPE html><html lang ="es"> 在根元素上添加了语言声明,但我仍然看到英语验证错误。还有其他我应该声明的地方吗?
  • 啊,好吧,根据这个链接teamtreehouse.com/community/…,HTML5 验证取决于您的操作系统上设置的语言,而不是您的 HTML 文档中的语言声明。

标签: django html python-3.x validation


【解决方案1】:

您需要设置输入字段的属性以使用带有 setCustomValidity('Your translate message.') 值的 oninvalid 属性。

我将在此处发布示例,以通过 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 _

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2018-07-11
    • 2014-12-20
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多