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>