Carga personalizada

Úsala cuando necesites resolver mensajes con lógica propia o cargarlos desde otra fuente. Requiere entender los JSON y setRequestLocale del inicio. Para archivos locales pequeños, conserva messages.

Registra un cargador

Este ejemplo usa los mismos JSON del inicio. defineRequestConfig registra la función; solo declarar el archivo no la ejecuta. Importarlo antes de inicializar el idioma activa el cargador.

src/i18n/request.ts
import { defineRequestConfig } from "astro-intl";
import en from "./messages/en.json";
import es from "./messages/es.json";

const messages = { en, es };

export default defineRequestConfig(async (locale) => {
  if (locale !== "en" && locale !== "es") {
    throw new Error("Unsupported locale: " + locale);
  }
  return { locale, messages: messages[locale] };
});

Úsalo en una página estática

Conserva locales y defaultLocale en la integración y retira messages y sus imports de astro.config.mjs al adoptar este enfoque. El cargador explícito tiene prioridad sobre messages; evita mantener dos fuentes de configuración.

src/pages/[lang]/index.astro
---
import "../../i18n/request";
import { setRequestLocale, getTranslations } from "astro-intl";

export function getStaticPaths() {
  return [{ params: { lang: "en" } }, { params: { lang: "es" } }];
}

await setRequestLocale(Astro.url);
const t = getTranslations();
---

<h1>{t("greeting")}</h1>