¡Cómo Soporto Más de 100 Idiomas en Mi App de React...y Tú También Puedes!

Rate this content
Bookmark
SlidesGithub

¿Tu app de React sirve a una audiencia global, pero solo está disponible en inglés? Cambiemos eso. En esta charla, te mostraré cómo i18n puede convertirse en una parte automática de tu flujo de trabajo CI/CD, permitiendo a tu equipo, sin importar su tamaño, entregar tu app de React en más de 100 idiomas diferentes sin ningún esfuerzo adicional.

This talk has been presented at React Day Berlin 2024, check out the latest edition of this React Conference.

Richard Carrigan
Richard Carrigan
28 min
16 Dec, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Soy Richard Kerrigan, y estoy emocionado de estar aquí hoy para mostrarte cómo puedes agregar soporte multilingüe a tus apps de React. El problema que estamos tratando de resolver es que la mayoría de los sitios web, aplicaciones web, solo publican contenido en un idioma, lo cual no es conveniente para los usuarios y no es inclusivo para las personas para quienes ese idioma no es su idioma principal. Necesitamos una forma de soportar otros idiomas y dialectos en nuestros sitios web y aplicaciones web sin afectar negativamente la productividad de nuestro equipo. Ahora hay varias formas en que podríamos abordar la solución del problema, dependiendo de los recursos que tengamos disponibles. Pero para el propósito de esta charla, asumamos que no tenemos mucho presupuesto para dedicar a esta función, ni tenemos un equipo que pueda traducir contenido por nosotros. Este es un caso de uso fantástico para la IA y la automatización. Cuando mi equipo comenzó a abordar este problema, encontramos el servicio de traductor de Azure AI. Ofrece traducción de texto ad hoc y traducción de documentos, con características clave como soporte de idiomas, rentabilidad y precisión. También permite el uso de glosarios personalizados para ajustar el proceso de traducción. Sin embargo, hay algunas limitaciones, como la compatibilidad con ciertos tipos de archivos y la necesidad de validación de resultados y posibles ajustes. Ahora centrémonos en diseñar el flujo de trabajo para traducir contenido almacenado como JSON. Aquí tienes un ejemplo de cómo podrías lograr esto. Estamos tomando las piezas de datos que necesitan ser traducidas y enviando cada pieza a través del traductor. Luego, enviamos el contenido traducido como respuesta. Para contenido JSON, la traducción se puede hacer en tiempo de ejecución en un componente de servidor de React o una ruta de API. Para archivos HTML o Markdown, la traducción se puede incorporar en el flujo de trabajo CI-CD, involucrando Azure Blob Storage, Azure Function App y los archivos de código fuente de la app. En cambio, hemos movido el proceso de traducción a nuestro flujo de trabajo de GitHub Actions. Provisionamos los recursos necesarios en Azure, construimos y desplegamos la aplicación de función, y luego realizamos el proceso de traducción. Configuramos el endpoint de traducción, especificamos el glosario para ajustar las traducciones y ejecutamos la traducción. Una vez que la traducción está completa, creamos un nuevo blob en la ubicación de salida. Nuestro flujo de trabajo de GitHub asegura que todas las traducciones se realicen antes de proceder al siguiente paso, donde subimos y descargamos el artefacto para el despliegue. Esto asegura que todo el contenido esté traducido y evita errores por archivos faltantes. Al configurar el proceso de traducción, se sintió como magia. La canalización para traducir contenido Markdown es la misma que para contenido HTML. La diferencia radica en cómo se maneja la metadata. En HTML, la metadata se almacena en el head del archivo, mientras que en Markdown, está dentro de la sección de front matter. Al traducir archivos HTML, el head necesita ser traducido como parte del proceso. Para archivos Markdown, la metadata necesita ser traducida por separado debido a problemas con Azure AI Translator. La función de traducción analiza y traduce la metadata de los archivos originales, luego la combina con el contenido de los archivos traducidos. El flujo de trabajo de GitHub actions provisiona recursos de Azure, construye y despliega la aplicación de función, y ejecuta el proceso de traducción para ambos archivos HTML y Markdown. El proceso ahora está desplegando la plantilla ARM que incluye los recursos necesarios. Discutimos el problema del soporte limitado de idiomas en sitios web y aplicaciones web, los beneficios de Azure AI Translator y soluciones alternativas. También exploramos diferentes versiones de la app para traducir contenido JSON, HTML y markdown sin aprender un nuevo idioma. Si estás interesado, puedes encontrar más información y recursos en GitHub y Azure AI Translator. El flujo de trabajo ahora está desplegando y traduciendo los archivos markdown. Asegura que todos los archivos estén traducidos antes del despliegue. Una vez que la traducción está completa, los archivos se vuelven a colocar en el repositorio. El proceso de despliegue garantiza la presencia de todos los recursos necesarios. Después de una breve espera, la aplicación web está lista para ser vista. El blog contiene múltiples publicaciones. La metadata proporciona el título y el extracto de cada publicación. El markdown se analiza en HTML para su renderizado. El formato se preserva en diferentes idiomas. No dudes en conectarte conmigo en LinkedIn o X.

