Django Forms переводит стандартное сообщение об ошибке

Все мои переводы работают, кроме сообщений об ошибках, генерируемых формами.

Это начало моей формы:

class MyForm(forms.Form):
    first_name = forms.CharField(label=_("First name"), min_length=3, required=True)

Теперь метка "First name" прекрасно переводится в "Vorname", потому что я сделал .po файл и скомпилировал и т.д.

Однако при вводе только 2 символов ошибка возникает на английском, а не на (в данном случае) немецком языке, см. распечатку экрана ниже.

Я посмотрел в Github Django репозиторий django/conf/locale/de etc. но не смог найти там строку "Please lengthen etc.".

Итак, мой вопрос: как мне заставить перевести это сообщение об ошибке? Я предполагаю, что у Django есть стандартный метод и что эта строка уже находится в каком-то .po файле где-то в проекте Django?

enter image description here

Добавление атрибута oninvalid к виджету этого поля будет работать.

class MyForm(forms.Form):
    first_name = forms.CharField(label=_("First name"), min_length=3, required=True)

  def __init__(self,  *args, **kwargs):
      super(MyForm, self).__init__(*args, **kwargs)
      self.fields['first_name'].widget.attrs={
          'oninvalid':"this.setCustomValidity('{German stuff}')",
          'oninput':"this.setCustomValidity('')"
          }

Редактирование 1

Я также узнал, что необходимо добавить oninput, который затем очищает сообщение. Я ищу другие способы, потому что это решение всегда будет показывать одно и то же сообщение, независимо от ошибки проверки - пусто или меньше 3 символов = тот же msg

Редактирование 2

Для этого требуется дополнительный javascript, но его нужно сделать только один раз.
Может быть больше сообщений об ошибках, я тестировал это только на Select
. references = https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation#validating_forms_using_javascript

form.py
class MyForm(forms.Form):
    first_name = forms.CharField(label=_("First name"), min_length=3, required=True)

  def __init__(self,  *args, **kwargs):
      super(MyForm, self).__init__(*args, **kwargs)
      self.fields['first_name'].widget.attrs={
          'oninvalid':"germanValidationMsg(this)",
          'oninput':"this.setCustomValidity('')"
          }
germanvalidation.js
function germanValidationMsg(e){
    // dictionary of validations and their status
    console.log(e.validity)

    if (e.validity['badInput']){
        e.setCustomValidity('German badInput Msg');
    } else if (e.validity['patternMismatch']){
        e.setCustomValidity('German patternMismatch Msg');
    } else if (e.validity['rangeOverflow']){
        e.setCustomValidity('German rangeOverflow Msg');
    } else if (e.validity['rangeUnderflow']){
        e.setCustomValidity('German rangeUnderflow Msg');
    } else if (e.validity['stepMismatch']){
        e.setCustomValidity('German stepMismatch Msg');
    } else if (e.validity['tooLong']){
        e.setCustomValidity('German tooLong Msg');
    } else if (e.validity['tooShort']){
        e.setCustomValidity('German tooShort Msg');
    } else if (e.validity['typeMismatch']){
        e.setCustomValidity('German typeMismatch Msg');
    } else if (e.validity['valueMissing']){
        e.setCustomValidity('German valueMissing Msg');
    //} else if (e.validity['customError']){
    //    // customError always seems to be true?
    //    e.setCustomValidity('German customError Msg');
    } else if (e.validity['valid']){
        e.setCustomValidity('');
    };
};
Вернуться на верх