diff --git a/apps/web/src/middleware.ts b/apps/web/src/middleware.ts index 70b2b5590..71a048d83 100644 --- a/apps/web/src/middleware.ts +++ b/apps/web/src/middleware.ts @@ -1,12 +1,9 @@ -import languages from "@rallly/languages"; import { getPreferredLocale } from "@rallly/languages/get-preferred-locale"; import { getPosthogBootstrapCookie } from "@rallly/posthog/utils"; import { NextResponse } from "next/server"; import { withAuth } from "@/auth/edge"; -const supportedLocales = Object.keys(languages); - export const middleware = withAuth(async (req) => { const { nextUrl } = req; const newUrl = nextUrl.clone(); @@ -19,15 +16,12 @@ export const middleware = withAuth(async (req) => { return NextResponse.redirect(newUrl); } - const locale = - req.auth?.user?.locale || - getPreferredLocale({ - acceptLanguageHeader: req.headers.get("accept-language") ?? undefined, - }); + const locale = getPreferredLocale({ + userLocale: req.auth?.user?.locale ?? undefined, + acceptLanguageHeader: req.headers.get("accept-language") ?? undefined, + }); - if (supportedLocales.includes(locale)) { - newUrl.pathname = `/${locale}${pathname}`; - } + newUrl.pathname = `/${locale}${pathname}`; const res = NextResponse.rewrite(newUrl); res.headers.set("x-locale", locale); diff --git a/packages/languages/src/get-preferred-locale.ts b/packages/languages/src/get-preferred-locale.ts index cb306abe3..4f5812a59 100644 --- a/packages/languages/src/get-preferred-locale.ts +++ b/packages/languages/src/get-preferred-locale.ts @@ -1,14 +1,18 @@ import { match } from "@formatjs/intl-localematcher"; import Negotiator from "negotiator"; -import languages, { defaultLocale } from "./index"; - -const locales = Object.keys(languages); +import { defaultLocale, supportedLngs } from "./index"; export function getPreferredLocale({ + userLocale, acceptLanguageHeader, }: { + userLocale?: string; acceptLanguageHeader?: string; }) { + if (userLocale && supportedLngs.includes(userLocale)) { + return userLocale; + } + if (!acceptLanguageHeader) { return defaultLocale; } @@ -22,9 +26,8 @@ export function getPreferredLocale({ .filter((lang) => lang !== "*"); try { - return match(preferredLanguages, locales, defaultLocale); + return match(preferredLanguages, supportedLngs, defaultLocale); } catch (e) { - console.warn("Failed to match locale", e); return defaultLocale; } }