1. Introducción al Soporte Multilingüe en React

Short description:

Soy Richard Kerrigan, y estoy emocionado de estar aquí hoy para mostrarte cómo puedes agregar soporte multilingüe a tus aplicaciones de React. El problema que estamos tratando de resolver es que la mayoría de los sitios web, aplicaciones web, solo publican contenido en un idioma, lo cual no es conveniente para los usuarios y no es inclusivo para las personas para quienes ese idioma no es su idioma principal. Necesitamos una forma de soportar otros idiomas y dialectos en nuestros sitios web y aplicaciones web sin afectar negativamente la productividad de nuestro equipo.

Soy Richard Kerrigan, y estoy emocionado de estar aquí hoy para mostrarte cómo puedes agregar soporte multilingüe a tus aplicaciones de React. Antes de sumergirnos en el tema de hoy, permíteme hacer algunos anuncios rápidos. Problema número uno, aunque trabajo en Microsoft, de ninguna manera estoy afiliado al equipo de Azure AI, ni estoy buscando convencerte de adoptar Azure como tu proveedor de servicios en la nube. Como verás al final de esta charla, mi objetivo es demostrar una posible solución para traducir automáticamente el contenido de aplicaciones web de sitios web a otros idiomas y dialectos, pero absolutamente podrías construir algo similar usando AWS, GCP, u otro proveedor de servicios en la nube que ofrezca un servicio de traducción de documentos.

Punto número dos, ya existen bibliotecas, como React, IATN, que te permiten traducir contenido estático, como el encabezado de tu página de inicio, pie de página, etc., a otros idiomas usando las traducciones que proporcionas.

Las soluciones que te presentaré hoy son para traducir automáticamente el contenido dinámico, como publicaciones de blog creadas por los creadores de contenido de tu equipo o incluso por los usuarios finales. Muy bien, con esos anuncios fuera del camino, vamos a sumergirnos. Primero, establezcamos claramente el problema que estamos tratando de resolver. El problema que estamos tratando de resolver es que la mayoría de los sitios web, aplicaciones web, solo publican contenido en un idioma, lo cual no es conveniente para los usuarios y no es inclusivo para las personas para quienes ese idioma no es su idioma principal.

2. Diseñando el Flujo de Trabajo para la Traducción de Contenido

Short description:

Ahora hay varias formas en que podríamos abordar la solución del problema, dependiendo de los recursos que tengamos disponibles. Pero para el propósito de esta charla, supongamos que no tenemos mucho presupuesto para dedicar a esta función, ni tenemos un equipo que pueda traducir contenido para nosotros. Este es un caso de uso fantástico para la IA y la automatización. Cuando mi equipo comenzó a abordar este problema, encontramos el servicio de traductor de Azure AI. Ofrece traducción de texto ad hoc y traducción de documentos, con características clave como soporte de idiomas, rentabilidad y precisión. También permite el uso de glosarios personalizados para ajustar el proceso de traducción. Sin embargo, hay algunas limitaciones, como la compatibilidad con ciertos tipos de archivos y la necesidad de validación de resultados y posibles ajustes. Ahora centrémonos en diseñar el flujo de trabajo para traducir contenido almacenado como JSON.

Ahora hay varias formas en que podríamos abordar la solución del problema, dependiendo de los recursos que tengamos disponibles. Pero para el propósito de esta charla, supongamos que no tenemos mucho presupuesto para dedicar a esta función, ni tenemos un equipo que pueda traducir contenido para nosotros. Así que nuestra solución debe ser de bajo costo y requerir interacción humana solo para validar los resultados.

