Может ли тэг трансляции Django включать HTML-теги? Например, могу ли я сделать {% trans "Hold <em><strong>Ctrl</strong></em>" %}
? Или мне нужно было бы сделать {% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
?Может ли тэг-трансляция Django включать HTML-теги?
ответ
Можно ли включать теги HTML в теги шаблонов trans
?
Нет, мы не должны включать в себя HTML-теги внутри trans
тег шаблона, как вы делаете в своем 1-ом подходе {% trans "Hold <em><strong>Ctrl</strong></em>" %}
. Это неправильный подход
Из docs:
{% trans %}
шаблонный тег переводится как постоянная строка (заключена в одинарные или двойные кавычки) или содержимое переменной.Нельзя смешивать переменную шаблона внутри строки в пределах
{% trans %}
. Если для ваших переводов требуются строки с переменными (заполнители), используйте вместо этого{% blocktrans %}
.
<title>{% trans "This is the title." %}</title> # example 1
<title>{% trans "myvar" noop %}</title> # example 2
Solution-1: Использование trans
шаблонный тег
Вместо того, чтобы HTML-код внутри trans
тега, вы можете сделать что-то вроде ниже, чтобы получить желаемый результат (хотя это не рекомендуемый подход).
{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em> # using trans tag
Solution-2: Использование blocktrans
тега вместо
лучше вариант заключается в использовании blocktrans
тега шаблона вместо trans
тега, чтобы включить HTML-тег.
blocktrans
тег позволяет пометить сложные предложения, состоящие из литералов и содержимого переменной для перевода путем использования заполнителей:
Вы можете просто сделать:
{% blocktrans %}
Hold <em><strong>Ctrl</strong></em>
{% endblocktrans %}
Как сказал Рахул в своем ответе, не следует включать теги HTML внутри тега транс-шаблона. Однако, согласно Translating text blocks with Django .. what to do with the HTML? (который я только что нашел), можно поместить теги HTML внутри тегов шаблонов блоктрансов. Таким образом, мне не нужно делать {% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
. Я не смог найти такие инструкции в the Django 1.8 docs.
Да, мы не можем использовать теги HTML внутри тега шаблона 'trans', но мы можем использовать тег blocktrans. Решение с использованием шаблона 'trans' не является лучшим решением. Мы можем использовать тег шаблона blocktrans вместо нашего случая. Я обновил ан, пожалуйста, проверьте. –
Какая неприятность. – Daniel
Это не похоже на принцип DRY. – Daniel
В какой-то степени вы можете сказать. –