Symfony 2.1, el libro oficial

Capítulo 15. Internacionalización

El término internacionalización (normalmente abreviado como i18n) se refiere al proceso de extraer las cadenas de texto y otros elementos que dependen de la configuración regional de tu aplicación a una capa donde se puedan traducir y convertir en función de la configuración regional del usuario (es decir, su idioma y país). En el caso de las cadenas de texto, esto significa reemplazar cada una por una función capaz de traducir el texto al idioma del usuario:

// el texto siempre se muestra en Inglés
echo 'Hello World';

// el texto se traduce al idioma del usuario
// si no está disponible, se muestra en Inglés
echo $translator->trans('Hello World');

Nota El término locale se refiere más o menos al idioma y país del usuario. Aunque su valor puede ser cualquier cadena de texto que le sirva a la aplicación para determinar el formato adecuado para ese idioma + país, se recomienda usar el formato estándar: código de idioma ISO639-1, seguido de un guión bajo (_) y por último, el código de país ISO3166 Alpha-2 (ejemplos: fr_FR para el francés de Francia, es_ES para el español de España, etc.).

En este capítulo, aprenderás cómo preparar una aplicación para que soporte varios idiomas y después, cómo traducir todos sus contenidos. A grandes rasgos, estos son los pasos necesarios:

  1. Habilitar y configurar el componente Translation de Symfony.
  2. Abstraer las cadenas de texto utilizando llamadas a una función del componente Translation.
  3. Traducir los contenidos a cada uno de los idiomas soportados.
  4. Detectar y gestionar la configuración regional del usuario a partir de su petición y opcionalmente, mediante su sesión.