如何在 django 的 PasswordChangeForm 中自定义和翻译错误消息?



更改密码错误消息仅以英文显示如何更改或翻译?

/表单/

class PasswordChangingForm(PasswordChangeForm):
old_password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'type':'password'}))
new_password1 = forms.CharField(max_length=100, widget=forms.PasswordInput(attrs={'class': 'form-control', 'type':'password'}))
new_password2 = forms.CharField(max_length=100, widget=forms.PasswordInput(attrs={'class': 'form-control', 'type':'password'}))
class Meta:
model = CustomUser
fields = ('old_password','new_password1', 'new_password2')

/views.py/

class PasswordChangeView(PasswordChangeView):    
form_class = PasswordChangingForm
success_message = 'Амжилттай'
success_url = reverse_lazy('settings_success')

/template/

<form method="POST">
{% csrf_token %}
{% include '../extends/_messages.html' %}
<div class="form-group row">
<label for="st_pass1" class="col-sm-4 col-form-label">Нууц үг</label>
<div class="col-sm-8">
{{ form.old_password }}
</div>
</div>
<div class="form-group row">
<label for="st_pass2" class="col-sm-4 col-form-label">Шинэ нууц үг</label>
<div class="col-sm-8">
{{ form.new_password1 }}
</div>
</div>
<div class="form-group row">
<label for="st_pass3" class="col-sm-4 col-form-label">Шинэ нууц үг
давтах</label>
<div class="col-sm-8">
{{ form.new_password2 }}
</div>
</div> 
{{ form.errors}}
<div class="text-center form-group pt-5" style="width: 100%;">
<button type="submit" class="btn btn-primary cs-btn">Хадгалах</button>
</div>
</form>

(我在Stackoverflow中的第一个问题。如果问题不清楚,请告诉我(

由于您编写了success_message = 'Everything is fine',它当然只能用英语显示。

制作可翻译文本的最简单方法可能是使用Django的翻译API[Django-doc]。您可以使用进行翻译

from django.utils.translation importgettext as _
class PasswordChangeView(PasswordChangeView):    
form_class = PasswordChangingForm
success_message =_('Everything is fine')
success_url = reverse_lazy('settings_success')

与形式中的标签相同:

class PasswordChangingForm(PasswordChangeForm):
# …
class Meta:
model = CustomUser
fields = ('old_password','new_password1', 'new_password2')
labels = {
'old_password': _('Old password'),
'new_password1': _('New password'),
'new_password2': _('Repeat new password'),
}

Django已经有了'Old password'[GitHub]的翻译。

对于其他的,您可以使用进行翻译

python3 manage.pymakemessages-lde

de更改为要进行翻译的iso代码。

这将构造.po文件,您可以在其中定义给定字符串的翻译。然后您可以使用:

python3 manage.pycompilemessages

以构建具有翻译的CCD_ 5文件。有关更多信息,请参阅文档的翻译部分。

我需要添加'_init_'以使标签在Django 4.1:上工作

from django.utils.translation import gettext, gettext_lazy as _
class PasswordChangingForm(PasswordChangeForm):
# …
class Meta:
model = User
fields = ['old_password', 'new_password1', 'new_password2']
labels = {
'old_password': _('Current password'),
'new_password1': _('New password'),
'new_password2': _('Repeat new password'),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for key in self.Meta.labels: 
self.fields[key].label = self.Meta.labels[key]

最新更新