Buscar

Buscar en Kavel...

Menú de documentación

Internacionalización

Localización tipada y basada en URL con Paraglide, cada mensaje es una función, comprobada en tiempo de compilación.

Qué obtienes

  • Catálogos de mensajes curados (inglés, neerlandés, alemán, francés y español) y eliges cuáles incluir al crear el proyecto
  • La locale base servida en URL sin prefijo y las demás locales bajo un prefijo /xx/ (/de/…), resueltas antes del enrutado, para que los archivos de rutas sigan siendo agnósticos al idioma
  • Un componente LocaleSwitcher y un runtime de mensajes compilado y tree-shakeable

Elegir idiomas

Cuando seleccionas el módulo i18n, la CLI pregunta qué idiomas incluir, o pásalos de forma no interactiva. La primera locale es la base (respaldo); solo se conservan los catálogos elegidos.

bash
bun create kavel@latest my-app --locales en,de,fr

Usar mensajes

Los mensajes compilan a funciones tipadas en el objeto m. Referencia una clave que no existe y no compilará:

tsx
import { m } from "@/paraglide/messages";

export function Hero() {
  return <h1>{m.hero_title()}</h1>;
}

Consejo

Las claves de mensaje se generan como nombres estables y pseudoaleatorios (p. ej. silver_lamp_cord_meadow) en vez de describir el texto. Así las claves se mantienen estables cuando cambia la redacción y se evita el ruido en los merges. Edita el texto en los catálogos JSON, no la clave.

Añadir una locale

  1. Añade la locale a project.inlang/settings.json y a la lista locales en apps/web/src/lib/i18n.ts.
  2. Crea messages/<locale>.json con las claves traducidas.
  3. Recompila el runtime.
bash
bun i18n:compile

Rutas traducidas

La locale base se sirve sin prefijo (/pricing); las demás locales bajo un prefijo /xx/. Cada ruta conserva su ruta por defecto; para traducir la ruta por locale (para que el neerlandés obtenga /nl/prijzen), añade una entrada a routeLocalizations en src/lib/i18n.ts:

ts
export const routeLocalizations = {
  "/about": { en: "/about", nl: "/over-ons" },
};