"use client" // i18n (ADR-094) -- monteres én gang i rot-layouten. Selve locale- // oppløsningen på serveren (i18n/request.ts) leser KUN en cookie, uten // noen fetch-avhengighet (rask, synkron). Denne komponenten er stedet // der brukerens preferred_locale (allerede på backend siden ADR-015, // aldri lest av frontend før nå) faktisk får virkning: FØRSTE gang en // innlogget bruker besøker appen uten at cookien er satt ennå, hentes // /auth/me og cookien settes deretter -- kun én gang, ikke ved hvert // besøk (cookien vinner etter det, selv om brukeren senere endrer // preferred_locale et annet sted, inntil de bruker språkbryteren igjen). import { useEffect } from "react" import { useRouter } from "next/navigation" import { DEFAULT_LOCALE, isLocale, LOCALE_COOKIE } from "@/lib/locale" function hasLocaleCookie(): boolean { return document.cookie.split("; ").some((c) => c.startsWith(`${LOCALE_COOKIE}=`)) } export function LocaleBootstrap() { const router = useRouter() useEffect(() => { if (hasLocaleCookie()) return let cancelled = false fetch("/auth/me", { credentials: "include" }) .then((res) => (res.ok ? res.json() : null)) .then((me: { preferred_locale?: string } | null) => { if (cancelled || !me) return const locale = isLocale(me.preferred_locale) ? me.preferred_locale : DEFAULT_LOCALE if (locale === DEFAULT_LOCALE) return // allerede det serveren rendret med document.cookie = `${LOCALE_COOKIE}=${locale}; path=/; max-age=31536000; SameSite=Lax` router.refresh() }) .catch(() => { // Stille -- utlogget/nettverksfeil betyr bare at nb-standarden // (allerede rendret) beholdes. }) return () => { cancelled = true } }, [router]) return null }