I18n fue la Pieza que Faltaba: Permite que más del 70% de los Usuarios en el Mundo Accedan a tus Aplicaciones

Rate this content
Bookmark

La accesibilidad, una mejor DX y el rendimiento reciben mucha atención ya que mejoran significativamente la UX. Además, brinda satisfacción a los desarrolladores al ver las mejoras significativas. Pero, ¿qué hay de la internacionalización? Un dato curioso: más del 70% de los usuarios en el mundo acceden a contenido no inglés. En esta charla, te mostraré más datos sorprendentes sobre la internacionalización y cuáles son los enfoques escalables. Verás ejemplos con bibliotecas para frameworks con diferentes lógicas para implementar diferentes diseños de internacionalización.

13 min
05 Jun, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla de hoy explora el impacto de I18n y DEX para los desarrolladores, los desafíos de I18n y la importancia de comprender diferentes enfoques. Se discute cómo determinar idiomas y regiones utilizando la dirección IP, la configuración del navegador y los patrones de URL. La charla también cubre la carga de traducciones, el uso del i18xProvider y la solución de problemas como los parámetros de URL y el mantenimiento de archivos de traducción. Además, se explora la conexión con un Sistema de Gestión de Contenidos, la implementación de traducción a nivel de carpeta y la utilización de fragmentos de código para rutas dinámicas.

Available in English

1. Introducción a I18n y su impacto

Short description:

Hoy vamos a ver cómo I18n hace que las aplicaciones sean accesibles para más del 70% de los usuarios. Exploraremos el impacto de I18n y DEX para los desarrolladores, la lógica fundamental y cómo funciona con Remix. La internacionalización (I18n) tiene sus desafíos, incluyendo un costo de reaprendizaje y una falta de coincidencia entre el texto localizado y las claves de I18n. Sin embargo, los números hablan por sí mismos. Con 5.07 mil millones de usuarios de Internet y el inglés representando solo el 25.9%, comprender diferentes enfoques de I18n mejorará su DX actual.

Hola a todos. Gracias por ver mi charla. Mi nombre es Erys Erczeki. Soy un ingeniero de Deferral que trabaja en Storyblock. Hoy vamos a ver juntos cómo I18n tiene un impacto y hace que tus aplicaciones sean accesibles para más del 70% de los usuarios en el mundo.

Pasemos a la siguiente diapositiva. Y aquí están las tres conclusiones de mi charla. En primer lugar, vamos a ver el impacto de I18n y DEX para los desarrolladores. Y vamos a ver la lógica fundamental. Por último, vamos a ver cómo funciona con Remix.

Hay un par de notas. Esta charla es, en primer lugar, para los desarrolladores que implementan la internacionalización. En segundo lugar, Remix e I18n son temas de discusión en curso. Si estás interesado en unirte a las discusiones, aquí está el enlace. Y me aseguraré de compartir mis diapositivas en las redes sociales. Así que tendrás acceso a todas las fuentes que voy a compartir.

Así que la internacionalización. I18n es, en primer lugar, un acrónimo de internacionalización. Y veamos un poco de la experiencia del desarrollador con I18n. Así que aquí está mi amiga, Maya. Ella compartió conmigo su experiencia en Twitter diciendo que hay un costo de reaprendizaje de cómo usar la biblioteca de internacionalización cada vez. Y también hay otro problema, diría yo, que el texto localizado no coincide con las claves de I18n en las pruebas. Así que según su opinión, o no solo la suya, pero basado en eso, parece que no es la mejor DX. Así que basándonos en la DX actual de I18n que tienes, hablemos de los números y los hechos.

Así que empezando por el número total de usuarios en el mundo, en realidad hay 5.07 mil millones de usuarios que utilizan Internet. Y sorprendentemente, el inglés se utiliza solo en un 25.9% en Internet. Y Asia lidera con más de la mitad de los usuarios de Internet a nivel mundial. Así que todos los números son enormes, ¿verdad? Y no podemos simplemente ignorar estos números masivos. Y al conocer los diferentes enfoques con más opciones, en realidad se resolverá

2. Determinando Idiomas y Ejemplos de Framework

Short description:

Existen tres formas de determinar idiomas y regiones: dirección IP, configuración del navegador y patrones de URL. El ejemplo de Remix I18next utiliza un paquete npm, mientras que el enfoque del sistema de gestión de contenido combina diferentes sistemas. Los archivos de configuración de I18next definen los idiomas admitidos, el idioma de respaldo y los espacios de nombres. Los archivos de configuración del lado del cliente y del servidor aseguran que las traducciones se carguen antes de la hidratación.

