Internacionalización de Frontend Que Se Lee Como Inglés (Gracias, gettext!)

Bookmark
Rate this content

¿Y si escribir código internacionalizado pudiera sentirse tan natural como escribir en inglés simple?

En esta charla, exploraremos cómo gettext, un estándar de localización probado en el tiempo y familiar para muchos desarrolladores de back-end y de escritorio, puede ofrecer un enfoque más intuitivo y simplificado para la i18n en el frontend. Veremos cómo los principios de gettext se pueden aplicar a proyectos modernos de JavaScript para simplificar los flujos de trabajo de traducción, reducir el código repetitivo y hacer que tu base de código sea más amigable para los humanos.

This talk has been presented at React Summit US 2025, check out the latest edition of this React Conference.

Henry Lie
Henry Lie
19 min
21 Nov, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Henry Lee presenta un enfoque de internacionalización frontend usando React y discute los desafíos en la nomenclatura de claves para traducciones. La charla aborda problemas con la nomenclatura de claves en diccionarios JSON, la refactorización de claves para eliminar desafíos de traducción usando GNU GetTex, explorando el flujo de trabajo de GetTex para una localización eficiente con Lingui, definiendo mensajes y extracción con el flujo de trabajo de Lingui, optimizando la compilación y traducción de Lingui, mejorando las características de Lingui para la traducción, y fomentando la adopción de Lingui para proyectos al abordar razones de subutilización y promover la prueba y migración.

1. Frontend I18N Methodology

Short description:

Hola a todos. Henry Lee comparte un enfoque de internacionalización frontend usando React. Desafíos en nombrar claves para traducciones.

Hola a todos. Espero que estén disfrutando del React Summit US. Hoy, voy a compartir sobre una metodología de internacionalización frontend que he estado usando en mi proyecto que me gusta mucho y me gustaría compartir más con todos. Se lee como inglés. Puedes decir por el título, probablemente se trata de gettext, pero déjame entrar en más detalles. Primero que nada, un poco sobre mí. Mi nombre es Henry Lee. Actualmente soy líder técnico en Henge. Un dato curioso sobre mí, me gustan los teclados, los teclados ergonómicos. Realmente me gusta construir mi propio teclado. Y también, uso NeoVim. Y un poco sobre mi empresa, mi empresa es Henge. Estamos construyendo soluciones de seguridad en la nube B2B en Japón. Y si estás interesado en trabajos de ingeniería de software en Japón, revisa este enlace.

Con eso fuera del camino, comencemos con el estado de I18N frontend. Entonces, si estás construyendo un proyecto de React y quieres agregar internacionalización, esa es una palabra bastante larga. Esto es lo que normalmente harías. Instalas una biblioteca basada en JSON, React I18N, React Intel. Preparas traducciones como archivo de diccionario JSON, y luego cargas esas traducciones en tiempo de ejecución y reemplazas la clave en tu código con el valor que está en el diccionario. Este es cómo se ve el archivo de diccionario para un proyecto con inglés y japonés. Creas tu propio nombre de clave, como welcome, description. Y tienes la versión en inglés y la versión en japonés aquí. Así que se ve bien. Se ve simple. Funciona bien. Pero, ¿es realmente tan simple? Este flujo de trabajo está fundamentalmente roto de alguna manera. Déjame entrar en más detalles. Así que el primero. Nombrar claves es difícil. Como ingenieros, sabemos que escribir código es nuestro trabajo e inventar nombres de variables no es tan fácil como parece.

2. Challenges of Naming in JSON Dictionaries

Short description:

Desafíos de nombrar claves y problemas potenciales con traducciones en diccionarios JSON.

