Files
pasargad/src/middleware.ts
T
2026-07-21 12:25:19 +03:30

48 lines
1.3 KiB
TypeScript

import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
const PUBLIC_FILE = /\.(.*)$/;
const locales = ['en', 'fa'];
const defaultLocale = 'en';
export function middleware(request: NextRequest) {
const { pathname } = request.nextUrl;
// Ignore public files and API routes
if (pathname.startsWith('/api') || PUBLIC_FILE.test(pathname)) {
return NextResponse.next();
}
// Check if the pathname already includes a locale
const matchedLocale = locales.find(
(locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`,
);
const cookieLocale = request.cookies.get('locale')?.value;
const preferredLocale = locales.includes(cookieLocale || '')
? cookieLocale!
: defaultLocale;
const locale = matchedLocale || preferredLocale;
let response: NextResponse;
// If locale is missing, redirect and set cookie
const pathnameIsMissingLocale = !matchedLocale;
if (pathnameIsMissingLocale) {
response = NextResponse.redirect(
new URL(`/${preferredLocale}${pathname}`, request.url),
);
} else {
response = NextResponse.next();
}
// Set the locale cookie for all responses
response.cookies.set('locale', locale, { path: '/' });
return response;
}
export const config = {
matcher: ['/((?!_next/static|_next/image|favicon.ico|api).*)'],
};