tu actual I18nDX. Así que hablemos de la lógica fundamental. Hay tres formas de determinar los idiomas y las regiones. En primer lugar, está la forma de detectar la ubicación a partir de la dirección IP, que no vamos a cubrir en esta charla. Pero en segundo lugar, aquí está el ejemplo de respetar a los usuarios, ya sabes, como se configura en la configuración de su navegador, ya sabes, como qué idiomas elegir. Y por último, hay una forma de identificarlo en la URL. Y voy a mostrarte los tres patterns para identificar las URL. El patrón uno es diferenciar, ya sabes, por dominios, pero no seguirá la misma política de origen. El patrón dos es usar los parámetros de la URL, pero no parece amigable para el usuario, ¿verdad? Y el último patrón es subdirectorios localizados. Esto se ve mucho más limpio y amigable para el usuario. Así que pasemos a los ejemplos de framework , en general hay dos enfoques para elegir. El primer enfoque sería utilizar unnpm paquete que está relacionado con I18next. Y el otro enfoque es con una combinación del sistema de gestión de contenido. Esta charla trata sobre el Remix, así que voy a mostrarte el ejemplo de Remix I18next primero. Y pasemos a mostrarte el ejemplo del sistema de gestión de contenido . Remix I18next es un paquete npm para Remix que utiliza I18next. El primer paso sería crear los archivos de traducción. En este caso, tengo un idioma predeterminado en inglés que dice saludo hola y traducido, ya sabes, como el archivo de traducción saludo dice hola en japonés, y creemos el archivo de configuración de I18next. Entonces aquí, lo que estoy definiendo son los idiomas admitidos, el idioma de respaldo y el espacio de nombres predeterminado. Así que este espacio de nombres común es en realidad lo que le di los nombres a estos archivos de traducción. Pasando a, ya sabes, el otro archivo llamado I18nextserver.js. Entonces aquí, lo que estoy haciendo es importar lo que configuramos en el archivo de configuración de I18next, y ya sabes, del archivo anterior, lo que configuramos, los valores son en realidad matrices en las cadenas. Así que los iteramos desde el archivo de configuración de la diapositiva anterior. Y el resto lo configuramos la ruta del archivo de traducción. Así que lo siguiente es crear los archivos de configuración del lado del cliente y del lado del servidor. Por el tiempo que tengo, me voy a centrar en el lado del cliente, pero no te preocupes, el lado del servidor, ya sabes, los archivos de configuración se ven prácticamente iguales con algunas diferencias. Así que el archivo entry.client.jsx. Lo que quiero que prestes atención es a la línea de código resaltada en naranja, ya sabes, que es una API llamada i18xProvider. Así que con esto, al usar esta API, queremos asegurarnos de que las traducciones se carguen antes de que ocurra la hidratación. Y vamos a ver por qué juntos en una de las siguientes diapositivas. Y luego, ya sabes, envolvemos el componente del navegador de remix entre el componente i18xProvider. Así que también vamos a ver las razones en una de las siguientes diapositivas.

3. Carga de Traducción y i18xProvider

Short description:

La traducción debe cargarse antes de la hidratación para garantizar que la aplicación sea interactiva. Envolver el componente del navegador de Remix con i18xProvider utiliza el gancho de React use memo para evitar el renderizado innecesario. El directorio de la aplicación contiene API como la función de carga, uso de datos de carga, JSON y cambio de idioma. La API de traducción permite cambiar entre idiomas. Sin embargo, hay algunos problemas que abordar, como los parámetros de URL, mantener los archivos de traducción y traducir los slugs.

Entonces, la primera razón por la que la traducción debe cargarse antes de la hidratación. Imagina si la traducción no se carga antes de que ocurra la hidratación, la aplicación aún no es interactiva. Los usuarios no pueden ver, ya sabes, el valor localizado. Y el otro ejemplo, si la traducción ya se cargó antes de que ocurra la hidratación, la aplicación es interactiva. Los usuarios pueden ver el contenido localizado.

