Перевод с контекстом в Django - makemessages не распознает наш контекст - PullRequest
0 голосов
/ 27 декабря 2018

Мы используем Django для Speedy Net и Speedy Match (в настоящее время Django 1.11.17, мы не можем перейти на более новую версию Django из-за одного из наших требований, django-modeltranslation).У меня проблема с переводом строк в контексте.Мы используем контекст главным образом для перевода строк по-разному в зависимости от пола пользователя, что по-разному переводится на такие языки, как иврит, хотя английские строки одинаковы.Например, у меня есть этот код:

raise ValidationError(pgettext_lazy(context=self.instance.get_gender(), message="You can't change your username."))

(вы можете увидеть его на https://github.com/speedy-net/speedy-net/blob/staging/speedy/core/accounts/forms.py)

Проблема в том, что manage.py makemessages не распознает контекст здесь. Временное решение:Обнаружено включение этого текста вручную в файлы, которые мы вообще не используем, такие как __translations.py или __translations.html (их можно увидеть на https://github.com/speedy-net/speedy-net/blob/staging/speedy/core/__translations/__translations.py и https://github.com/speedy-net/speedy-net/blob/staging/speedy/core/__translations/__translations.html соответственно), и таммы можем включить в контекст те же строки:

Либо:

pgettext_lazy(context="female", message="You can't change your username.")
pgettext_lazy(context="male", message="You can't change your username.")
pgettext_lazy(context="other", message="You can't change your username.")

Или:

{% trans "You can't change your username." context 'female' %}
{% trans "You can't change your username." context 'male' %}
{% trans "You can't change your username." context 'other' %}

Но это много работы, и у нас есть каждая строка 4раз в нашем коде (не включая переводы), и очень трудно поддерживать такой код. И, как я сказал, эти файлы вообще не используются, они только для ./make_all_messages.sh, чтобы работать должным образом. Поэтому мой вопрос - этоЕсть ли способ передать все возможные контексты в виде списка в manage.py makemessages? Например, добавить еще один аргумент в pgettext_lazy или добавить конкретный комментарий, который будет прочитан manage.py makemessages? Я проверил, и в настоящее время мы используем перевод с контекстом о100 раз в этом проекте, и было бы много работы для генаОцените весь этот код (100 * 3 раза) только для manage.py makemessages для работы.

Кстати, метод get_gender() всегда возвращает одну из следующих строк: "female", "male" или "other».Существует также другой метод, get_match_gender(), который возвращает те же значения.

Можно ли определить контекст "другой" в качестве значения по умолчанию, поэтому, если передан другой контекст (или его нет), и нетв переводе с заданным контекстом будет использоваться «другой»?

Кстати, кто-то задавал этот вопрос раньше?Есть какое-то решение, которое я не знаю?

...