language-switch.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Language, useLanguage } from './language-provider'
  2. import { IconCheck } from '@tabler/icons-react'
  3. import { cn } from '@/lib/utils'
  4. import {
  5. DropdownMenu,
  6. DropdownMenuContent,
  7. DropdownMenuItem,
  8. DropdownMenuTrigger,
  9. } from '@/components/ui/dropdown-menu'
  10. import { Button } from './custom/button'
  11. export default function LanguageSwitch() {
  12. const { language, setLanguage } = useLanguage()
  13. const languageText = new Map<string, string>([
  14. ['en', 'English'],
  15. ['zh', '简体中文'],
  16. ])
  17. const renderDropdownItem = () => {
  18. return Array.from(languageText).map(([key, value]) => (
  19. <DropdownMenuItem key={key} onClick={() => setLanguage(key as Language)}>
  20. {value}{' '}
  21. <IconCheck
  22. size={14}
  23. className={cn('ml-auto', language !== key && 'hidden')}
  24. />
  25. </DropdownMenuItem>
  26. ))
  27. }
  28. return (
  29. <DropdownMenu>
  30. <DropdownMenuTrigger asChild>
  31. <Button
  32. variant='outline'
  33. size='default'
  34. className='scale-95 rounded-full'
  35. >
  36. {languageText.get(language)}
  37. <span className='sr-only'>Toggle language</span>
  38. </Button>
  39. </DropdownMenuTrigger>
  40. <DropdownMenuContent align='end'>
  41. {renderDropdownItem()}
  42. </DropdownMenuContent>
  43. </DropdownMenu>
  44. )
  45. }