Les tags trans de Django peuvent-ils inclure des balises HTML? Par exemple, puis-je faire {% trans "Hold <em><strong>Ctrl</strong></em>" %}
? Ou devrais-je faire {% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
à la place?Les tags trans de Django peuvent-ils inclure des balises HTML?
Répondre
Peut-on inclure des balises HTML à l'intérieur des trans
balises de modèle?
Non, nous ne devrions pas inclure des balises HTML dans une balise de modèle trans
que vous faites dans votre 1ère approche {% trans "Hold <em><strong>Ctrl</strong></em>" %}
. Ceci est une mauvaise approche
De l'docs:
La balise de modèle
{% trans %}
se traduit soit une constante chaîne (entre guillemets simples ou doubles) ou contenu variable.Il est impossible de mélanger une variable de modèle dans une chaîne dans
{% trans %}
. Si vos traductions nécessitent des chaînes avec des variables (placeholders), utilisez{% blocktrans %}
à la place.
<title>{% trans "This is the title." %}</title> # example 1
<title>{% trans "myvar" noop %}</title> # example 2
Solution-1: Utilisation de balise trans
modèle
Au lieu de mettre le code HTML dans la balise trans
, vous pouvez faire quelque chose comme ci-dessous pour obtenir le résultat souhaité (bien que ce n'est pas l'approche recommandée).
{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em> # using trans tag
Solution-2: Utilisation blocktrans
tag à la place
meilleure option est d'utiliser blocktrans
étiquette de modèle au lieu de trans
balise pour inclure les balises HTML.
la balise
blocktrans
vous permet de marquer des phrases complexes consistant en littéraux et contenu de la variable pour la traduction en utilisant espaces réservés:
Vous pouvez le faire:
{% blocktrans %}
Hold <em><strong>Ctrl</strong></em>
{% endblocktrans %}
Comme Rahul l'a dit dans sa réponse, il ne faut pas inclure de balises HTML dans un tag de modèle trans. Cependant, selon Translating text blocks with Django .. what to do with the HTML? (que je viens de trouver), on peut mettre des balises HTML à l'intérieur des balises de modèle blocktrans à la place. Donc je n'ai pas à faire {% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"
. J'ai été incapable de trouver de telles instructions dans the Django 1.8 docs.
Oui, nous ne pouvons pas utiliser les balises HTML dans un tag de modèle 'trans' mais nous pouvons utiliser la balise' blocktrans'. La solution utilisant le modèle 'trans' n'est pas la meilleure solution. Nous pouvons utiliser la balise de template 'blocktrans' à la place pour notre cas. J'ai mis à jour les années, s'il vous plaît vérifier. –
Quelle nuisance. – Daniel
Cela ne semble pas correspondre au principe DRY. – Daniel
Dans une certaine mesure, vous pouvez dire. –