import { CookieNames } from "$lib/configuration"; import { detectLocale, i18n, isLocale, locales } from '$lib/i18n/i18n-util' import type { Handle, RequestEvent } from '@sveltejs/kit' import { initAcceptLanguageHeaderDetector } from 'typesafe-i18n/detectors' import type { Locales } from "$lib/i18n/i18n-types"; import { loadAllLocales } from "$lib/i18n/i18n-util.sync"; loadAllLocales() const L = i18n() export const handle: Handle = async ({ event, resolve }) => { const localeCookie = event.cookies.get(CookieNames.locale); const preferredLocale = getPreferredLocale(event); let finalLocale = localeCookie ?? preferredLocale; let forceCookieSet = false; console.log("Handling locale", { locales, localeCookie, preferredLocale, finalLocale }); if (!isLocale(finalLocale)) { console.log(finalLocale + " is not a valid locale or it does not exist, switching to default: en"); finalLocale = "en"; forceCookieSet = true; } if (!localeCookie || forceCookieSet) { // Set a locale cookie event.cookies.set(CookieNames.locale, finalLocale, { sameSite: "strict", path: "/", httpOnly: false }); } event.locals.locale = finalLocale as Locales; event.locals.LL = L[finalLocale as Locales]; return resolve(event, { transformPageChunk: ({ html }) => html.replace('%lang%', finalLocale) }); } function getPreferredLocale(event: RequestEvent) { const acceptLanguageDetector = initAcceptLanguageHeaderDetector(event.request); return detectLocale(acceptLanguageDetector); }