Pasando al segundo, por qué envolver el componente del navegador de Remix con i18xProvider. Investigué un poco en módulos. Y esto es lo que encontré, lo que encontré, donde, ya sabes, se define i18xProvider. En realidad utiliza un gancho de React llamado use memo. Y esto, esto captura el resultado del cálculo entre renderizados. Lo que quiero decir con eso es que si los valores de i18nConfiguration y el valor predeterminado del espacio de nombres son iguales, entonces no activamos el renderizado. Pero si los valores o uno de los valores cambia, entonces solo en ese momento activamos el renderizado. Así que usemos las configuraciones en acción. Pasando al directorio de la aplicación, ya sabes, abriendo este archivo root.jsx, quiero prestar atención a las tres API. La primera se llama función de carga. Esta función de carga es una API de backend que ya está proporcionada por el sitio de Remix. Y ya está, ya sabes, conectada con el uso de datos de carga. Entonces este uso de datos de carga obtiene el local de la función de carga. Y por último, lo que hacemos es llamar a una API llamada JSON. Así que en lugar de definir nuevas cabeceras de respuesta, blah, blah, blah, puedes hacer lo mismo con solo una línea de código. Y al final, hay una función llamada use change language. Esta función actualiza el idioma de la instancia de I18n al local actual de la función de carga y el local se actualiza y I18n carga los archivos de traducción correctos. Así que veamos cómo funciona en el navegador con la última configuración. Cualquier ruta de tus archivos en la aplicación de Remix, lo que estoy haciendo es importar una API llamada use translation y establecer el valor que definimos al principio de uno de los archivos de traducción que creamos. Así que puedes ver, ya sabes, ahora cambiar entre inglés y en este caso español, puedes ver el contenido que conoces cambia de un idioma a otro. Pero si te has dado cuenta de un par de cosas, tengo tres confesiones. En primer lugar, si prestaste atención a la URL, sí, uso los parámetros de URL que quería evitar. En segundo lugar, los desarrolladores necesitamos mantener los archivos de traducción y, por último, no tradujimos los slugs. Así que para limpiar todo lo que aún no hemos logrado, vamos a

4. Conexión con CMS y Traducción a Nivel de Carpeta

Short description:

En esta parte, conectamos la aplicación Remix con un Sistema de Gestión de Contenidos, específicamente utilizando el ejemplo de Storyblock. Exploramos el enfoque de traducción a nivel de carpeta, donde se utilizan diferentes carpetas para almacenar contenido localizado. Vemos cómo funciona este enfoque en el navegador y cómo implementar la lógica desde el nivel del código fuente. Además, discutimos el uso de code splats proporcionados por Remix para crear rutas dinámicas. En general, enfatizamos la importancia de la internacionalización (i18n) en la mejora del rendimiento, la interfaz de usuario (UI) y la experiencia de usuario (UX).

Echemos un vistazo a otro ejemplo con el Sistema de Gestión de Contenidos. El primer paso será conectar tu aplicación Remix con el Sistema de Gestión de Contenidos de tu elección. En esta charla, te mostraré el ejemplo con Storyblock, pero no te explicaré cómo puedes crear una conexión. En su lugar, te ofreceré echar un vistazo al tutorial de cinco minutos después de mi charla y podrás elegir qué enfoque prefieres entre los cuatro enfoques. En esta ocasión, cubriré uno de los enfoques llamado traducción a nivel de carpeta, y como puedes ver visualmente en la captura de pantalla, lo dividimos en diferentes carpetas para tener contenido localizado. Veamos cómo funcionará en el navegador antes de ver cómo podemos implementar la lógica desde el nivel del código fuente. Aquí tienes una pequeña aplicación de blog que he construido con Remix y Storyblock. Actualmente estamos en el idioma predeterminado de la página de inicio, por eso no ves ningún slug relacionado con el idioma. Cuando cambio a la versión japonesa de la misma entrada del blog, ahora en la URL podemos ver el slug en japonés que dice 'ja' delante del blog número 4, y el contenido se ha localizado. En el lado derecho, como puedes ver, los editores de contenido y los traductores ya pueden trabajar en su propio idioma. Cuando vuelvo a la página de resumen del blog que vimos antes en el idioma predeterminado, puedes ver la versión traducida al japonés con el slug traducido. Si vuelvo a la página de inicio en el idioma predeterminado, ahora puedo ver que el contenido ha vuelto al idioma predeterminado, que es el inglés. Pasemos a los fundamentos, pasemos a la lógica de cómo pude crear algunas de las opciones para que los editores de contenido y los traductores tengan más control y se encarguen de crear estas rutas dinámicas desde la interfaz de usuario del sistema de gestión de contenidos. Utilicé el enfoque de code splats proporcionado por Remix. En resumen, además de las tres API importantes que ya hemos cubierto antes (LoaderFunction, UseLoaderData, JSON), quiero llamar la atención sobre la línea de código resaltada en verde que utiliza el parámetro especial 'params' con corchetes cuadrados y el valor de cadena del asterisco. Si estableces este valor en console.log y te mueves entre diferentes páginas como la página de inicio o la entrada del blog, verás los slugs completos que se devuelven en tu terminal. Al utilizar los parámetros especiales que ya proporciona Remix y realizar algunas modificaciones en los slugs, ya tienes la lógica que acabas de ver en las grabaciones que te mostré. Aquí tienes un resumen breve de mi charla. Vimos juntos que más de la mitad de los usuarios en el mundo acceden a contenido localizado y, al conocer más enfoques para encontrar una mejor experiencia de desarrollo (DX) para tus casos, este es solo uno de los ejemplos que te mostré. Si investigas un poco más, lo cual te recomiendo encarecidamente, podrás encontrar los mejores enfoques que se adapten mejor a tus casos. Por último, quiero enfatizar que la internacionalización (i18n) está relacionada con el rendimiento, la interfaz de usuario (UI) y la experiencia de usuario (UX). Eso es todo acerca de mi charla. Muchas gracias y espero que la hayas disfrutado.

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

