2015-09-28 21 views
6

I tag di Django possono includere tag HTML? Per esempio posso fare {% trans "Hold <em><strong>Ctrl</strong></em>" %}? O dovrei invece fare {% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>"?I tag Can Django trans includono tag HTML?

risposta

5

È possibile includere tag HTML nei tag modello trans?

No, non dovremmo includere tag HTML all'interno di un tag trans modello come si sta facendo nel vostro primo approccio {% trans "Hold <em><strong>Ctrl</strong></em>" %}. Si tratta di un approccio sbagliato

Dal docs:

Il tag modello {% trans %} traduce una stringa costante (racchiuso tra virgolette singole o doppie) o contenuto variabile.

Non è possibile mescolare una variabile modello all'interno di una stringa entro {% trans %}. Se le traduzioni richiedono stringhe con variabili (segnaposto), utilizzare invece {% blocktrans %}.

<title>{% trans "This is the title." %}</title> # example 1 

<title>{% trans "myvar" noop %}</title> # example 2 

Solution-1: Utilizzando tag trans modello

Invece di mettere il codice HTML all'interno del tag trans, si può fare qualcosa di simile qui sotto per ottenere il risultato desiderato (anche se questo non è l'approccio raccomandato).

{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em> # using trans tag 

Solution-2: Uso blocktrans tag invece

opzione migliore è quella di utilizzare blocktrans tag template invece di trans tag per includere i tag HTML.

il tag blocktrans consente di contrassegnare frasi complesse costituite da letterali e contenuto variabile per la traduzione facendo uso di segnaposto:

È quindi possibile solo fare:

{% blocktrans %} 
Hold <em><strong>Ctrl</strong></em> 
{% endblocktrans %} 
+0

Che fastidio. – Daniel

+1

Questo non sembra concordare con il principio ASCIUTTO. – Daniel

+0

In una certa misura puoi dire. –

1

Come ha detto Rahul nella sua risposta, non si dovrebbero includere tag HTML all'interno di un tag modello trans. Tuttavia, in base a Translating text blocks with Django .. what to do with the HTML? (che ho appena trovato), è possibile inserire tag HTML all'interno di tag di modello blocktrans. Quindi non devo fare {% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>". Non sono riuscito a trovare tali istruzioni in the Django 1.8 docs.

+0

Sì, non possiamo usare tag HTML all'interno di un tag template 'trans', ma possiamo usare il tag' blocktrans'. La soluzione che utilizza il modello 'trans' non è la soluzione migliore. Possiamo usare il tag del modello 'blocktrans' per il nostro caso. Ho aggiornato gli ans, per favore controlla. –