2015-09-28 3 views

Répondre

5

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 %} 
+0

Quelle nuisance. – Daniel

+1

Cela ne semble pas correspondre au principe DRY. – Daniel

+0

Dans une certaine mesure, vous pouvez dire. –

1

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.

+0

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. –