Мы используем 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()
, который возвращает те же значения.
Можно ли определить контекст "другой" в качестве значения по умолчанию, поэтому, если передан другой контекст (или его нет), и нетв переводе с заданным контекстом будет использоваться «другой»?
Кстати, кто-то задавал этот вопрос раньше?Есть какое-то решение, которое я не знаю?