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

How do I customize and translate error messages in django's PasswordChangeForm?

Change password error message shows only in english how to change it or translate it?

/表格/

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')

/模板/

<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>

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

既然你写success_message = 'Everything is fine',它当然只会用英文显示。

制作可翻译文本的最简单方法可能是使用 Django's translation API [Django-doc]。您可以通过以下方式使其可翻译:

from django.utils.translation import <b>gettext as _</b>

class PasswordChangeView(PasswordChangeView):    
    form_class = PasswordChangingForm
    success_message = <b>_(</b>'Everything is fine'<b>)</b>
    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.py <b>makemessages</b> -l <i>de</i>

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

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

python3 manage.py <b>compilemessages</b>

用翻译构建 .mo 文件。有关详细信息,请参阅 translation section of the documentation.