Este es un caso de uso fantástico para la IA y la automatización. Cuando mi equipo comenzó a abordar este problema, por razones obvias miramos primero a Azure. A través de esa investigación, encontré el servicio de traductor de Azure AI. Este servicio no solo permite la traducción de texto ad hoc, donde envías texto directamente a través del traductor y devuelve el texto traducido como JSON, sino que también ofrece traducción de documentos, que toma como entrada uno o más archivos de un contenedor de almacenamiento de blobs, los traduce y produce los archivos traducidos en un contenedor de almacenamiento de blobs diferente.

Además, el servicio de traductor de Azure AI tiene algunas características clave que finalmente nos convencieron de que era la opción adecuada para nuestras necesidades. La primera característica clave que fue importante para nosotros fue el soporte de idiomas. Mi equipo en Microsoft ejecuta un programa de mejora de habilidades y recapacitación que opera en todo el mundo. Por lo tanto, es importante para nosotros que cualquier solución multilingüe pueda acomodar cualquier idioma o dialecto que queramos soportar. Con más de 100 idiomas y dialectos diferentes soportados, incluso incluyendo Klingon, el traductor de Azure AI fue definitivamente la elección correcta para nosotros.

La siguiente característica clave para nosotros fue el costo. El traductor de Azure AI tiene un nivel gratuito generoso de hasta 2 millones de caracteres traducidos por mes. Así que dependiendo de la cantidad de contenido en tu sitio y con qué frecuencia traduces tu contenido, es posible que ni siquiera incurras en un costo. Otra característica importante es la precisión. El traductor de Azure AI utiliza lo que llaman Traducción Automática Neuronal o NMT, que en sus propias palabras es una mejora sobre los enfoques anteriores de traducción automática estadística, SMT, ya que utiliza muchas más dimensiones para representar tokens, como palabras, morfemas y puntuación del texto fuente y objetivo. Además, explican que usando el enfoque NMT, la traducción tomará en contexto la oración completa en lugar de solo unas pocas palabras en una ventana deslizante que utiliza SMT y producirá traducciones más fluidas y con apariencia de traducción humana. Para nosotros, esto significa traducciones más contextualmente precisas, lo que significa menos ajustes, si es que se necesitarían. Esto es lo que hace posible para nosotros integrar traducciones en nuestro flujo de trabajo CI CD.

La última característica clave para nosotros es la capacidad de usar glosarios personalizados para ajustar el proceso de traducción, lo cual es útil para omitir la traducción de terminología específica de la industria y/o texto relacionado con la marca, así como para asegurar que ciertas palabras o frases se traduzcan de una manera que retenga el significado original. No todo es color de rosa, así que también quería tomar un momento para señalar algunas de las limitaciones del traductor de Azure AI. Aunque el servicio puede manejar muchos tipos de archivos diferentes, actualmente no puede manejar MDX o JSX TSX, por lo que tu contenido necesitará ser almacenado por separado de estos archivos para ser traducido. Otra limitación es que todas las respuestas de traducción se devuelven como texto horizontal, de izquierda a derecha o de derecha a izquierda, por lo que es posible que necesites agregar lógica de renderizado si deseas mostrar contenido en un formato vertical para los idiomas aplicables. Finalmente, como con cualquier implementación de IA, aún querrás validar los resultados antes de desplegarlos en producción, y es posible que encuentres que se necesiten ajustes adicionales, lo que también requeriría un nuevo despliegue y revalidación.

