Перевод шаблонов
Django предлагает теги {% trans %} и {% blocktrans %} для перевода строковых литералов в шаблонах. Для того чтобы использовать шаблонные теги перевода, необходимо в верхнюю часть шаблона добавить тег {% load i18n %}, который будет их загружать.
Шаблонный тег {% trans %}
Шаблонный тег {% trans %} позволяет помечать строковый литерал для перевода. На внутреннем уровне Django выполняет функцию gettext() с заданным текстом в качестве параметра.
Вот как строковый литерал помечается в шаблоне:
{% trans "Text to be translated" %}
Притом можно использовать ключевое слово as, чтобы сохранять переведенный контент в переменной, которую можно использовать в своем шаблоне.
В следующем ниже примере переведенный текст сохраняется в переменной с именем greeting:
{% trans "Hello!" as greeting %}
<h1>{{ greeting }}</h1>
Тег {% trans %} удобен для простых переводных строковых литералов, но он не способен обрабатывать переводной контент, содержащий переменные.
Шаблонный тег {% blocktrans %}
Шаблонный тег {% blocktrans %} позволяет помечать контент, содержащий строковые литералы и переменные, используя местозаполнители.
В следующем ниже примере показано, как использовать тег {% blocktrans %}, содержащий переменную name в контенте для перевода:
{% blocktrans %}Hello {{ name }}!{% endblocktrans %}
Притом можно использовать ключевое слово with, чтобы вставлять шаблонные выражения, такие как доступ к объектным атрибутам или применение шаблонных фильтров к переменным. Для них всегда следует использовать местозаполнители.
Вместе с тем ни к выражениям, ни к объектным атрибутам внутри блока blocktrans обратиться невозможно.
В следующем ниже примере показано, как использовать with для вставки объектного атрибута, к которому был применен фильтр capfirst:
{% blocktrans with name=user.name|capfirst %}
Hello {{ name }}!
{% endblocktrans %}