Traducciones en Symfony

pexels-suzy-hazelwood-1098515(1).jpg
05
Nov 21

Para poder utilizar el sistema de traducciones de Symfony, empezamos por instalar el paquete mediante composer.

composer require symfony/translation

Uso básico del sistema de traducciones

Al instalar el paquete se crea el fichero config/packages/translation.yaml en el que se define el idioma por defecto y la carpeta donde se alojan los ficheros de traducciones.

El idioma que usa el sistema de traducciones usa el que se encuentra en el objeto Request.

El fichero de traducciones para cada idioma se llama messages.es.yaml

Dentro de este fichero podemos definir claves y valores en formato YAML, que contendrán los textos en cada uno de los idiiomas.

Así pues podremos definir un texto así

greeting: Hello World!

Para obtenerlo dentro del código

$translator->trans('greeting');

Para obtenerlo dentro de twig

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

Uso de variables en una traducción

Para utilizar variables en las traducciones Symfony utiliza el formato ICU.

El cual se puede usar así:

greeting: Hello {name}

$translator->trans('greeting', ['name' => 'Luis']);

{% trans with {'%name%': 'Luis'} %}greeting{% endtrans %}

Manejando el idioma del usuario

Podemos obtener el idioma del usuario mediante el objeto Request.

$request->getLocale();

Para modificar el idioma del usuario es importante crear un Event Listener que se ejecuta antes del traductor en el que modificamos el idioma en el objeto Request.

$request->setLocale($locale);

Referencias:

https://symfony.com/doc/current/translation.html

https://symfony.com/doc/current/translation/locale.html

https://symfony.com/doc/current/translation/message_format.html