Bien, suficiente charla sobre el traductor de Azure AI, vamos a entrar en cómo vamos a diseñar este flujo de trabajo. Dependiendo de cómo se almacene el contenido, hay esencialmente tres opciones para cómo traducirlo. Opción 1, tu contenido se almacena como JSON. Como puedes ver en este fragmento de JSON, tenemos un array de publicaciones, que son objetos que contienen los diversos datos que nuestro frontend necesitaría para renderizar cada publicación. Si tu contenido se almacena de esta manera, lo más probable es que desees traducir el contenido durante el tiempo de ejecución usando la API de Azure Translator, probablemente usando un componente de servidor de React o una API personalizada separada que almacenaría en caché el contenido traducido para reducir la frecuencia con la que se ejecuta el servicio de traducción, lo que en última instancia mantendrá tus costos bajos.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Cómo Localizar y Personalizar Contenido con Sanity.io y Next.js
React Advanced 2021React Advanced 2021
8 min
Cómo Localizar y Personalizar Contenido con Sanity.io y Next.js
Top Content
Sanity.io provides a content platform for structured content that replaces traditional CMS. Their solution allows businesses to structure and query content anywhere using the Sanity studio and open source React application. The talk focuses on solving the challenge of sending personalized data to users in a static website environment using Next.js Vercel for hosting and Sanity for content querying and delivery. The Sanity studio allows for modeling pages, articles, and banners, with banners being shown to visitors based on their country. The solution involves using Grok queries to fetch the right banner based on country information, demonstrating personalization based on localization and dynamic content querying.
End-to-end i18n
React Advanced 2021React Advanced 2021
26 min
End-to-end i18n
Thanks for joining my talk on end-to-end internationalization. I'll walk you through internationalizing a React app, covering translated strings, currency and date formatting, translator management, and injecting translated strings back into the app. The constants used throughout the app define localization settings and translations. The React Intel library is used for managing translations, and custom functions are created for consistent date and number formatting. The translation process involves extracting strings, using tools like PO Edit, and compiling the translated strings into JSON files for the React app.
Construyendo aplicaciones JS con internacionalización (i18n) en mente
JSNation 2022JSNation 2022
21 min
Construyendo aplicaciones JS con internacionalización (i18n) en mente
This Talk discusses building JavaScript apps with internationalization in mind, addressing issues such as handling different name formats, using Unicode for compatibility, character encoding bugs, localization and translation solutions, testing in different languages, accommodating translated text in layouts, cultural considerations, and the importance of enabling different languages for users. The speaker also mentions various open source tools for internationalization. The Talk concludes with a reminder to avoid assumptions and embrace diversity in the World Wide Web.
Codificación de emojis, Unicode e internacionalización
JSNation Live 2020JSNation Live 2020
34 min
Codificación de emojis, Unicode e internacionalización
This Talk explores the UTF-8 encoding and its relationship with emojis. It discusses the history of encoding, the birth of Unicode, and the importance of considering global usage when building software products. The Talk also covers JavaScript's encoding issues with Unicode and the use of the string.prototype.normalize method. It highlights the addition of emoji support in Unicode, the variation and proposal process for emojis, and the importance of transparency in emoji encoding. The Talk concludes with the significance of diverse emojis, the recommendation of UTF-8 for web development, and the need to understand encoding and decoding in app architecture.
Internacionalizando React
React Summit Remote Edition 2021React Summit Remote Edition 2021
29 min
Internacionalizando React
The Talk discusses the challenges of adding and maintaining new languages in a React application and suggests ways to make the process easier. It defines internationalization as the process of architecting an application for localization and explains that localization involves adapting the content and experience for a specific locale. The speaker recommends using libraries for internationalization and provides resources for learning more about the topic. The Talk also addresses edge cases and difficulties with multiple dialects or languages, translation processes, and right-to-left CSS libraries.
Localización para casos de uso del mundo real: Aprendizajes clave de la incorporación de marcas globales
React Summit 2022React Summit 2022
8 min
Localización para casos de uso del mundo real: Aprendizajes clave de la incorporación de marcas globales
I'm going to talk about localisation in the real world and how Sanity, a platform for structured content, focuses on content as data and flexible internationalization. Sanity allows for multiple languages in different markets, providing customization options for content visibility based on location. The platform offers a flexible approach to content creation and customization, allowing organizations to internationalize their content based on their specific needs. With Sanity's query language and the brand new version of Sanity Studio, developers have more flexibility than ever before.

Workshops on related topic

Localizando tu sitio web de Remix
React Summit 2023React Summit 2023
154 min
Localizando tu sitio web de Remix
WorkshopFree
Harshil Agrawal
Harshil Agrawal
El contenido localizado te ayuda a conectarte con tu audiencia en su idioma preferido. No solo te ayuda a hacer crecer tu negocio, sino que también ayuda a tu audiencia a comprender mejor tus ofertas. En este masterclass, obtendrás una introducción a la localización y aprenderás cómo implementar la localización en tu sitio web de Remix alimentado por Contentful.
Tabla de contenidos:- Introducción a la localización- Introducción a Contentful- Localización en Contentful- Introducción a Remix- Configuración de un nuevo proyecto de Remix- Renderización de contenido en el sitio web- Implementación de la localización en el sitio web de Remix- Recapitulación- Próximos pasos