El tutorial Jobeet

19.1. El usuario

La internacionalización no tiene ningún sentido sin los usuarios. Cuando un sitio web está disponible en varios idiomas o adaptado a varias regiones del mundo, el usuario es el responsable de seleccionar el idioma o región que más le guste.

Nota Durante el tutorial del día 13 ya hablamos en detalle sobre la clase sfUser de Symfony.

19.1.1. La cultura del usuario

Las características de i18n y l10n de Symfony se basan en la cultura del usuario. La cultura es la combinación del idioma y el país/región del usuario. La cultura de un usuario que por ejemplo habla francés es fr, mientras que la cultura de un usuario de Francia es fr_FR.

Si quieres gestionar la cultura del usuario, puedes utilizar los métodos setCulture() y getCulture() del objeto que representa al usuario:

// in an action
$this->getUser()->setCulture('fr_BE');
echo $this->getUser()->getCulture();

Nota El idioma siempre se representa con dos letras minúsculas correspondientes al estándar ISO 639-1 y el país se indica con dos letras mayúsculas que corresponden al estándar ISO 3166-1.

19.1.2. La cultura por defecto

La cultura de usuario por defecto se configura en el archivo settings.yml:

# apps/frontend/config/settings.yml
all:
  .settings:
    default_culture: it_IT

Nota Como la cultura se gestiona a través del objeto sfUser, su valor se guarda en la sesión del usuario. Por tanto, si modificas la cultura durante el desarrollo de la aplicación, tienes que borrar la cookie de la sesión para que el navegador tenga en cuenta los cambios.

Cuando un usuario inicia una sesión en el sitio web de Jobeet, podemos determinar la cultura que mejor se adapta al usuario en función del valor de la cabecera Accept-Language de HTTP.

El método getLanguages() del objeto de la petición devuelve un array con los idiomas que acepta el usuario ordenados por preferencia:

// in an action
$languages = $request->getLanguages();

Por otra parte, seguramente los sitios web que desarrollas no están disponibles en los 136 principales idiomas del mundo. En este caso, puedes utilizar el método getPreferredCulture(), que devuelve el mejor idioma comparando los idiomas preferidos por el usuario y los idiomas que soporta tu sitio web:

// in an action
$language = $request->getPreferredCulture(array('en', 'fr'));

En el código anterior, el idioma devuelto será o inglés o francés en función del idioma preferido por el usuario. Si ninguno de los idiomas indicados coincide con los idiomas preferidos por el usuario, se devuelve el primer idioma del array (en el ejemplo anterior, sería el inglés).