Internacionalización (i18n) en JavaScript (Node.js): biblioteca i18next

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): biblioteca i18next

\n\n

La internacionalización (abreviada i18n — del inglés "internationalization", donde 18 es el número de letras entre la primera "i" y la última "n") es el proceso de diseño y desarrollo de software que permite adaptarlo a diferentes idiomas y características regionales sin modificar el código fuente. En el desarrollo web moderno con Node.js, crear aplicaciones multilingües es una necesidad para llegar al mercado global.

\n\n

Una de las bibliotecas más populares y potentes para implementar i18n en el ecosistema JavaScript (incluyendo Node.js) es i18next. Ofrece una arquitectura flexible, soporte para múltiples formatos de archivos de traducción, interpolación, pluralización y traducciones contextuales. En este artículo, analizaremos en detalle la instalación, configuración y uso de i18next en el lado del servidor.

\n\n

Instalación y configuración

\n\n

Para empezar a trabajar con i18next en un proyecto Node.js, instale la biblioteca a través de npm:

\n\n
npm install i18next
\n\n

También se recomienda instalar el paquete i18next-fs-backend para cargar archivos de traducción desde el sistema de archivos:

\n\n
npm install i18next-fs-backend
\n\n

Después de la instalación, cree un archivo de inicialización, por ejemplo i18n.js:

\n\n
const i18next = require('i18next');\nconst Backend = require('i18next-fs-backend');\n\ni18next.use(Backend).init({\n  lng: 'ru', // idioma por defecto\n  fallbackLng: 'en', // idioma de respaldo\n  backend: {\n    loadPath: './locales/{{lng}}/{{ns}}.json' // ruta a los archivos de traducción\n  },\n  interpolation: {\n    escapeValue: false // no escapar HTML (para Node.js)\n  }\n});\n\nmodule.exports = i18next;
\n\n

Estructura de los archivos de traducción

\n\n

Cree una carpeta locales en la raíz del proyecto. Dentro de ella, para cada idioma, cree una subcarpeta (por ejemplo, en, ru, de). En cada subcarpeta, coloque archivos JSON con las traducciones. Normalmente se usa un archivo translation.json por idioma, pero se puede dividir en espacios de nombres (namespaces) para mayor modularidad.

\n\n

Ejemplo del archivo locales/ru/translation.json:

\n\n
{\n  "welcome": "¡Bienvenido a nuestro sitio web!",\n  "greeting": "¡Hola, {{name}}!",\n  "items": "{{count}} elemento",\n  "items_plural": "{{count}} elementos",\n  "menu": {\n    "home": "Inicio",\n    "about": "Acerca de",\n    "contact": "Contacto"\n  }\n}
\n\n

Ejemplo del archivo locales/en/translation.json:

\n\n
{\n  "welcome": "Welcome to our website!",\n  "greeting": "Hello, {{name}}!",\n  "items": "{{count}} item",\n  "items_plural": "{{count}} items",\n  "menu": {\n    "home": "Home",\n    "about": "About",\n    "contact": "Contact"\n  }\n}
\n\n

Funcionalidades principales de i18next

\n\n

Traducción simple

\n\n

Para obtener una traducción, use la función t() (de "translate"):

\n\n
const i18next = require('./i18n');\n\n// Inicialización asíncrona (en un proyecto real, espere a que esté lista)\ni18next.t('welcome'); // "¡Bienvenido a nuestro sitio web!" (si lng: 'ru')
\n\n

Interpolación de variables

\n\n

Inserte valores dinámicos en las cadenas usando llaves dobles:

\n\n
i18next.t('greeting', { name: 'Alejandro' });\n// Resultado: "¡Hola, Alejandro!"
\n\n

Pluralización

\n\n

La biblioteca selecciona automáticamente la forma plural correcta según las reglas del idioma. Para ello, agregue claves con el sufijo _plural:

\n\n
i18next.t('items', { count: 1 }); // "1 elemento"\ni18next.t('items', { count: 5 }); // "5 elementos"
\n\n

Para el inglés, la regla es más simple (un elemento — item, muchos — items). Para el ruso, i18next utiliza reglas de pluralización integradas que consideran los números 1, 2-4, 5-20, etc.

\n\n

Claves anidadas y espacios de nombres

\n\n

Puede organizar las traducciones en estructuras jerárquicas usando puntos:

\n\n
i18next.t('menu.home'); // "Inicio"
\n\n

Para usar espacios de nombres, defínalos en los archivos de traducción y especifique el espacio de nombres al llamar a t():

\n\n
// locales/ru/common.json\n{\n  "appName": "Mi Aplicación"\n}\n\n// Uso\ni18next.t('appName', { ns: 'common' }); // "Mi Aplicación"
\n\n

Cambio dinámico de idioma

\n\n

Puede cambiar el idioma en tiempo de ejecución usando el método changeLanguage:

\n\n
i18next.changeLanguage('en', (err, t) => {\n  if (err) return console.error(err);\n  console.log(t('welcome')); // "Welcome to our website!"\n});
\n\n

Esto es especialmente útil en aplicaciones web donde el usuario puede seleccionar su idioma preferido.

\n\n

Conclusión

\n\n

i18next es una herramienta potente y flexible para la internacionalización en Node.js. Su soporte para pluralización, interpolación, espacios de nombres y carga asíncrona de traducciones la convierte en la opción ideal para proyectos de cualquier escala. Con una configuración mínima, puede hacer que su aplicación sea accesible para usuarios de todo el mundo.

\n\n

Para obtener más información, consulte la documentación oficial de i18next.

Recommendations