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

Traduce tu aplicación web desde cualquier país con la API del Traductor de Google

by
Read Time:12 minsLanguages:

Spanish (Español) translation by Andrea J (you can also view the original English article)

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

En mi tutorial Localization con I18n para la serie Construyendo tu Startup con PHP, creé un código en español de muestra cortando y pegando cadenas de texto en el Traductor de Google. Comencé a preguntarme si podría integrar la API del Traductor de Google con el script de extracción de recursos I18n de Yii Framework para automatizar la traducción para varios países. Publiqué una solicitud de función en el Foro de Yii y luego decidí ver si podía construir la función yo mismo.

En este tutorial, te guiaré a través de mis extensiones hasta el script de extracción Yii I18n que hace exactamente esto. Y demostraré traducir mi aplicación de inicio, Meeting Planner, a varios idiomas.

Ten en cuenta que el traductor de Google no es perfecto y no atiende los problemas relacionados con los formatos de fecha y hora y las monedas. Pero es una forma rápida y asequible (gratuita) de elaborar traducciones por defecto para tu aplicación web en más de 50 idiomas, por lo tanto es una solución ideal.

Sin embargo, por ejemplo, este es un error muy notorio que encontré en las pruebas; afortunadamente, no son tan comunes:

Si necesitas algo más profesional, un amigo me mostró un servicio de pago para administrar las traducciones dentro de las aplicaciones, Transifex. No lo he usado pero parece interesante.

Trabajando con el traductor de Google

¿Qué idiomas son compatibles?

El traductor de Google ofrece servicios de traducción para 64 idiomas, incluido el sueco, pero lamentablemente no el chef sueco:

Esta es una muestra de los idiomas que admite Google: encuentra la lista completa aquí:

Google Translate List of Languages SupportedGoogle Translate List of Languages SupportedGoogle Translate List of Languages Supported

Hablando con la API del traductor de Google 

Encontré dos bibliotecas de Composer para trabajar con la API del traductor de Google en PHP:

Encontré a Velijanashvili primero, así que es la que usé para este tutorial. Aprovecha el traductor de Google a través de su interfaz web gratuita RESTful para que no necesites una clave API. Sin embargo, descubrí que si tienes una gran biblioteca de recursos o planeas traducir muchos idiomas, es probable que quieras integrar Tillotson, ya que está completamente integrado con el servicio de pago del traductor de Google mediante claves.

En este tutorial, estoy desarrollando sobre la base del código de la serie Construyendo tu Startup con PHP. Para instalar la biblioteca del traductor de Google de Velijanashvili, simplemente digita:

Este es un código de muestra para traducir de inglés a español:

Debería dar este resultado:

hola mundo

Ampliación del script de extracción/mensaje I18n de Yii2

Cómo funciona el soporte I18n de Yii2 hoy

En este momento, es posible que quieras revisar mi tutorial sobre la biblioteca Localization con I18n donde explico cómo extraer las cadenas de mensajes necesarias para tus traducciones.

Puedes usar el generador de código Gii de Yii para generar modelos y el código CRUD que integra automáticamente el soporte I18n. Cada cadena en el código se reemplaza por una llamada a la función como esta, Yii::t('category','text string to translate');.

Yii te ofrece un comando de consola mensaje/extracto que encuentra todas estas llamadas de función en tu aplicación y crea un árbol de directorios de archivos por idioma y categoría para la traduccion de todas estas cadenas.

Este es un archivo de cadena de ejemplo para el idioma alemán:

Este es un ejemplo de las rutas de acceso del directorio:

Yii I18n Directory Structure For Message FilesYii I18n Directory Structure For Message FilesYii I18n Directory Structure For Message Files

Ampliación de mensajes/extractos para el traductor de Google 

Elegí el método de crear un script de reemplazo llamado message/google_extract que llamaría al traductor de Google siempre que fuera necesario traducir una cadena.

Evitar que el código roto traduzca tokens

Inmediatamente me encontré con algunos problemas dado que I18n integra tokens de parámetro en llaves para valores de variables. Por ejemplo, estas son algunas cadenas I18n que incluyen tokens y tokens anidados:

La API del traductor de Google no tiene un parámetro para ignorar tokens como estos en este formato. Pero no podemos traducirlos porque corresponden a nombres de variables y cadenas de formato en el código.

No me pareció que una expresión regular pudiera resolver esto cuando las cadenas y los tokens traducibles estuvieran juntos. Es probable que los lectores tengan una solución más eficiente que la que encontré para resolver este problema; si tienes una solución clara, por favor publícala en los comentarios.

