Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Localization

Cómo programar con Yii2: localización con I18n

by
Read Time:15 minsLanguages:
This post is part of a series called How to Program With Yii2.
How to Program With Yii2: Integrating User Registration
How to Program With Yii2: User Access Controls

Spanish (Español) translation by Juan Pablo Diaz Cuartas (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Si preguntas, "¿Qué es Yii?" echa un vistazo a mi tutorial anterior: Introducción al framework Yii, que revisa los beneficios de Yii e incluye una descripción general de las novedades de Yii 2.0, publicado el 12 de octubre de 2014.

En esta serie de Programación con Yii2, guío a los lectores en el uso del Framework Yii2 recientemente actualizado para PHP. En la primera parte, configuramos Yii2 localmente, creamos una aplicación Hello World, configuramos un servidor remoto y usamos Github para implementar nuestro código. En la parte dos, aprendimos acerca de la implementación de su arquitectura Model View Controller de Yii y cómo crear páginas web y formularios que recopilan y validan datos. En la parte tres, usamos la base de datos de Yii y las capacidades de registro activo para automatizar la generación de código para una aplicación web básica. Y, en la cuarta parte, aprendimos cómo integrar el registro de usuarios.

En este tutorial, voy a mostrar cómo utilizar el soporte de internacionalización I18n integrado de Yii para que su aplicación esté lista para la traducción a varios idiomas.

Para estos ejemplos, seguiremos imaginando que estamos creando un framework para publicar actualizaciones de estado simples, p. nuestro propio mini-Twitter.

¿Qué es I18n?

Según Wikipedia, I18n es un numerónimo de Internacionalización:

18 representa el número de letras entre la primera i y la última n en internacionalización, un uso acuñado en DEC en la década de 1970 u 80.

Con I18n, todas las cadenas de texto mostradas al usuario desde la aplicación son reemplazadas por llamadas a funciones que pueden cargar dinámicamente cadenas traducidas para cualquier idioma que el usuario seleccione.

Los objetivos de la internacionalización

Al construir una aplicación web, es útil pensar globalmente desde el principio. ¿Tu aplicación debe funcionar en otros idiomas para usuarios de diferentes países?  Si es así, implementar I18n desde el principio te ahorrará mucho tiempo y dolores de cabeza más adelante. 

En nuestro caso, el framework Yii proporciona soporte integrado para I18n por lo que es relativamente fácil crear soporte para I18n a medida que avanza.

Cómo funciona I18n

I18n opera reemplazando todas las referencias al texto mostrado al usuario con llamadas a función que proporcionan traducción cuando sea necesario.

Por ejemplo, aquí está el aspecto de los nombres de los campos de atributo en el modelo de Estado antes de I18n:

Proporcionar versiones traducidas del código sería muy complicado. Los traductores no técnicos tendrían que traducir el código en su lugar, probablemente rompiendo la sintaxis.

Así es como se ve el mismo código con I18n:

Yii:t() es una llamada a función que verifica qué idioma está seleccionado actualmente y muestra la cadena traducida apropiada. El parámetro 'app' se refiere a una sección de nuestra aplicación. Las traducciones se pueden organizar opcionalmente según diversas categorías. Pero, ¿dónde aparecen estas cadenas traducidas?

El idioma predeterminado, en este caso inglés, está escrito en el código, como se muestra arriba. Los archivos de recursos del idioma son listas de matrices de cadenas cuya clave es el texto del idioma predeterminado, p. 'Mensaje' o 'Permisos', y cada archivo proporciona valores de texto traducidos para su idioma apropiado.

Aquí hay un ejemplo de nuestro archivo de traducción al español completo, el código de idioma "es". La función Yii:t() usa este archivo para encontrar la traducción adecuada para mostrar:

Si bien esto lleva mucho tiempo, Yii proporciona scripts para automatizar la generación y organización de estas plantillas de archivos.

Al separar el texto del código, hacemos que sea más fácil para los expertos multilingües no técnicos traducir nuestras aplicaciones para nosotros, sin romper el código.

I18n también ofrece funciones especializadas para traducir el tiempo, la moneda, los plurales y otros. No entraré en detalles de estos en este tutorial.

Configurando el Soporte I18n

Desafortunadamente, la documentación de Yii2 para I18n aún no es muy descriptiva, y fue difícil encontrar ejemplos paso a paso que funcionen. Afortunadamente para ti, voy a guiarte a través de lo que he aprendido al recorrer los documentos y la web. Encontré útil el ejemplo I18n de The Code Ninja y la guía definitiva Yii2 en I18n, y el colaborador de Yii, Alexander Makarov, también me ofreció algo de ayuda.

Generando el archivo de configuración I18n

Estamos utilizando la plantilla de aplicación básica Yii2 para nuestra aplicación de demostración. Esto coloca nuestra base de código debajo del directorio raíz /hello. Los archivos de configuración de Yii en /hello/config/* se cargan siempre que se realizan solicitudes de página. Utilizaremos los scripts de mensaje I18n de Yii para construir un archivo de configuración para I18n en la ruta common/config.

Desde nuestra raíz de código base, ejecutaremos el script Yii message/config:

Esto genera la siguiente plantilla de archivo que podemos personalizar:

Estoy personalizando el archivo de la siguiente manera. Muevo messagePath a la parte superior y personalizo sourcePath  y messagePath. También estoy especificando los idiomas que deseo que mi aplicación sea compatible además del inglés, en este caso español (es), alemán (de), italiano (it) y japonés (ja). Aquí hay una lista de todos los códigos de idioma I18n.

En el próximo paso, ejecutaremos el script de extracción de Yii que escaneará todo el código en el árbol sourcePath para generar archivos de cadena predeterminados para todas las etiquetas utilizadas en nuestro código. Estoy personalizando sourcePath para escanear todo el árbol de códigos. Estoy personalizando messagePath para generar los archivos resultantes en common/messages.

Verás que Yii escanea todos tus archivos de código:

Cuando se complete, verás algo como esto en tu código base:

Yii2 Localization with I18n Directory PathsYii2 Localization with I18n Directory PathsYii2 Localization with I18n Directory Paths

Activando I18n y seleccionando un idioma

En el archivo de configuración común, /hello/config/web.php, le diremos a Yii sobre nuestro nuevo soporte de idiomas. Haré que el español sea mi idioma predeterminado:

Pero todavía hay más por hacer. Tenemos que hacer que nuestro código I18n sea consciente.

Usando el generador de código Gii de Yii con I18n

En la tercera parte de esta serie, utilizamos la base de datos de Yii y las capacidades de registro activo para automatizar la generación de código. Pero no activamos I18n, por lo que todo nuestro código tenía cadenas de texto incrustadas. Vamos a rehacer esto.

Regresamos a Gii, probablemente http://localhost:8888/hello/gii en su navegador, y volvemos a ejecutar el modelo y los generadores de controladores con I18n activado.

Aquí hay un ejemplo de generación del código del modelo de reunión con I18n activado. Tenga en cuenta que especificamos "aplicación" para nuestra Categoría de mensaje. Estamos colocando todas nuestras cadenas de texto en un archivo de categoría de aplicación.

Yii2 Gii Code Generator Status Model for I18nYii2 Gii Code Generator Status Model for I18nYii2 Gii Code Generator Status Model for I18n

Hagamos lo mismo para la generación CRUD para controladores y vistas:

Yii2 Gii Code Generator for Status CRUD With I18nYii2 Gii Code Generator for Status CRUD With I18nYii2 Gii Code Generator for Status CRUD With I18n

Si explora el código generado en modelos, controladores y vistas, verá las cadenas de texto reemplazadas por la función Yii:t('app', ...):

Realización de vistas estáticas I18n Ready

Como generamos varias vistas en nuestra aplicación a mano o en HTML, tenemos que convertirlas manualmente para usar I18n. Por ejemplo, nuestra barra de navegación en /views/layouts/main.php y nuestra página de inicio en /views/site/index.php deben editarse a mano.

Aquí está la barra de navegación antes de I18n:

Aquí está la barra de navegación después de I18n:

Aquí hay un fragmento del contenido de la página de inicio de index.php después de I18n: gran parte del HTML ha sido reemplazado por llamadas PHP a Yii::t():

Traduciendo tus archivos de mensajes

Eche un vistazo a nuestro archivo de mensajes en español, /common/messages/es/frontend.php. Es una larga lista de valores de matriz vacíos:

Para los fines de completar nuestras traducciones en español para este tutorial, usaré Google Translate. Tricky, ¿eh?

Yii2 I18n Using Google Translator to Fill Message FilesYii2 I18n Using Google Translator to Fill Message FilesYii2 I18n Using Google Translator to Fill Message Files

Luego, haremos un corte y pegar con esas traducciones nuevamente en el archivo de mensajes.

Cuando visitamos la página de inicio de la aplicación, verás la versión en español. Bien, ¿eh?

Yii2 I18n Our App Home Page in SpanishYii2 I18n Our App Home Page in SpanishYii2 I18n Our App Home Page in Spanish

Aquí está el formulario Crear Estado:

Yii2 I18n Create a Status Update in Spanish FormYii2 I18n Create a Status Update in Spanish FormYii2 I18n Create a Status Update in Spanish Form

Si quiero volver al inglés, simplemente cambio el archivo de configuración, /config/web.php, a inglés:

También notará a medida que proceda que el reemplazo de cadenas en JavaScript tiene sus propias complejidades. No lo he explorado yo mismo, pero la extensión Yii 1.x JsTrans puede proporcionar una guía útil para apoyar esto.

Continuando con I18n

En última instancia, es posible que deseemos traducir nuestra aplicación a varios idiomas. He escrito un nuevo tutorial llamado Usar la API de Google Translate para localizar su aplicación I18n (Tuts +) que traduce automáticamente su aplicación a una variedad de idiomas. Si aún no se ha publicado, se publicará pronto (consulte la página de mi instructor). Por supuesto, esto solo proporciona traducciones de base. Es posible que desee contratar traductores profesionales para afinar los archivos posteriormente.

Algunas aplicaciones permiten a los usuarios seleccionar su idioma nativo para que cuando inicien sesión, la interfaz de usuario las traduzca automáticamente. En Yii, configurar la variable de $app->idioma hace esto:

Otras aplicaciones, como JScrambler.com a continuación, aprovechan la ruta de la URL para cambiar de idioma. El usuario simplemente hace clic en el prefijo de idioma que desea, p. "FR", y la aplicación se traduce automáticamente:

JScrambler Dynamic Language PathsJScrambler Dynamic Language PathsJScrambler Dynamic Language Paths

Nota: Lea mi introducción reciente a JScrambler para obtener más información: -es un servicio bastante útil.

El administrador de URL de Yii también puede proporcionar este tipo de funcionalidad. Probablemente implementaré estas características en un tutorial futuro en esta serie Yii2 cuando me centre en Ruteo.

¿Que sigue?

Espero que estés entusiasmado con el poder de I18n y los beneficios de usar el Marco Yii sobre PHP vano. Mire los próximos tutoriales en nuestra serie Programación con Yii2.

Si desea saber cuándo llegará el siguiente tutorial de Yii2, síganme @reifman en Twitter o consulte la página de mi instructor. La página de mi instructor incluirá todos los artículos de esta serie tan pronto como se publiquen. También puede enviarme un correo electrónico a mi sitio web de Lookahead Consulting.

enlaces relacionados

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.