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
