jan/web-app/src/containers/LanguageSwitcher.tsx
2025-08-21 00:18:23 +02:00

60 lines
1.8 KiB
TypeScript

import { useGeneralSetting } from '@/hooks/useGeneralSetting'
import { useAppTranslation } from '@/i18n'
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'
import { cn } from '@/lib/utils'
const LANGUAGES = [
{ value: 'en', label: 'English' },
{ value: 'id', label: 'Bahasa' },
{ value: 'pl', label: 'Polski' },
{ value: 'vn', label: 'Tiếng Việt' },
{ value: 'zh-CN', label: '简体中文' },
{ value: 'zh-TW', label: '繁體中文' },
{ value: 'de-DE', label: 'Deutsch' },
]
export default function LanguageSwitcher() {
const { i18n, t } = useAppTranslation()
const { setCurrentLanguage, currentLanguage } = useGeneralSetting()
const changeLanguage = (lng: string) => {
i18n.changeLanguage(lng)
setCurrentLanguage(lng as Language)
}
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<span
title={t('common:changeLanguage')}
className="flex cursor-pointer items-center gap-1 px-2 py-1 rounded-sm bg-main-view-fg/15 text-sm outline-none text-main-view-fg font-medium"
>
{LANGUAGES.find(
(lang: { value: string; label: string }) =>
lang.value === currentLanguage
)?.label || t('common:english')}
</span>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-24">
{LANGUAGES.map((lang) => (
<DropdownMenuItem
key={lang.value}
className={cn(
'cursor-pointer my-0.5',
currentLanguage === lang.value && 'bg-main-view-fg/5'
)}
onClick={() => changeLanguage(lang.value)}
>
{lang.label}
</DropdownMenuItem>
))}
</DropdownMenuContent>
</DropdownMenu>
)
}