improve language handling

This commit is contained in:
Max Peintner
2024-12-11 09:20:40 +01:00
parent 20c85bb97b
commit fb331ce935
3 changed files with 20 additions and 33 deletions

View File

@@ -1,30 +0,0 @@
import { getAllSessions } from "@/lib/cookies";
import { listSessions } from "@/lib/zitadel";
import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb";
import { NextRequest, NextResponse } from "next/server";
async function loadSessions(ids: string[]): Promise<Session[]> {
const response = await listSessions(
ids.filter((id: string | undefined) => !!id),
);
return response?.sessions ?? [];
}
export async function GET(request: NextRequest) {
const sessionCookies = await getAllSessions();
const ids = sessionCookies.map((s) => s.id);
let sessions: Session[] = [];
if (ids && ids.length) {
sessions = await loadSessions(ids);
}
const responseHeaders = new Headers();
responseHeaders.set("Access-Control-Allow-Origin", "*");
responseHeaders.set("Access-Control-Allow-Headers", "*");
return NextResponse.json(
{ sessions },
{ status: 200, headers: responseHeaders },
);
}

View File

@@ -1,12 +1,28 @@
import { LANGUAGE_COOKIE_NAME } from "@/lib/i18n"; import { LANGS, LANGUAGE_COOKIE_NAME, LANGUAGE_HEADER_NAME } from "@/lib/i18n";
import deepmerge from "deepmerge"; import deepmerge from "deepmerge";
import { getRequestConfig } from "next-intl/server"; import { getRequestConfig } from "next-intl/server";
import { cookies } from "next/headers"; import { cookies, headers } from "next/headers";
export default getRequestConfig(async () => { export default getRequestConfig(async () => {
const fallback = "en"; const fallback = "en";
const cookiesList = await cookies(); const cookiesList = await cookies();
const locale: string = cookiesList.get(LANGUAGE_COOKIE_NAME)?.value ?? "en";
let locale: string = fallback;
const languageHeader = await (await headers()).get(LANGUAGE_HEADER_NAME);
if (languageHeader) {
const headerLocale = languageHeader.split(",")[0].split("-")[0]; // Extract the language code
if (LANGS.map((l) => l.code).includes(headerLocale)) {
locale = headerLocale;
}
}
const languageCookie = cookiesList?.get(LANGUAGE_COOKIE_NAME);
if (languageCookie && languageCookie.value) {
if (LANGS.map((l) => l.code).includes(languageCookie.value)) {
locale = languageCookie.value;
}
}
const userMessages = (await import(`../../locales/${locale}.json`)).default; const userMessages = (await import(`../../locales/${locale}.json`)).default;
const fallbackMessages = (await import(`../../locales/${fallback}.json`)) const fallbackMessages = (await import(`../../locales/${fallback}.json`))

View File

@@ -23,3 +23,4 @@ export const LANGS: Lang[] = [
]; ];
export const LANGUAGE_COOKIE_NAME = "NEXT_LOCALE"; export const LANGUAGE_COOKIE_NAME = "NEXT_LOCALE";
export const LANGUAGE_HEADER_NAME = "accept-language";