Hay dos problemas difíciles en la informática, la infiltración de caché, nombrar cosas y errores de desbordamiento. Nombrar cosas es una de las cosas que los ingenieros siempre encontramos desafiantes. El primero es la carga cognitiva. Si tenemos una estructura de diccionario JSON, ¿qué tipo de estructura de nombres queremos? ¿Debería estar categorizado por página, pages.buttons.save? ¿O debería estar categorizado por la característica dentro de cada página, así page.createUserForm.save? ¿O debería incluso ser extraído en su propio grupo, como common.buttons.save? Estas son cargas cognitivas con las que tenemos que lidiar. Esto también es propenso a ser inconsistente. Por ejemplo, tenemos un esquema de nombres, estamos de acuerdo con él, pero luego como que olvidamos en un minuto como, ¿cuál era de nuevo? ¿Es buttons.save o es como undercommon.buttons.save? Esos son los dolores de nombrar cosas. El segundo es que el contexto se pierde cuando estás usando un diccionario JSON. Con el diccionario JSON, los traductores necesitan entender cómo estructuras tu aplicación y luego inferir desde allí. Como ejemplo, si tenemos este archivo de traducción para un juego, tenemos como dos claves que se llaman save. Una está dentro de acciones de usuario y la otra está justo arriba. El traductor al no conocer el contexto, adivinaría, está bien, ambos significan lo mismo. Quieren guardar los cambios como en un formulario. Así que eligen en este caso, la palabra japonesa, hōzōn. Pero por ejemplo, en este caso, la aplicación podría significar una cosa diferente. Como lo que quieres bajo acciones de usuario. Guardar no es para guardar cambios en un formulario, sino como para rescatar a una persona en el juego, porque esto es como una traducción de juego. Así que las traducciones deberían ser diferentes, pero el traductor necesita saber que esto es diferente solo leyendo las claves, lo cual no es muy intuitivo.

El tercero es la duplicación de palabras. Es fácil hacer accidentalmente traducciones duplicadas a través de diferentes claves. Como ejemplo aquí, podemos tener como un botón de modelo, acción de formulario, perfil de usuario. Haríamos diferentes claves como si las agrupamos por características, haríamos diferentes claves que básicamente necesitan la misma palabra exacta. Y en este caso, podemos ver que hay muchas duplicaciones, pero algunas personas podrían decir, podemos simplemente extraer a un grupo común. Como cancelar es una palabra muy comúnmente usada. Y eso es cierto, pero eso es más cognitivo. Como cuándo empiezas a extraer estas palabras? ¿Empiezas cuando encuentras la primera duplicación? ¿Es demasiado trabajo? ¿Empiezas desde la segunda duplicación? Tienes que verificar manualmente y extraerlas. Tienes que recordar usar la clave común la próxima vez. Si olvidas que ya has extraído, podrías accidentalmente usar la clave existente.

La cuarta cosa son las traducciones obsoletas. Digamos que después de desarrollar tu proyecto por un año, la estructura de claves ha cambiado. Quieres refactorizar la clave de una a otra.

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.
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.
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.
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.
Modern JavaScript: Leveling Up Arrays and Intl
JSNation US 2024JSNation US 2024
27 min
Modern JavaScript: Leveling Up Arrays and Intl
Hi, I'm Mariko from Chrome Developer Relations Team. Let's dive into the talk, leveling up JavaScript. I sat down and learned JavaScript. I sat down and learned ES6 again. TC39 has published a new version of JavaScript spec every year. I want to focus on the parts of JavaScript that got updates recently. So ArrayFlat creates a new flattened array. You can also pass a depth argument to flatten nested arrays. Another method, copyToReserve, creates a reversed copy of an array. There's also copy to sort, which creates a sorted copy of an array. Another useful method is array to spliced, which allows you to remove and add items to a copied array. Lastly, the array at method returns an item at a given index. Array at accepts negative numbers for reverse order lookup. Find last iterates in reverse order and returns the item or index. Copy to change the value at a given index with a function. Object group by allows grouping and creating a new object by type. JavaScript intl allows for word segmentation in different languages, improving readability. It also includes features like data type format, number format, and plural rules for locale-based results. Staying up to date on web features is challenging due to time-consuming research and potential errors in implementation. Baseline provides clear information on web platform features supported by major browsers, ensuring compatibility without issues. Baseline provides two levels of support: newly available and widely available. By aligning your project to Baseline, you can confidently avoid browser compatibility issues. You can use Baseline to keep up with what's new on the web by installing the Baseline widget. Websites and dashboards like feature explorer and web starters.dev have been released. The project roadmap includes developer tooling and integrating Baseline into linters and actions. Check the RAM archive insights page for user data based on Baseline years. We are planning for more tools next year, including linting and AI integration.

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