Symfony - Internacionalización

Internationalization (i18n) y Localization (l10n)ayudar a aumentar la cobertura de clientes de una aplicación web. Symfony proporciona un excelente componente de traducción para este propósito. Aprendamos a utilizar el componente de traducción en este capítulo.

Habilitar traducción

De forma predeterminada, el marco web Symfony deshabilita el componente de traducción. Para habilitarlo, agregue la sección del traductor en el archivo de configuración, app / config / config.yml.

framework: translator: { fallbacks: [en] }

Archivo de traducción

El componente de traducción traduce el texto utilizando el archivo de recursos de traducción. El archivo de recursos puede estar escrito en PHP, XML y YAML. La ubicación predeterminada del archivo de recursos esapp/Resources/translations. Necesita un archivo de recursos por idioma. Escribamos un archivo de recursos,messages.fr.yml para el idioma francés.

I love Symfony: J'aime Symfony 
I love %name%: J'aime %name%

El texto del lado izquierdo está en inglés y el texto del lado derecho está en francés. La segunda línea muestra el uso de un marcador de posición. La información del marcador de posición se puede agregar de forma dinámica mientras se utiliza la traducción.

Uso

De forma predeterminada, la configuración regional predeterminada del sistema del usuario será establecida por el marco web de Symfony. Si la configuración regional predeterminada no está configurada en la aplicación web, volverá al inglés. La configuración regional también se puede establecer en la URL de la página web.

http://www.somedomain.com/en/index 
http://www.somedomain.com/fr/index

Usemos la configuración regional basada en URL en nuestro ejemplo para comprender fácilmente el concepto de traducción. Crea una nueva función,translationSample con ruta /{_locale}/translation/sampleen DefaultController (src / AppBundle / Controller / DefaultController.php). {_locale} es una palabra clave especial en Symfony para especificar la configuración regional predeterminada.

/** 
   * @Route("/{_locale}/translation/sample", name="translation_sample") 
*/ 
public function translationSample() { 
   $translated = $this->get('translator')->trans('I love Symfony'); 
   return new Response($translated); 
}

Aquí, hemos utilizado el método de traducción, trans, que traduce el contenido a la configuración regional actual. En este caso, la configuración regional actual es la primera parte de la URL. Ahora, ejecute la aplicación y cargue la página,http://localhost:8000/en/translation/sample en el navegador.

El resultado será "Me encanta Symfony" en idioma inglés. Ahora carga la páginahttp://localhost:8000/fr/translation/sampleen el navegador. Ahora, el texto se traducirá al francés de la siguiente manera.

Del mismo modo, la plantilla de ramitas tiene {% trans %}bloque para habilitar la función de traducción en las vistas también. Para comprobarlo, agregue una nueva función,translationTwigSample y la vista correspondiente en app/Resources/views/translate/index.html.twig.

/** 
   * @Route("/{_locale}/translation/twigsample", name="translation_twig_sample") 
*/ 
public function translationTwigSample() { 
   return $this->render('translate/index.html.twig'); 
}

Ver

{% extends 'base.html.twig' %}  
{% block body %} 
   {% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %} 
{% endblock %}

Aquí, el bloque trans también especifica el marcador de posición. El resultado de la página es el siguiente.