Internacionalización (i18n) en Node.js: i18next y polyglot

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Internacionalización (i18n) en JavaScript (Node.js)

La internacionalización (abreviada i18n — del inglés «internationalization», donde 18 representa el número de letras entre la primera «i» y la última «n») es el proceso de diseñar y desarrollar software de manera que pueda adaptarse fácilmente a diferentes idiomas y regiones sin realizar cambios en el código. En el ecosistema de Node.js existen varias bibliotecas potentes que simplifican enormemente esta tarea. En este artículo, analizaremos las dos más populares: i18next y node-polyglot.



¿Por qué es necesaria la internacionalización?

Las aplicaciones web modernas y los servicios de servidor a menudo trabajan con usuarios de diferentes países. El soporte de varios idiomas mejora la experiencia de usuario (UX) y amplía la audiencia. Sin i18n, los desarrolladores tendrían que codificar cadenas en un solo idioma, lo que hace que el soporte multilingüe sea extremadamente laborioso y propenso a errores.

Las principales tareas que resuelven las bibliotecas i18n en Node.js son:

  • Soporte de archivos de traducción (normalmente JSON o YAML).
  • Pluralización (declinación correcta de palabras según el número: «1 café», «2 cafés», «5 cafés»).
  • Interpolación de variables en cadenas (por ejemplo, «¡Hola, {{name}}!»).
  • Soporte de claves anidadas para organizar la estructura de las traducciones.
  • Detección automática del idioma del usuario (a través de cabeceras HTTP, cookies, subdominios).


Biblioteca i18next

i18next es, probablemente, la biblioteca de internacionalización más popular y funcional en el mundo de JavaScript. Funciona tanto en el navegador como en el servidor Node.js. i18next ofrece un rico ecosistema de plugins, incluyendo integración con React, Vue, Express y otros frameworks.



Instalación y configuración básica

// Instalación a través de npmnpm install i18next

Creemos los archivos de traducción. Normalmente se almacenan en la carpeta locales:

locales/es/translation.json

{  "greeting": "¡Hola, {{name}}!",  "coffee": "Te has tomado {{count}} taza de café",  "coffee_plural": "Te has tomado {{count}} tazas de café",  "menu": {    "home": "Inicio",    "about": "Sobre nosotros"  }}

locales/en/translation.json

{  "greeting": "Hello, {{name}}!",  "coffee": "You drank {{count}} cup of coffee",  "coffee_plural": "You drank {{count}} cups of coffee",  "menu": {    "home": "Home",    "about": "About us"  }}

Ahora inicialicemos i18next en la aplicación:

const i18next = require('i18next');const fs = require('fs');const path = require('path');

// Cargamos las traducciones desde los archivosfunction loadTranslation(lng) { const filePath = path.join(__dirname, 'locales', lng, 'translation.json'); return JSON.parse(fs.readFileSync(filePath, 'utf8'));}

i18next.init({ lng: 'es', // idioma por defecto fallbackLng: 'en', // idioma de respaldo resources: { es: { translation: loadTranslation('es') }, en: { translation: loadTranslation('en') } }, interpolation: { escapeValue: false // para Node.js no es necesario escapar HTML }});

// Usoconsole.log(i18next.t('greeting', { name: 'Alejandro' }));// Salida: ¡Hola, Alejandro!

console.log(i18next.t('coffee', { count: 1 }));// Salida: Te has tomado 1 taza de café

console.log(i18next.t('coffee', { count: 5 }));// Salida: Te has tomado 5 tazas de café

console.log(i18next.t('menu.home'));// Salida: Inicio


Cambio de idioma sobre la marcha

i18next.changeLanguage('en');console.log(i18next.t('greeting', { name: 'Alex' }));// Salida: Hello, Alex!


Biblioteca node-polyglot

node-polyglot es una alternativa ligera y sencilla a i18next. Es ideal para proyectos pequeños o cuando no se

Recommendations