Django i18n блоктранс против транса

В шаблонах Django, в чем именно разница между этими двумя:

{% blocktrans %}My Text{% endblocktrans %}

{% trans 'My Text' %}

person tzenderman    schedule 12.07.2013    source источник


Ответы (1)


Из Django Docs

Тег шаблона Trans

Тег шаблона {% trans %} переводит либо постоянную строку (заключенную в одинарные или >двойные кавычки), либо переменное содержимое:

С тегом Trans вы ограничены одной постоянной строкой или переменной. Таким образом, вам придется использовать

{# These Would Work! #}
title>{% trans "This is the title." %}</title>
<title>{% trans myvar %}</title>

Но не смог использовать

{%trans "This is my title {{ myvar }}" %}

Тег шаблона Blocktrans

В отличие от тега trans, тег blocktrans позволяет помечать для перевода сложные предложения, состоящие из литералов и переменного содержимого, с помощью заполнителей:

С Blocktrans такой код возможен:

    {% blocktrans with book_t=book|title author_t=author|title %}
       This is {{ book_t }} by {{ author_t }}
    {% endblocktrans %}

Таким образом, Blocktrans позволит вам быть немного более сложным и сквозным в своем выводе.

Но если ответить на ваш вопрос буквально: не так уж и много. За исключением стиля представления, оба будут отправлены переводчику в виде строки 'My Text'

person JcKelley    schedule 12.07.2013
comment
Идеально. Я думаю, что подвох для меня был в том, как переменные обрабатываются в тегах. Я не знал, что транс-тег не может смешивать переменные и строки. Спасибо! - person tzenderman; 12.07.2013
comment
есть ли недостатки в использовании blocktrans для обоих? - person dietbacon; 16.03.2016
comment
Неа. Это исключительно вопрос предпочтений. - person JcKelley; 16.03.2016