"use client"; import { useState, useEffect, useRef, useCallback } from "react"; import { Languages } from "lucide-react"; import { cn } from "@/utils/cn"; const languages = [ { code: "en-US", label: "English" }, { code: "zh-CN", label: "中文" }, { code: "ja-JP", label: "日本語" }, { code: "ko-KR", label: "한국어" }, { code: "de-DE", label: "Deutsch" }, { code: "fr-FR", label: "Français" }, { code: "it-IT", label: "Italiano" }, { code: "ug-CN", label: "ئۇيغۇرچە" }, ]; export function LanguageSettings() { const [isOpen, setIsOpen] = useState(false); const [pendingLocale, setPendingLocale] = useState(null); const menuRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setIsOpen(false); } }; if (isOpen) { document.addEventListener("mousedown", handleClickOutside); } return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, [isOpen]); useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === "Escape") setIsOpen(false); }; if (isOpen) { document.addEventListener("keydown", handleEscape); return () => document.removeEventListener("keydown", handleEscape); } }, [isOpen]); useEffect(() => { if (pendingLocale) { document.cookie = `locale=${pendingLocale}; path=/`; window.location.reload(); } }, [pendingLocale]); const setLocale = useCallback((locale: string) => { setPendingLocale(locale); }, []); return (
{languages.map((lang) => ( ))}
{isOpen && (
setIsOpen(false)} aria-hidden="true" /> )}
); }