mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-04-22 19:27:56 +00:00
c48ded7ff2
Restructured the project to support multiple frontend applications: - Move web app to web/ directory - Create pezkuwi-sdk-ui/ for Polkadot SDK clone (planned) - Create mobile/ directory for mobile app development - Add shared/ directory with common utilities, types, and blockchain code - Update README.md with comprehensive documentation - Remove obsolete DKSweb/ directory This monorepo structure enables better code sharing and organized development across web, mobile, and SDK UI projects.
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { useTranslation } from 'react-i18next';
|
|
import { Button } from '@/components/ui/button';
|
|
import {
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuItem,
|
|
DropdownMenuTrigger,
|
|
} from '@/components/ui/dropdown-menu';
|
|
import { Globe } from 'lucide-react';
|
|
import { languages } from '@/i18n/config';
|
|
import { useEffect } from 'react';
|
|
|
|
export function LanguageSwitcher() {
|
|
const { i18n } = useTranslation();
|
|
|
|
useEffect(() => {
|
|
// Update document direction based on language
|
|
const currentLang = languages[i18n.language as keyof typeof languages];
|
|
if (currentLang) {
|
|
document.documentElement.dir = currentLang.dir;
|
|
document.documentElement.lang = i18n.language;
|
|
}
|
|
}, [i18n.language]);
|
|
|
|
const changeLanguage = (lng: string) => {
|
|
i18n.changeLanguage(lng);
|
|
const lang = languages[lng as keyof typeof languages];
|
|
if (lang) {
|
|
document.documentElement.dir = lang.dir;
|
|
document.documentElement.lang = lng;
|
|
}
|
|
};
|
|
|
|
const currentLanguage = languages[i18n.language as keyof typeof languages] || languages.en;
|
|
|
|
return (
|
|
<DropdownMenu>
|
|
<DropdownMenuTrigger asChild>
|
|
<Button variant="ghost" size="sm" className="gap-2">
|
|
<Globe className="h-4 w-4" />
|
|
<span className="hidden sm:inline">{currentLanguage.name}</span>
|
|
<span className="text-lg">{currentLanguage.flag}</span>
|
|
</Button>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent align="end" className="w-48">
|
|
{Object.entries(languages).map(([code, lang]) => (
|
|
<DropdownMenuItem
|
|
key={code}
|
|
onClick={() => changeLanguage(code)}
|
|
className={`cursor-pointer ${i18n.language === code ? 'bg-yellow-100 dark:bg-yellow-900' : ''}`}
|
|
>
|
|
<span className="text-lg mr-2">{lang.flag}</span>
|
|
<span>{lang.name}</span>
|
|
</DropdownMenuItem>
|
|
))}
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
);
|
|
} |