Ответ 1
Итак, кажется, что с Django 1.5 технически нет разницы. Внутренний шаблонный шаблон указывает переменную для перевода (путем установки ее атрибута translate
) в двух случаях:
- когда вы делаете
{% trans VAR %}
(см.TranslateNode
) или - если имя переменной начинается с
_(
и заканчивается на)
(см.Variable.__init__
).
Позже, когда переменная разрешена, Django обертывает ее ugettext
или pgettext
, если видит атрибут translate
.
Однако, как видно из исходного кода, существуют некоторые соображения гибкости в пользу тега {% trans %}
:
- вы можете сделать
{% trans "String" noop %}
, который поместит строку для перевода в .po файлы, но на самом деле не будет выводить вывод при рендеринге (нет внутреннего атрибутаtranslate
для переменной, nougettext
); - вы можете указать контекст сообщения * например
{% trans "May" context "verb" %}
; - вы можете поместить переведенное сообщение в переменную для последующего использования * например
{% trans "String" as translated_string %}
.
* По Django 1.4.
Пожалуйста, не стесняйтесь исправить меня или опубликовать лучший ответ, если я ничего не пропущу.