"use client"; import { usePathname, useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Globe } from "lucide-react"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { locales, LOCALE_LABELS } from "@/lib/locales"; export function LanguageSwitcher() { const router = useRouter(); const pathname = usePathname(); const switchLanguage = (lang: string) => { // Срезаем текущий префикс локали из пути и подставляем новый — так // переключение языка сохраняет текущую страницу (/ru/blog -> /en/blog). // Раньше резался только 2-буквенный код ([a-z]{2}), из-за чего "zh-CN" // никогда не совпадал и путь просто задваивался ("/zh-CN/zh-CN/..."). const currentLocale = locales.find( (l) => pathname === `/${l}` || pathname.startsWith(`/${l}/`), ); const currentPath = currentLocale ? pathname.slice(currentLocale.length + 1) : pathname; router.push(`/${lang}${currentPath === "" ? "/" : currentPath}`); }; return ( {locales.map((lang) => ( switchLanguage(lang)}> {LOCALE_LABELS[lang]} ))} ); }