Сегодня столкнулся с необходимостью вывода строк с учётом от чьего лица идёт речь: женского или мужского. На stackoverflow.com нашёл неплохое решение:
{% if profile.male %}
{% blocktrans with profile.name as male %}Welcome, {{ male }}{% endblocktrans %}
{% else %}
{% blocktrans with profile.name as female %}Welcome, {{ female }}{% endblocktrans %}
{% endif %}
Сначала может быть не понятно, зачем так делать. Если принять во внимание языки, выходящие за пределы английского и русского, то вы можете узнать, что в том же португальском есть разница в приветствии мужчины или женщины.
Вся хитрость здесь в подстановке имени с помощью переменных {{ male }}
и {{ female }}
, которые сразу показывают переводчику контекст фразы.
Мой же случай немного отличался от найденного. Мне требовалось вывести строку "Я потратил(а) N часов на задачу M".
Тут требуется немного другой подход:
{% with MALE='M' FEMALE='F' %}
{% if sex == FEMALE %}
{% blocktrans context "female" %}
I have spent {{ duration }} hours on "{{ task }}" @ "{{ contract }}".
{% endblocktrans %}
{% else %}
{% blocktrans context "male" %}
I have spent {{ duration }} hours on "{{ task }}" @ "{{ contract }}".
{% endblocktrans %}
{% endif %}
{% endwith %}
Я передаю контекст фразы через аргумент context
тега {% blocktrans %}
, что также позволяет переводчику ориентироваться в ситуации.