mirror of
https://github.com/lukevella/rallly.git
synced 2025-07-17 16:27:28 +02:00
🐛 Fix locale fallback mechanism (#1734)
This commit is contained in:
parent
eb625b946f
commit
53a957dc49
2 changed files with 13 additions and 16 deletions
|
@ -1,12 +1,9 @@
|
||||||
import languages from "@rallly/languages";
|
|
||||||
import { getPreferredLocale } from "@rallly/languages/get-preferred-locale";
|
import { getPreferredLocale } from "@rallly/languages/get-preferred-locale";
|
||||||
import { getPosthogBootstrapCookie } from "@rallly/posthog/utils";
|
import { getPosthogBootstrapCookie } from "@rallly/posthog/utils";
|
||||||
import { NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
import { withAuth } from "@/auth/edge";
|
import { withAuth } from "@/auth/edge";
|
||||||
|
|
||||||
const supportedLocales = Object.keys(languages);
|
|
||||||
|
|
||||||
export const middleware = withAuth(async (req) => {
|
export const middleware = withAuth(async (req) => {
|
||||||
const { nextUrl } = req;
|
const { nextUrl } = req;
|
||||||
const newUrl = nextUrl.clone();
|
const newUrl = nextUrl.clone();
|
||||||
|
@ -19,15 +16,12 @@ export const middleware = withAuth(async (req) => {
|
||||||
return NextResponse.redirect(newUrl);
|
return NextResponse.redirect(newUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
const locale =
|
const locale = getPreferredLocale({
|
||||||
req.auth?.user?.locale ||
|
userLocale: req.auth?.user?.locale ?? undefined,
|
||||||
getPreferredLocale({
|
acceptLanguageHeader: req.headers.get("accept-language") ?? 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);
|
const res = NextResponse.rewrite(newUrl);
|
||||||
res.headers.set("x-locale", locale);
|
res.headers.set("x-locale", locale);
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
import { match } from "@formatjs/intl-localematcher";
|
import { match } from "@formatjs/intl-localematcher";
|
||||||
import Negotiator from "negotiator";
|
import Negotiator from "negotiator";
|
||||||
import languages, { defaultLocale } from "./index";
|
import { defaultLocale, supportedLngs } from "./index";
|
||||||
|
|
||||||
const locales = Object.keys(languages);
|
|
||||||
|
|
||||||
export function getPreferredLocale({
|
export function getPreferredLocale({
|
||||||
|
userLocale,
|
||||||
acceptLanguageHeader,
|
acceptLanguageHeader,
|
||||||
}: {
|
}: {
|
||||||
|
userLocale?: string;
|
||||||
acceptLanguageHeader?: string;
|
acceptLanguageHeader?: string;
|
||||||
}) {
|
}) {
|
||||||
|
if (userLocale && supportedLngs.includes(userLocale)) {
|
||||||
|
return userLocale;
|
||||||
|
}
|
||||||
|
|
||||||
if (!acceptLanguageHeader) {
|
if (!acceptLanguageHeader) {
|
||||||
return defaultLocale;
|
return defaultLocale;
|
||||||
}
|
}
|
||||||
|
@ -22,9 +26,8 @@ export function getPreferredLocale({
|
||||||
.filter((lang) => lang !== "*");
|
.filter((lang) => lang !== "*");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return match(preferredLanguages, locales, defaultLocale);
|
return match(preferredLanguages, supportedLngs, defaultLocale);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn("Failed to match locale", e);
|
|
||||||
return defaultLocale;
|
return defaultLocale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue