Internacionalización
Next.js te permite configurar el enrutamiento y renderizado de contenido para soportar múltiples idiomas. Hacer que tu sitio se adapte a diferentes localizaciones incluye contenido traducido (localización) y rutas internacionalizadas.
Terminología
- Localización (Locale): Un identificador para un conjunto de preferencias de idioma y formato. Esto generalmente incluye el idioma preferido del usuario y posiblemente su región geográfica.
en-US
: Inglés como se habla en Estados Unidosnl-NL
: Holandés como se habla en Países Bajosnl
: Holandés, sin región específica
Visión general del enrutamiento
Se recomienda usar las preferencias de idioma del usuario en el navegador para seleccionar qué localización usar. Cambiar tu idioma preferido modificará el encabezado Accept-Language
que llega a tu aplicación.
Por ejemplo, usando las siguientes bibliotecas, puedes examinar una Request
entrante para determinar qué localización seleccionar, basado en los Headers
, las localizaciones que planeas soportar y la localización predeterminada.
El enrutamiento puede internacionalizarse mediante sub-rutas (/fr/products
) o dominios (my-site.fr/products
). Con esta información, ahora puedes redirigir al usuario basado en la localización dentro de Middleware.
Finalmente, asegúrate que todos los archivos especiales dentro de app/
estén anidados bajo app/[lang]
. Esto permite al enrutador de Next.js manejar dinámicamente diferentes localizaciones en la ruta, y pasar el parámetro lang
a cada layout y página. Por ejemplo:
El layout raíz también puede anidarse en la nueva carpeta (ej. app/[lang]/layout.js
).
Localización
Cambiar el contenido mostrado basado en la localización preferida del usuario, o localización, no es algo específico de Next.js. Los patrones descritos a continuación funcionarían igual con cualquier aplicación web.
Supongamos que queremos soportar contenido tanto en inglés como en holandés dentro de nuestra aplicación. Podríamos mantener dos "diccionarios" diferentes, que son objetos que nos dan un mapeo de alguna clave a una cadena localizada. Por ejemplo:
Luego podemos crear una función getDictionary
para cargar las traducciones para la localización solicitada:
Dado el idioma actualmente seleccionado, podemos obtener el diccionario dentro de un layout o página.
Debido a que todos los layouts y páginas en el directorio app/
son por defecto Componentes del Servidor, no necesitamos preocuparnos por el tamaño de los archivos de traducción afectando el tamaño del paquete JavaScript del lado del cliente. Este código solo se ejecutará en el servidor, y solo el HTML resultante se enviará al navegador.
Renderizado estático
Para generar rutas estáticas para un conjunto dado de localizaciones, podemos usar generateStaticParams
con cualquier página o layout. Esto puede ser global, por ejemplo, en el layout raíz: