2017-02-07 61 views
1

我使用標準django.forms.ModelForm生成了一些表單。如果未填寫必填字段,則會觸發HTML5驗證錯誤(即,請填寫此字段或請將此文本加長至200個字符或更多(您當前使用3個字符)。但驗證文本爲沒有翻譯,我沒有看到它在我的翻譯我已經makemessages生成的。我怎麼能確保這些驗證錯誤得到適當的翻譯?用Django進行HTML5約束驗證翻譯

感謝,

+0

HTML5驗證不通過Django的提高,也不會在你翻譯的消息被發現。如果您的郵件沒有被翻譯,請檢查HTML是否包含語言聲明。 –

+0

感謝您的建議,@DanielRoseman。我通過'<!DOCTYPE html>'在根元素上添加了一個語言聲明,但我仍然看到英文驗證錯誤。還有另一個地方我應該宣佈它嗎? – orange1

+0

好的,所以它看起來像根據這個鏈接https://teamtreehouse.com/community/how-to-set-up-the-language-of-a-form-html5HTML5驗證取決於設置的語言您的操作系統,而不是HTML文檔中的語言聲明。 – orange1

回答

0

你需要設置輸入屬性字段使用setCustomValidity('Your translation 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 _