Ir al contenido

He estado investigando un poco sobre el la implementación de gettext en twig usando variables.

No se si habéis tenido la oportunidad de trabajar con twig.

The flexible, fast, and secure template engine for PHP

En cualquier caso, si habéis llegado hasta aquí supongo que es porque lo conocéis y os habréis encontrado en la tesitura de crear traducciones en este sistema de plantillas. A mi entender la documentación, sobre el tema que nos ocupa, no es demasiado extensa.

Gettext. es el sistema para gestionar traducciones usando archivos .mo y .po. Hace algún tiempo ya escribí sobre este tema relacionado con WordPress.

Recordemos que una cadena de traducción empleando el archivo .po consta de dos partes el msgid que corresponde a la cadena que introducimos en la plantilla y el msgstr que es la traducción que deseamos, el msgid no tiene porque tener un sentido literal, puede ser un identificador, aunque en según que casos es muy recomendable que sea la propia cadena de texto.

Veamos los casos con los que me he encontrado.

Traducción de palabras

Se puede dar el caso de tener que traducir una palabra, pongamos por caso el valor de un botón de envío, donde el archivo .po para la traducción en castellano sería:

msgid "send"
msgstr "Enviar"

En el archivo en francés … por ejemplo, sería:

msgid "send"
msgstr "Envoyer"

Y su llamada desde el archivo twig es {% trans "send" %}

<input type="submit" value="{% trans "send" %}" >

Traducción de frases con una variable

Cuando incluimos una variable debemos utilizar otro método, que consiste en indicar tanto en la cadena de texto a traducir, como en la traducción donde se ubica esa variable.

En este caso el archivo de traducción (.po) se mostraría así:

msgid "Hello %nombre%"
msgstr "Hola %nombre%"

Y el código correspondiente en php sería:

{% trans %}
    Hello {{ name }} 
{% endtrans %} 

De esta manera podemos mover la varialble en el archivo de traducción como nos convenga, por ejemplo:

msgid "Hello %nombre%"
msgstr "%nombre%, ¿Como estás?"

Suponiendo que la variable sea igual a Manolo lo que veríamos en el navegador en la versión en castellano sería:

Manolo, ¿Como estas?

Traducción de variables con expresiones o tags

En Twig puedes emplear variables con expresiones o tags, aqui las traducciones varían un poco de los modelos anteriores, lo primeto que debemos hacer es definir la variable antes de llamar a la traducción, asignando como valor de la variable el segundo valor de la expresión:

{% set nombre = nombreCompleto.nombre %}

{% trans %}
    Hello {{ nombre }}, how are you?
{% endtrans %}

Siendo la cadena de texto en el archivo .po la siguiente:

msgid "Hello %nombre%, how are you?"
msgstr "Hola %nombre%", ¿como estas?"

Un caso de uso no resuelto

Hay un caso de uso que aún no he podido resolver y es, cuando se lanzan diferentes mensajes con diferentes variables dentro de un mismo tag,<div class="errores"></div>.