47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
"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";
|
|
|
|
export function LanguageSwitcher() {
|
|
const router = useRouter();
|
|
const pathname = usePathname();
|
|
|
|
const switchLanguage = (lang: string) => {
|
|
// Срезаем текущий двухбуквенный префикс локали из пути и подставляем новый —
|
|
// так переключение языка сохраняет текущую страницу (/ru/blog -> /en/blog).
|
|
const currentPath = pathname.replace(/^\/[a-z]{2}/, "");
|
|
router.push(`/${lang}${currentPath === "" ? "/" : currentPath}`);
|
|
};
|
|
|
|
return (
|
|
<DropdownMenu>
|
|
<DropdownMenuTrigger asChild>
|
|
<Button
|
|
variant="outline"
|
|
size="icon"
|
|
className="rounded-full border-border bg-background/50 backdrop-blur-md"
|
|
>
|
|
<Globe className="h-[1.2rem] w-[1.2rem]" />
|
|
<span className="sr-only">Switch language</span>
|
|
</Button>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent align="end">
|
|
<DropdownMenuItem onClick={() => switchLanguage("en")}>
|
|
English
|
|
</DropdownMenuItem>
|
|
<DropdownMenuItem onClick={() => switchLanguage("ru")}>
|
|
Русский
|
|
</DropdownMenuItem>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
);
|
|
}
|