Middleware y SSR
Úsala cuando varias páginas necesitan traducciones antes de renderizar o cuando tu aplicación usa SSR en Node. Requiere haber completado el inicio y conocer las rutas [lang]. El middleware puede usarse también al prerenderizar.
Carga mensajes en el runtime
Para SSR registra los mensajes dentro del código de la aplicación, mediante este archivo, en lugar de depender del proceso que lee astro.config.mjs. Conserva los dos JSON del inicio. Retira messages y sus imports de la configuración al cambiar a este enfoque.
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] };
});Inicializa antes de renderizar
Crea el middleware. Si ya tienes uno, combina los handlers con sequence de astro:middleware; no lo sobrescribas. createIntlMiddleware prepara y aísla las traducciones para todo el render de cada petición.
import "./i18n/request";
import { createIntlMiddleware } from "astro-intl/middleware";
export const onRequest = createIntlMiddleware({
locales: ["en", "es"],
defaultLocale: "en",
});Lee traducciones en la página
Con este middleware activo, elimina setRequestLocale de las páginas y llama directamente a getTranslations. En páginas estáticas conserva getStaticPaths. En rutas renderizadas bajo demanda usa la configuración SSR de Astro y un adaptador Node compatible, y no exportes getStaticPaths. El soporte de aislamiento requiere AsyncLocalStorage; un runtime SSR sin esta capacidad no es compatible.