Middleware
function createI18nMiddleware( config: LocaleConfig): (context: APIContext, next: MiddlewareNext) => Promise<Response>Crea un middleware de Astro que detecta el idioma desde la URL y lo establece en Astro.locals.locale.
Uso
import { createI18nMiddleware } from '@otrodigital/astro-i18n-next';import { config } from 'virtual:i18n';
export const onRequest = createI18nMiddleware(config);Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
config | LocaleConfig | Configuración de idioma (disponible desde virtual:i18n como config) |
Comportamiento
El middleware:
- Lee la ruta URL de la solicitud
- Verifica si el primer segmento coincide con un idioma configurado
- Establece
Astro.locals.localeal idioma detectado (odefaultLocalesi no se encuentra prefijo) - Llama a
next()para continuar la solicitud
Ejemplos:
| URL de solicitud | Astro.locals.locale |
|---|---|
/about/ | 'en' (predeterminado) |
/es/sobre/ | 'es' |
/es/saunas/modelo-165/ | 'es' |
Composición con otro middleware
Si tienes middleware existente, compónlos usando sequence de Astro:
import { sequence } from 'astro:middleware';import { createI18nMiddleware } from '@otrodigital/astro-i18n-next';import { config } from 'virtual:i18n';
const i18n = createI18nMiddleware(config);
async function myMiddleware(context, next) { // Tu lógica personalizada aquí return next();}
export const onRequest = sequence(i18n, myMiddleware);