Yii2 – Como desarrollar una aplicación multilenguaje

Hace ya tiempo hablamos de cómo desarrollar una aplicación multilenguaje para yii versión 1, y hoy os traemos los pasos para realizarlo con la versión yii2:

Básicamente hay que seguir los siguientes pasos:

1 – Abrir una línea de comandos (cmd) y acceder a la raíz de nuestro proyecto. Y una vez ahí incluir la siguiente orden. Esto generará un archivo dentro de la ruta config/ llamado i18n.php, que será el que contenga los valores globales de la internacionalización.

yii message/config @app/config/i18n.php

2 – Tendremos que modificar la línea languages indicando los idiomas que queramos:

'languages' => ['es_ES','en_US'],

3 – También será necesario modificar el sourcePath y el messagePath con los siguiente valores:

'sourcePath' => __DIR__. DIRECTORY_SEPARATOR .'..',
'messagePath' => __DIR__ . DIRECTORY_SEPARATOR .'..'. DIRECTORY_SEPARATOR . 'messages',

4 – Será necesario crear la carpeta messages en el directorio raíz de la aplicación.
5 – Incluir dentro del congif/web.php la siguientes líneas dentro de components (en caso de que no se haga sólo se podrán introducir traducciones en el fichero app)

'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@app/messages',
                'sourceLanguage' => 'en',
                'fileMap' => [
                    //'main' => 'main.php',
                ],
            ],
        ],
    ],

6 – Una vez tengamos eso, tendremos que generar los ficheros de dichos idiomas (o cuando queramos actualizarlos). Para ello es necesario ejecutar:

yii message/extract @app/config/i18n.php

Recomendación:
En config/i18n.php si queréis que el extract de todos los mensajes vaya más rápido podéis introducir un except de los vender.

Yii – Como desarrollar una aplicación multilenguaje

Hoy en día la internacionalización (I18N) está a la orden del día. Siempre que alguien pide una web, hay que hacerla en dos o más lenguajes, y aquí es en donde la magia de yii entra en juego puesto que es muy muy fácil el transformar la web multilenguaje y en obtener todos los literales. (Para el artículo de cómo desarrollar el multilenguaje en Yii2 acceder a este link)

Paso 1:
Absolutamente todos los literales que incluyas en la página tienen que ser del tipo Yii::t(‘admin’,’Email address’) . El primero de los parámetros indica el grupo de literales que quieres escoger (puedes tomar cualquier palabra, automáticamente después del paso 3 te creará un archivo con elNombre.php). El segundo de los parámetros es el nombre del literal, en caso de que no haya traducciones es lo que mostrará.

Paso 2:
En protected/messages/config.php se indica el lenguaje o lenguajes a traducir (ver el parámetro languages).
Por ejemplo, queremos tener en español, inglés y en portugués una aplicación, pues tendremos ‘languages’=>array(‘es_ES’,’en_US’,’pt_PT’,’eu_ES’),

Paso 3:
Se abre la consola, nos situamos en nuestro www y ejecutamos la orden “../framework/yiic message protected/messages/config.php” .
En caso de estar en windows, la orden será: “..\framework\yiic message protected/messages/config.php”

Paso 4:
Tomar los ficheros generados en las nuevas carpetas de messages (cada idioma tendrá una carpeta, los literales en español estarán en es_ES, los de portugués en pt_PT,…)

Nota: No es necesario tener todas las cadenas para comenzar la internacionalización, en caso de añadir más literales y pasar el proceso de nuevo te respeta las traducciones que tengas.