Las traducciones en las plantillas Django usan dos etiquetas de plantilla y una
sintaxis ligeramente diferente a la del código Python. Para que tus plantillas
puedan acceder a esas etiquetas coloca {% load i18n %}
al principio de tu
plantilla.
La etiqueta de plantilla {% trans %}
marca una cadena para su traducción:
<title>{% trans "This is the title." %}</title>
Si solo deseas marcar un valor para traducción pero para traducción posterior,
usa la opción noop
:
<title>{% trans "value" noop %}</title>
No es posible usar variables de plantilla en {% trans %}
— solo están
permitidas cadenas constantes, rodeadas de comillas simples o dobles. Si tu
traducción requiere variables (marcadores de posición) puedes usar por ejemplo
{% blocktrans %}
:
{% blocktrans %}This will have {{ value }} inside.{% endblocktrans %}
Para traducir una expresión de plantilla — por ejemplo, cuando usas filtros de plantillas — necesitas asociar la expresión a una variable local que será la que se usará dentro del bloque de traducción:
{% blocktrans with value|filter as myvar %}
This will have {{ myvar }} inside.
{% endblocktrans %}
Si necesitas asociar más de una expresión dentro de una etiqueta blocktrans
,
separa las partes con and
:
{% blocktrans with book|title as book_t and author|title as author_t %}
This is {{ book_t }} by {{ author_t }}
{% endblocktrans %}
Para pluralizar, especifica tanto la forma singular como la plural con la
etiqueta {% plural %}
la cual aparece dentro de {% blocktrans %}
y
{% endblocktrans %}
, por ejemplo:
{% blocktrans count list|length as counter %}
There is only one {{ name }} object.
{% plural %}
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}
Internamente, todas las traducciones en bloque y en línea usan las llamadas
apropiadas a gettext
/ngettext
.
Cuando usas RequestContext
(ver Capítulo 10), tus plantillas tienen
acceso a tres variables específicas relacionadas con la traducción:
{{ LANGUAGES }}
es una lista de tuplas en las cuales el primer elemento es el código de idioma y el segundo es el nombre y escrito usando el mismo).{{ LANGUAGE_CODE }}
es el idioma preferido del usuario actual, expresado como una cadena (por ejemploen-us
). (Consulta la sección "Cómo descubre Django la preferencia de idioma
_" para información adicional).{{ LANGUAGE_BIDI }}
es el sistema de escritura del idioma actual. Si el valor esTrue
, se trata de un idioma derecha-a-izquierda (por ejemplo hebreo, árabe). Si el valor esFalse
, se trata de de un idioma izquierda-a-derecha (por ejemplo inglés, francés, alemán).
Puedes también cargar los siguientes valores usando etiquetas de plantilla:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
También existen hooks de traducción que están disponibles en el interior
de cualquier etiqueta de bloque de plantilla que acepte cadenas constantes. En
dichos casos basta con que uses la sintaxis _()
para especificar una
cadena de traducción, por ejemplo:
{% some_special_tag _("Page not found") value|yesno:_("yes,no") %}
En este caso tanto la etiqueta como el filtro verán la cadena ya traducida (en otras palabras la cadena es traducida antes de ser pasada a las funciones de manejo de etiquetas), de manera que no necesitan estar preparadas para manejar traducción.