"use client"; import { usePathname } from "next/navigation"; import { cn } from "@/lib/utils"; import { counterpart, langSwitch, otherLang, type Lang } from "@/lib/i18n"; import { TransitionLink } from "@/components/motion/TransitionLink"; export interface LangSwitchProps { lang: Lang; className?: string; /** * `pair` zeigt beide Sprachen nebeneinander (Platz ab 1024 px). * `compact` zeigt nur die andere Sprache als einen Knopf – ein Tipp, ein Wechsel. * Auf dem Telefon ist das die einzige Form, die neben Wortmarke und „Menü“ passt. */ variant?: "pair" | "compact"; } const BASE = "inline-flex items-center gap-1.5 font-mono text-[11px] uppercase tracking-[0.14em] transition-colors duration-300"; /** * Sprachumschalter im Kopf. Steht an der Stelle, an der vorher „Kontakt“ stand. * * Zielt auf das Gegenstück derselben Seite (`counterpart()`), nicht pauschal auf die * Startseite. * * Zur Flagge: Eine Flagge steht für ein Land, nicht für eine Sprache – deshalb steht * neben ihr immer das Sprachkürzel, und der zugängliche Name nennt die Sprache * ausgeschrieben. Wer die Flaggen weglassen will, entfernt hier zwei Zeilen. */ export function LangSwitch({ lang, className, variant = "pair" }: LangSwitchProps) { const pathname = usePathname() ?? "/"; const other = otherLang(lang); const href = counterpart(pathname, other); /* Kompakt: Die aktive Sprache steht nicht da – sie steht ja im Dokument. Gezeigt wird, wohin es geht. Die negativen Ränder heben das Tippziel auf 54 × 42 px, ohne die Grundlinie oder den Abstand zum Nachbarn zu verschieben (WCAG 2.5.8: 24 × 24 px Minimum, 44 × 44 px ist die Empfehlung – die Breite von 38 px lag darunter). */ if (variant === "compact") { return ( {langSwitch[other].short} ); } return (
{langSwitch[lang].short}
); } /** 16 × 11 px, randlos, damit die Fahne neben 11-px-Versalien nicht dominiert. */ function Flag({ lang }: { lang: Lang }) { const common = { width: 16, height: 11, viewBox: "0 0 16 11", "aria-hidden": true as const, className: "shrink-0" }; if (lang === "de") { return ( ); } return ( ); } export default LangSwitch;