Next.js Discord

Discord Forum

Internationalization - flickering - rewrites next config

Unanswered
Florida White posted this in #help-forum
Open in Discord
Original message was deleted.

1 Reply

Florida White
middleware:

let defaultLocale = "en";
let locales = ["en", "pl"];

const getLangFromCookies = request => {
    const lang = request.cookies.get("lang");
    let acceptedLang = null;

    if (lang) {
        acceptedLang = lang.value === "pl" ? "pl-PL,pl;q=0.9" : "en-US,en;q=0.5";
    }

    return acceptedLang;
};

const getLocale = request => {
    const lang = getLangFromCookies(request);

    let headers = { "accept-language": lang };

    let languages = new Negotiator({ headers }).languages();

    return match(languages, locales, defaultLocale);
};

export async function middleware(request) {
    const { pathname } = request.nextUrl;
    const pathnameHasLocale = locales.some(
        locale => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
    );

    if (pathnameHasLocale) return;

    const locale = getLocale(request);

    request.nextUrl.pathname = `/${locale}${pathname}`;