Nexanexa
Paso 6

Internacionalización

Un segmento [locale] especial en la ruta, más t("clave") en el cuerpo, seo y schema — resuelto contra src/locales/<locale>.json. Este mismo tutorial que estás leyendo usa exactamente este mecanismo.

El segmento [locale]

src/pages/[locale]/index.tsx   ->  /es, /en, ...

pages/[locale]/index.tsx se sirve en /es, /en, o cualquier locale que tengas en src/locales/.

Traducir con t()

// src/locales/es.json
{ "home": { "title": "Bienvenido a Nexa" } }

// src/pages/[locale]/index.tsx
export default function Home() {
    return <h1>{t("home.title")}</h1>;
}

t("clave") reconoce un patrón sintáctico exacto: un identificador t con un único string literal — sin clave dinámica (t(variable) no se reconoce).

hreflang automático

<link rel="alternate" hreflang="es" href="/es">
<link rel="alternate" hreflang="en" href="/en">

Si hay más de un locale disponible, Nexa genera los <link rel="alternate" hreflang="..."> de cada traducción automáticamente.

Interpolación: t("clave", { variable })

// src/locales/<locale>.json
{ "profile": { "donateTo": "Support {name}" } }

<p>{t("profile.donateTo", { name: data.creatorName })}</p>

El segundo argumento sustituye cada marcador de variable del texto (ver el ejemplo abajo) por una referencia data.x/params.x — la misma referencia limitada que acepta cualquier otra posición dinámica de Nexa, nunca un literal ni una expresión arbitraria. nexa build/nexa lint fallan con un error claro si una clave y sus argumentos no se corresponden (un marcador sin su variable, o una variable de sobra) — mejor un build roto y explícito que un marcador sin reemplazar en producción.