"use client"; import { CheckIcon, GlobeIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { ADMIN_API_LOCALES, ADMIN_LOCALE_LABELS, applyAdminUiLocale, getAdminRequestLocale, type AdminApiLocale, } from "@/lib/admin-locale"; import { cn } from "@/lib/utils"; const LOCALE_FLAGS: Record = { zh: "πŸ‡¨πŸ‡³", en: "πŸ‡ΊπŸ‡Έ", ne: "πŸ‡³πŸ‡΅", }; export function AdminLanguageSwitcher() { const { i18n, t } = useTranslation("common"); const [locale, setLocale] = useState(() => typeof document !== "undefined" ? getAdminRequestLocale() : "en", ); useEffect(() => { queueMicrotask(() => { setLocale(getAdminRequestLocale()); }); }, []); async function onSelectLocale(next: AdminApiLocale) { applyAdminUiLocale(next); await i18n.changeLanguage(next); setLocale(next); toast.success( t("language.changed", { language: ADMIN_LOCALE_LABELS[next], }), ); } const currentFlag = LOCALE_FLAGS[locale]; return ( {currentFlag} {t("language.title")} {ADMIN_API_LOCALES.map((code) => { const active = locale === code; return ( void onSelectLocale(code)} > {LOCALE_FLAGS[code]} {ADMIN_LOCALE_LABELS[code]} {active ? : null} ); })} ); }