React Advanced Conference 2021React Advanced Conference 2021
8 min
How do Localise and Personalize Content with Sanity.io and Next.js
Structuring your content with Sanity.io means you can query content based on signals from your visitors, such as their location. Personalisation is a tricky problem with static sites and the jamstack, this demo will show you how it can be done with Sanity.io, Next.js, and Vercel.
React Advanced Conference 2021React Advanced Conference 2021
26 min
End-to-end i18n
There are some great libraries that help with i18n in React, but surprisingly little guidance on how to handle i18n end-to-end. This talk will discuss best practices and practical advice for handling translations in React. We will discuss how to extract strings from your code, how to manage translation files, how to think about long-term maintenance of your translations, and even avoiding common pitfalls where single-language developers tend to get stuck.
JSNation 2022JSNation 2022
21 min
Building JS Apps with Internationalization (i18n) in Mind
At Adobe we build products for the world, this talk with provide a high level overview of internationalization (i18n), globalization (g11n), and localization (l10n) best practices. Why these are important and how to implement in design, UX, and within any JS codebase - using vanilla JS examples, and top open source library recommendations.
React Summit Remote Edition 2021React Summit Remote Edition 2021
29 min
Internationalizing React
Learning 100 different languages is challenging, but architecting your React app to support 100 languages doesn't have to be. As your web application grows to a global audience, multilingual functionality becomes increasingly essential. So, how do you design your code such that it is flexible enough to include all of your international users? In this talk, we will explore what it means and what it looks like to build a React app that supports internationalization (i18n). You will learn several different strategies for locale-proofing your application with React contexts and custom hooks.
React Summit 2022React Summit 2022
8 min
Localization for Real-World Use-Cases: Key Learnings from Onboarding Global Brands
i18n isn't easy, but with careful planning of your content model I'll show you how to structure the setup, authoring, and querying of localized content. Covering whole-or-part translated documents, the difference between market and language-specific content, ways to author that in a CMS like Sanity, and ways to query for it on frontends like Next.js and Remix.
JSNation Live 2020JSNation Live 2020
34 min
Emoji Encoding, � Unicode, & Internationalization
Why does '👩🏿‍🎤'.length = 7? Is JavaScript UTF-8 or UTF-16? What happens under the hood when you set ? Have you ever wondered how emoji and complex scripting languages are encoded to work correctly across browsers and devices - for billions of people around the world? Or how new emoji are introduced and approved? Have you ever seen one of these: □ � “special” glyph characters before and want more information on why they might appear and how to avoid them in the future? Let’s talk about Unicode encoding in JavaScript and across the world wide web! We’ll go over best practices, common pitfalls, and provide resources to learn more - even where to go if you want to submit a new emoji proposal! :)

Workshops on related topic

React Summit 2023React Summit 2023
154 min
Localizing Your Remix Website
WorkshopFree
Localized content helps you connect with your audience in their preferred language. It not only helps you grow your business but helps your audience understand your offerings better. In this workshop, you will get an introduction to localization and will learn how to implement localization to your Contentful-powered Remix website.
Table of contents:- Introduction to Localization- Introduction to Contentful- Localization in Contentful- Introduction to Remix- Setting up a new Remix project- Rendering content on the website- Implementing Localization in Remix Website- Recap- Next Steps