Internacionaliza un sitio en React o Next.js

Guía de i18n para React y Next.js

Internacionaliza un sitio en React o Next.js (next-intl) | We.Inc

Traduce bien un sitio en React o Next.js: archivos de mensajes, rutas por idioma con next-intl, formato con Intl para fechas, dinero y plurales, diseños de derecha a izquierda y etiquetas hreflang.

Guarda todos los textos en un archivo JSON de mensajes por idioma, da a cada idioma su propia URL, como /de/about, y formatea fechas, precios y plurales con las API Intl integradas en el navegador. En el App Router de Next.js, next-intl une todas estas piezas: un segmento de ruta [locale], un proxy que elige el idioma y useTranslations en los componentes.

Las partes de un sitio traducido

Traducir es más que cambiar palabras. El orden de las palabras cambia, las reglas de plural son distintas, el árabe se lee de derecha a izquierda y cada país escribe las fechas a su manera. Prueba el selector de abajo para ver cómo una pequeña tarjeta de producto cambia de idioma y luego construye lo mismo en tu app con los archivos de configuración y el generador de hreflang.

Preguntas frecuentes

¿Qué biblioteca de i18n debo usar con React?

Para el App Router de Next.js, next-intl está hecha a propósito y admite Server Components. Para una app de React sin Next.js, elige una biblioteca que guarde los mensajes como JSON, así migrar más adelante a otra seguirá siendo manejable.

¿Los idiomas deben ir en subcarpetas, subdominios o dominios separados?

Las subcarpetas como example.com/de/ son lo más sencillo de mantener, porque un solo sitio y un solo dominio lo llevan todo. next-intl también admite rutas por dominio si necesitas de.example.com o un dominio de país.

¿Cómo añado hreflang en Next.js?

Devuelve alternates.languages desde metadata o generateMetadata, con una entrada por cada URL de idioma. Next.js imprime una etiqueta link rel="alternate" hreflang para cada una. Cada versión de idioma debe enumerar todas las demás y a sí misma, o los buscadores pueden ignorar el conjunto.

¿Puedo traducir mi sitio con traducción automática?

Puedes usar la traducción automática como primer borrador, pero haz que la revise un hablante con fluidez, sobre todo los titulares, los precios y los textos legales. Las traducciones pobres o sin revisar pueden confundir a los lectores y restar confianza.

Mensajes, no textos dentro de los componentes

Deja que Intl se encargue del formato

Idiomas de derecha a izquierda

Configuración de next-intl para el App Router

Instálalo con npm install next-intl. Estos archivos siguen la estructura de la propia guía de inicio de next-intl para rutas basadas en el idioma.

Un archivo por idioma, con las mismas claves en cada uno. La sintaxis ICU gestiona los plurales dentro del mensaje.

src/i18n/routing.ts y src/proxy.ts

Routing enumera tus idiomas una sola vez. El proxy (llamado middleware.ts antes de Next.js 16) redirige a los visitantes a un prefijo de idioma.

src/i18n/request.ts

Lee el idioma del segmento [locale], rechaza los desconocidos y carga los mensajes de ese idioma.

next.config.ts, layout y una página

El plugin enlaza request.ts. Mueve tus páginas bajo app/[locale]/ y lee los mensajes con useTranslations. next/root-params está activado por defecto desde Next.js 16.3; las versiones anteriores necesitan experimental.rootParams.

Formato sin biblioteca

Intl en JavaScript puro

Funciona en cualquier app de React, esté traducida o no.

Reglas de hreflang que comprueban los buscadores

Cómo hacer bien las anotaciones de idioma

Pruébalo: una tarjeta en cinco idiomas

Cambia de idioma y modifica la cantidad de artículos. Los textos vienen de un objeto de mensajes, y el precio, la fecha y la forma de plural vienen de las API Intl del navegador.

Idioma

Artículos en el carrito: {n}

Categoría de plural elegida:

Dirección:

La demo no convierte divisas; solo formatea el mismo número.

Generador de hreflang

Escribe tu dominio, la ruta de una página y tus códigos de idioma para obtener las etiquetas link para el head, o el objeto alternates de Next.js.

Dominio

Ruta de la página

Códigos de idioma (separados por comas)

Idioma x-default

Códigos no válidos omitidos: {codes}. Usa un formato como de o en-GB.

Formato de salida

Etiquetas link de HTML

Metadata de Next.js

Copiar

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio