LanguageSwitcher.tsx 808 B

123456789101112131415161718192021222324252627282930313233343536
  1. "use client";
  2. import { useMemo } from "react";
  3. import { useI18n } from "@/lib/i18n/provider";
  4. import type { Lang } from "@/lib/i18n/dict";
  5. import { Button } from "@/components/ui/button";
  6. export function LanguageSwitcher({
  7. variant = "ghost",
  8. size = "sm",
  9. className = "",
  10. }: {
  11. variant?: "ghost" | "outline" | "default";
  12. size?: "sm" | "icon" | "default";
  13. className?: string;
  14. }) {
  15. const { lang, setLang } = useI18n();
  16. const next = useMemo<Lang>(() => (lang === "zh-CN" ? "en" : "zh-CN"), [lang]);
  17. const label = lang === "zh-CN" ? "EN" : "中文";
  18. return (
  19. <Button
  20. type="button"
  21. variant={variant}
  22. size={size}
  23. onClick={() => setLang(next)}
  24. className={className}
  25. aria-label="Language"
  26. title="Language"
  27. >
  28. {label}
  29. </Button>
  30. );
  31. }