Internacionalización de Labels en Next.js con JSON

Clase 8 de 12Curso de Next.js: Internacionalización de Aplicaciones Web con i18n

Resumen

¿Cómo internacionalizar contenido utilizando Next.js?

Internacionalizar una aplicación web es un paso crucial para hacerla accesible a un público global. Al emplear Next.js en combinación con un CMS (Content Management System), podemos presentar contenido localizado de manera eficiente. En esta guía, exploraremos cómo empezar a aplicar la internacionalización en áreas específicas de nuestra aplicación, concentrándonos en el manejo de etiquetas dentro de un entorno JavaScript.

¿Cómo estructurar la arquitectura de internacionalización?

Para internacionalizar etiquetas o texto fijo, es necesario adoptar una arquitectura que permita flexibilidad y facilidad de uso. Usualmente, todo texto hardcodeado en el proyecto se extrae y se guarda en archivos separados de JSON o JavaScript. Estos archivos se guardan comúnmente en un directorio llamado locales seguido del código del idioma. Por ejemplo, todos los textos en español se guardan en un archivo llamado es.json, mientras que su versión en inglés se guarda en en-US.json.

Pasos para configurar esta arquitectura:

  1. Extraer el texto hardcodeado: Identifica los elementos UI que contienen texto incorporado directamente en el código, como botones o mensajes, y extrae estos textos.

  2. Crear archivos de locales: Por cada idioma que deseas soportar, crea un archivo que contenga las cadenas de texto pertinentes. Estos archivos se importarán conforme al idioma actual.

  3. Cargar el archivo correcto: Deinfiendo el local actual, carga el archivo de idioma correspondiente. La lógica de cómo y cuándo se carga este archivo puede variar, afectando el rendimiento y la experiencia del usuario.

¿Dónde y cómo cargar los archivos JSON de locales?

Determinar dónde cargar los archivos de locales es crucial para optimizar el rendimiento de la aplicación. Aquí, exploramos las dos principales opciones: cliente y servidor.

  • Cargar en el lado del cliente: Esta opción permite al cliente decidir qué archivo cargar según la configuración seleccionada. Esta flexibilidad puede mejorar la experiencia del usuario, permitiendo cambios dinámicos, pero podría impactar negativamente el tiempo de carga inicial.

  • Cargar en el servidor: La carga temprana en el servidor permite enviar al cliente solo el contenido necesario y ya localizado con base en la configuración actual, lo cual puede optimizar el rendimiento, reduciendo el tiempo de carga.

¿Cómo conectar los labels con los componentes?

Una vez que se cargan los archivos de texto, es importante decidir cómo integrarlos dentro de los componentes de React de manera efectiva. Aquí existen varias estrategias:

  • Importación directa: Una opción es importar los valores directamente en cada componente donde se necesiten. Sin embargo, esto puede crear redundancia y duplicación de lógica.

  • Uso de contexto: Emplear el API de contexto de React para centralizar los valores de los textos y distribuirlos a los componentes desde un único punto de control. Esto mejora la consistencia y facilita el mantenimiento.

// Ejemplo usando Context API
import React, { createContext, useContext } from "react";

const LocaleContext = createContext();

// Proveedor de contexto de localización
export function LocaleProvider({ children, locale }) {
  const labels = require(`./locales/${locale}.json`);
  
  return (
    <LocaleContext.Provider value={labels}>
      {children}
    </LocaleContext.Provider>
  );
}

// Hook para utilizar localizaciones
export function useLabels() {
  return useContext(LocaleContext);
}

// Uso en un componente
function MyButton() {
  const labels = useLabels();
  return <button>{labels.buttons.getStart}</button>;
}

¿Cómo facilitar el mantenimiento a editores y equipos de copy?

El proceso de internacionalización debe considerar también a aquellos equipos que manejarán y actualizarán las traducciones.

  • Facilidad en la edición: Los archivos JSON utilizados para internacionalización deben estar organizados y comentados con claridad, de modo que alguien sin conocimientos técnicos pueda entender qué sección de la aplicación está siendo modificada.

  • Documentación accesible: Proporciona una guía clara sobre cómo y dónde modificar estos archivos. Esto no solo ayuda a editores y escritores, sino que también asegura consistencia y precisión en las actualizaciones.

En resumen, la implementación adecuada de la internacionalización en una aplicación Next.js no solo mejora su alcance, sino que optimiza su rendimiento cuando se maneja correctamente. Se trata de ofrecer una arquitectura flexible que sea fácil de mantener, no solo por los desarrolladores, sino también por los equipos de contenido que gestionan estas traducciones. ¡No dejes de explorar y mejorar tu aplicación con estas prácticas!