Elegí escanear las cadenas por carácter y rastrear la anidación de llaves. Seré el primero en admitir que puede haber una mejor manera. Esta es mi función parse_safe_translate():

Convierte una cadena I18n en una matriz de elementos separados en elementos traducibles e intraducibles. Por ejemplo, este código:

Genera esta salida:

Cada vez que el proceso de extracción identifica una nueva cadena para traducir, divide la cadena en estas partes y llama a la API del traductor de Google para cualquier cadena que se pueda traducir, por ejemplo, una que no comience con una llave izquierda. Luego concatena esas traducciones con las cadenas con token en una sola cadena.

Traducir una cadena tokenizada con el traductor de Google

Esta es la función para una cadena y un idioma de destino getGoogleTranslation() . El idioma de origen está determinado por Yii::$app->language

Descubrí que la combinación de estos métodos funcionaba casi a la perfección en mis pruebas.

Personalización del comando mensaje/extracto de Yii

La implementación I18n de Yii admite la carga de cadenas de recursos desde archivos .PO, archivos .PHP (que uso) y la base de datos. En este tutorial, personalicé el comando Mensaje/Extracto para la generación de archivos PHP.

Copié y amplié el comando message/extract en /console/controllers/TranslateController.php. Debido a las estrictas reglas de PHP 5.6.x, cambié los nombres de las funciones de saveMessagesToPHP a saveMessagesToPHPEnhanced y saveMessagesCategoryToPHP a saveMessagesCategoryToPHPEnhanced.

Esta es la función saveMessagesToPHPEnhanced():

Llama a la función saveMessagesCategoryToPHP:

Desafortunadamente, el código original del comando Mensaje/Extracto no está comentado. Si bien puede haber algunas mejoras adicionales, solamente agregué una llamada a la API del traductor de Google aquí:

Y agregué un parámetro ($force=true) para forzar la recreación de los archivos de mensajes:

Traducción del planificador de mensajes

Me entusiasmó traducir Message Planner a más idiomas con la prueba completa. Primero, agregamos las nuevas traducciones de idiomas al archivo /console/config/i18n.php:

Si necesitas un soporte de idiomas más amplio o tienes una mayor cantidad de cadenas por traducir, es posible que te quieras cambiar al Cliente de traducción de Google de Travis Tillotson y al acceso de pago de la API.

Luego, agregué las cadenas de traducción /frontend/views/layouts/main.php y /frontend/views/site/index.php para demostrar la traducción de la página de inicio. Dado que estas páginas no son generadas por el generador de código Gii de Yii, las cadenas de texto se habían dejado en HTML simple. Este es un ejemplo de cómo se ven ahora:

Así es como se ve la página de inicio en inglés:

Meeting Planner English Home PageMeeting Planner English Home PageMeeting Planner English Home Page

Luego, ejecuté google_extract:

Nota: Asegúrate de que al hacerlo, el idioma de la aplicación esté configurado en el idioma predeterminado, por ejemplo, inglés. Esta configuración está en /common/config/main.php:

Descubrí que era necesario ejecutar la función google_extract una vez para crear la plantilla de archivo de mensaje inicial y una segunda vez para iniciar las llamadas al traductor de Google.

Luego puedo cambiar la configuración del idioma en la función /common/config/main.php para ver cada traducción. Los resultados son bastante increíbles para algo que se puede generar tan rápidamente.

Esta es la página de inicio en chino:

Meeting Planner Chinese Home PageMeeting Planner Chinese Home PageMeeting Planner Chinese Home Page

Así se ve la página de inicio en árabe:

Meeting Planner Arabic Home PageMeeting Planner Arabic Home PageMeeting Planner Arabic Home Page

Esta es la página de inicio en japonés:

Meeting Planner Japanese Home PageMeeting Planner Japanese Home PageMeeting Planner Japanese Home Page

Así se ve la página de inicio en yiddish:

Meeting Planner Yiddish Home PageMeeting Planner Yiddish Home PageMeeting Planner Yiddish Home Page

Esta es la página de inicio en alemán:

Meeting Planner German Home PageMeeting Planner German Home PageMeeting Planner German Home Page

¿Qué sigue?

Fue divertido escribir algo que tuvo un impacto tan amplio en el alcance potencial de mi aplicación Meeting Planner. Espero que hayas disfrutado este tutorial. Si quieres obtener más información sobre Meeting Planner, consulta los próximos tutoriales en nuestra serie Construyendo tu Startup con PHP. Vienen un montón de características divertidas.

No dudes en dejar tus preguntas y comentarios a continuación; generalmente participo en las discusiones. También puedes contactarme en Twitter como @reifman o enviarme un correo electrónico directamente.

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.