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
È 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 %}
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.
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. –
Che fastidio. – Daniel
Questo non sembra concordare con il principio ASCIUTTO. – Daniel
In una certa misura puoi dire. –