2024 Cómo Localizar tu Aplicación React con react-i18next usando nextjs

Aprovechando i18next para la Internacionalización Basada en React

La internacionalización (i18n) es vital para expandir el alcance del software a través de los mercados globales. Una de las herramientas más efectivas para este propósito en el ecosistema de JavaScript es i18next. Este artículo explora i18next, particularmente su integración con React, y destaca sus ventajas, compatibilidad con varios marcos y consejos para mejorar los esfuerzos de localización.

¿Qué es i18next?

i18next es un sólido marco de internacionalización para aplicaciones JavaScript. Simplifica la adición de soporte multilingüe a aplicaciones web, móviles y de escritorio. El marco permite la gestión de traducción dinámica, lo que facilita la adaptación de las aplicaciones a diferentes idiomas y regiones.

Ventajas de i18next

  • Facilidad de integración

i18next es fácil de integrar en proyectos existentes y es compatible con frameworks JavaScript populares como React, Angular y Vue. Esta versatilidad lo convierte en una opción preferida para los desarrolladores.

  • Personalización y flexibilidad

i18next ofrece una estructura modular que permite a los desarrolladores usar solo las funciones que necesitan. Este alto grado de personalización garantiza que el framework pueda ajustarse a una amplia gama de requisitos del proyecto.

  • Carga dinámica de traducciones

El framework admite la carga dinámica de traducciones, optimizando el rendimiento al recuperar solo los recursos de idioma necesarios a pedido.

  • Pluralización y contextualización

i18next incluye soporte incorporado para manejar la pluralización y la contextualización, asegurando variaciones precisas del idioma según la cantidad o el contexto.

  • Soporte para varios formatos de archivo

  • Soporte para múltiples formatos de archivo para almacenar traducciones

Soporta múltiples formatos de archivo para almacenar traducciones, incluyendo JSON y YAML, permitiendo flexibilidad en la elección del formato que mejor se adapte a las necesidades del proyecto.

  • Ecosistema abundante

Una comunidad próspera y un ecosistema rico proporcionan plugins, extensiones y soporte para mejorar y ampliar la funcionalidad de i18next, ahorrando tiempo y esfuerzo en el desarrollo.

  • Múltiples opciones de backend

i18next admite varios backends para almacenar y recuperar traducciones, como en memoria, HTTP y backends personalizados, lo que permite la integración con diferentes soluciones de almacenamiento.

  • Desarrollo activo y mantenimiento

Las actualizaciones y mejoras periódicas mantienen a i18next actualizado con las mejores prácticas y las necesidades cambiantes en el desarrollo web.

Integración de React-i18next

Una de las integraciones más populares de i18next es con React a través de las react-i18next bindings. Esta combinación permite una internacionalización eficiente dentro de los componentes de React, facilitando el cambio dinámico de idioma y la gestión fluida de la traducción.

Configure i18next en su aplicación React(nextjs) configurando la instancia de i18next e inicializándola con las opciones necesarias.

Ejemplo de código para React-i18next

Aquí hay un ejemplo paso a paso de cómo configurar y utilizar react-i18next en una aplicación React:

1. Instalar dependencias

Primero, instale i18next, react-i18next y next-i18next para cargar traducciones desde el servidor:

npm install i18next react-i18next next-i18next

2. Inicializar i18next

Crea un archivo llamado next-i18next.config.js para configurar e inicializar i18next:

// next-i18next.config.js
const path = require('path'); // Agrega esta línea para definir path
module.exports = {
  i18n: {
    defaultLocale: 'en',
    locales: ['en'],  // agrega tus idiomas aquí
    // localeDetection: false,  // el valor predeterminado es true
  },
  localePath: path.resolve('./content/locales'),  // aquí está la ruta de tu archivo i18n 
  // ns: ['common','componentFeature'],
  languageNames: {
    'en': 'English',
  },
}
// next.config.js
const { i18n } = require('./next-i18next.config')
module.exports = {
  reactStrictMode: true,
  async redirects() {
    return [

    ];
  },
  i18n,  // agrega esta configuración i18n
};

3. Configuración de los archivos de traducción

Crea una carpeta locales con subcarpetas para cada idioma (es, de, etc.). Dentro de cada subcarpeta, crea un archivo translation.json:

ejemplo:

-content
  -locales
    -es
      -translation.json
      -'otro archivo si lo tienes'.json
    -de
      -translation.json
      -'otro archivo si lo tienes'.json

locales/es/translation.json

{
  "welcome": "Bienvenido",
  "description": "Esta es una descripción de muestra."
}

locales/de/translation.json

{
  "welcome": "Willkommen",
  "description": "Dies ist eine Beispielbeschreibung."
}

4. Envuelve tu Aplicación con I18nextProvider

En tu archivo principal como index.js, App.js o _app.tsx, envuelve tu aplicación con appWithTranslation:

import { appWithTranslation } from 'next-i18next';

function MyApp({ Component, pageProps }: AppProps) {
  return (
    ...
  );
}

export default appWithTranslation(MyApp)  // envuelve así 

5. Usar el Gancho de Traducción en Componentes

Ahora, puedes usar el gancho useTranslation para traducir cadenas en tus componentes:

Primero, debes usar serverSideTranslations en el archivo de nivel de página


export const getStaticProps: GetStaticProps = async ({ }) => {
  return {
    props: {
      ...(await serverSideTranslations(safeLocale, [
        'translation', 'other'
      ])),
    },
  };
};
export default function Precio() {
      return (
        <div>
          <tuComponente/>
        </div>
    )
}

Y luego en tu Componente

import React from 'react';
import { useTranslation } from 'next-i18next';

const MiComponente = () => {
  const { t } = useTranslation('translation', 'other');  // translation es el valor predeterminado aquí

  return (
    <div>
      <h1>{t('bienvenido')}</h1>
      <p>{t('descripcion')}</p>
      <p>{t('other:tucontenido')}</p> // usa un espacio de nombres diferente
    </div>
  );
};
export default MyComponent;

We use cookies

We use cookies to ensure you get the best experience on our website. For more information on how we use cookies, please see our cookie policy.

By clicking "Accept", you agree to our use of cookies.
Learn more aboutprivacyand terms.