Django, перевод имен полей в контексте исключений - PullRequest
0 голосов
/ 29 июня 2018

У меня есть модель с полем, которое называется phone. По русски это будет выглядеть так:

телефон

Иногда, когда я пытаюсь сделать запрос, приложение выдает мне такие сообщения об ошибках:

User with field phone already exists

Если я установлю LANGUAGE_CODE в настройках на ru-RU, тогда я добавлю Meta класс, который имеет правильное подробное имя, предыдущее исключение теперь выдаст такое сообщение:

Пользователь с таким телефон уже существует

Что не так.

В контексте этого сообщения поле phone должно называться телефоном. В конце есть лишние буквы.

В некоторых языках, например в русском, слова могут иметь разные окончания в зависимости от контекста предложения.

Я пытаюсь использовать gettext и сгенерированный po файл, в котором есть следующие строки кода:

#: .\main\models\users.py:77
msgid "phone"
msgstr ""

Однако я не знаю, как написать несколько вариантов перевода в этом коде.

Можно ли сделать разные случаи перевода имен полей? Можно ли переопределить найденную ошибку специально для этой модели?

================== UPDATE =========================

Я нашел стандартное сообщение Django, которое используется для этого сообщения об исключении:

#, python-format
msgid "%(model_name)s with this %(field_label)s already exists."
msgstr "%(model_name)s с таким %(field_label)s уже существует."

Возможно ли переопределить это сообщение специально для этого phone поля ??

1 Ответ

0 голосов
/ 09 августа 2018

Это недостаток в Django, о котором следует сообщить. Это нарушает золотое правило локализации программного обеспечения «никогда не объединяйте переводимые строки».

Исходное сообщение должно быть изменено на что-то вроде этого:

#, python-format
msgid "An object of type '%(model_name)s' with the field label '%(field_label)s' already exists."
msgstr ""

Вы не можете это исправить в своем приложении. И, кстати, этот недостаток затронет не только русский, но, вероятно, все языки с определенной статьей и полом.

...