"use client" // Språkbryter (ADR-094) -- setter locale-cookien direkte (samme cookie // i18n/request.ts leser) og PATCHer /profile sin preferred_locale når // innlogget, slik at valget følger brukeren til neste enhet/økt også // (ikke bare denne nettleseren). cookie alene er nok til at selve // visningen endres umiddelbart -- PATCH-en er en "husk til neste gang"- // bonus, feiler stille (utlogget bruker har ingenting å PATCHe mot). import { useState } from "react" import { useRouter } from "next/navigation" import { useLocale, useTranslations } from "next-intl" import { cn } from "@/lib/utils" import { LOCALE_COOKIE, SUPPORTED_LOCALES, type Locale } from "@/lib/locale" export function LanguageSwitcher() { const locale = useLocale() const t = useTranslations("common.languageSwitcher") const router = useRouter() const [pending, setPending] = useState(false) async function setLocale(next: Locale) { if (next === locale || pending) return setPending(true) document.cookie = `${LOCALE_COOKIE}=${next}; path=/; max-age=31536000; SameSite=Lax` try { await fetch("/profile", { method: "PATCH", headers: { "Content-Type": "application/json" }, credentials: "include", body: JSON.stringify({ preferred_locale: next }), }) } catch { // Stille -- cookien er allerede satt, selve visningen fungerer uansett. } router.refresh() setPending(false) } const labels: Record = { nb: t("norwegian"), en: t("english") } return (
{t("label")}
{SUPPORTED_LOCALES.map((code) => { const selected = code === locale return ( ) })}
) }