geosphere-maps/middleware.js

40 lines
1.1 KiB
JavaScript
Raw Permalink Normal View History

2023-09-22 09:33:13 +00:00
import { NextResponse } from 'next/server';
import Negotiator from 'negotiator';
import { match } from '@formatjs/intl-localematcher';
const locales = ['de', 'en'];
const defaultLocale = 'de';
// Get the preferred locale
function getLocale(request) {
const headers = { 'accept-language': request.headers.get('accept-language') };
const languages = new Negotiator({ headers }).languages();
return match(languages, locales, defaultLocale);
}
export function middleware(request) {
// Check if there is any supported locale in the pathname
const pathname = request.nextUrl.pathname;
const pathnameIsMissingLocale = locales.every(
(locale) => !pathname.startsWith(`/${locale}/`) && pathname !== `/${locale}`
);
// Redirect if there is no locale
if (pathnameIsMissingLocale) {
//console.log(request);
const locale = getLocale(request);
// Redirect to new URL
return NextResponse.redirect(new URL(`/${locale}${pathname}`, request.url));
}
}
export const config = {
matcher: [
// Skip all internal paths (_next)
'/((?!_next|assets|favicon.ico).*)',
// Optional: only run on root (/) URL
// '/'
],
};