import createMiddleware from 'next-intl/middleware' import { NextResponse, type NextRequest } from 'next/server' import { routing } from './i18n/routing' const intlMiddleware = createMiddleware(routing) // Raíces de idioma: «/es», «/en». Estas SÍ llevan barra final; el resto NO. const LOCALE_ROOTS = new Set(routing.locales.map((l) => `/${l}`)) export default function middleware(request: NextRequest) { const { pathname } = request.nextUrl // 1) Raíz de idioma sin barra → con barra: /es → /es/ if (LOCALE_ROOTS.has(pathname)) { const url = new URL(request.url) url.pathname = `${pathname}/` return NextResponse.redirect(url) } // 2) Sub-ruta con barra final → sin barra (la raíz /es/ se conserva): /es/x/ → /es/x if (pathname.length > 1 && pathname.endsWith('/') && !LOCALE_ROOTS.has(pathname.slice(0, -1))) { const url = new URL(request.url) url.pathname = pathname.replace(/\/+$/, '') return NextResponse.redirect(url) } return intlMiddleware(request) } export const config = { // Aplica a todo salvo /api, estáticos de Next e ipas con extensión. matcher: ['/((?!api|_next|_vercel|.*\\..*).*)'], }