Untitled

 avatar
unknown
javascript
24 days ago
1.5 kB
3
Indexable
import { NextResponse } from "next/server";
import { fallbackLng, languages } from "@/app/i18n/settings";

const cookieName = "i18next";

const languageMiddleware = (req) => {
    const url = req.nextUrl;
    const pathLang = url.pathname.split("/")[1]?.toLowerCase().trim();
    const cookieLng = req.cookies.get(cookieName)?.value;
    const isDevelopment = process.env.NODE_ENV === 'development';

    if (url.pathname === "/") {
        const browserLang = req.headers.get("accept-language")?.split(",")[0].split("-")[0];
        const redirectLang = languages.includes(browserLang) ? browserLang : fallbackLng;

        const redirectUrl = new URL(`/${redirectLang}`, req.url);
        const response = NextResponse.redirect(redirectUrl);
        response.headers.set("x-language", redirectLang);
        return response;
    }

    if (!languages.includes(pathLang)) {
        const redirectUrl = new URL(`/${fallbackLng}${url.pathname}`, req.url);
        const response = NextResponse.redirect(redirectUrl);
        response.headers.set("x-language", fallbackLng);
        return response;
    }

    const response = NextResponse.next();
    response.headers.set("x-language", pathLang);

    if (cookieLng !== pathLang) {
        response.cookies.set(cookieName, pathLang, {
            sameSite: 'Lax',
            secure: !isDevelopment,
            path: '/',
        });
    }

    return response;
};

export default languageMiddleware;
Editor is loading...
Leave a Comment