import React, { Component } from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import Typography from '@mui/material/Typography'; import { withI18n } from '../i18n/withTranslation.js'; const LANGUAGE_FLAG_EMOJIS = { ar: '🇪🇬', bg: '🇧🇬', cs: '🇨🇿', de: '🇩🇪', el: '🇬🇷', en: '🇺🇸', es: '🇪🇸', fr: '🇫🇷', hr: '🇭🇷', hu: '🇭🇺', it: '🇮🇹', pl: '🇵🇱', ro: '🇷🇴', ru: '🇷🇺', sk: '🇸🇰', sl: '🇸🇮', sq: '🇦🇱', sr: '🇷🇸', sv: '🇸🇪', tr: '🇹🇷', uk: '🇺🇦', zh: '🇨🇳' }; class LanguageSwitcher extends Component { constructor(props) { super(props); this.state = { anchorEl: null }; } handleClick = (event) => { this.setState({ anchorEl: event.currentTarget }); }; handleClose = () => { this.setState({ anchorEl: null }); }; handleLanguageChange = async (language) => { const { languageContext } = this.props; if (languageContext) { try { await languageContext.changeLanguage(language); } catch (error) { console.error('Failed to change language:', error); } } this.handleClose(); }; getLanguageFlag = (lang) => { return ( {LANGUAGE_FLAG_EMOJIS[lang] || this.getLanguageLabel(lang)} ); }; getLanguageLabel = (lang) => { const labels = { 'ar': 'EG', 'bg': 'BG', 'cs': 'CZ', 'de': 'DE', 'el': 'GR', 'en': 'US', 'es': 'ES', 'fr': 'FR', 'hr': 'HR', 'hu': 'HU', 'it': 'IT', 'pl': 'PL', 'ro': 'RO', 'ru': 'RU', 'sk': 'SK', 'sl': 'SI', 'sq': 'AL', 'sr': 'RS', 'sv': 'SE', 'tr': 'TR', 'uk': 'UA', 'zh': 'CN' }; return labels[lang] || lang.toUpperCase(); }; getLanguageName = (lang) => { const names = { 'ar': 'العربية', 'bg': 'Български', 'cs': 'Čeština', 'de': 'Deutsch', 'el': 'Ελληνικά', 'en': 'English', 'es': 'Español', 'fr': 'Français', 'hr': 'Hrvatski', 'hu': 'Magyar', 'it': 'Italiano', 'pl': 'Polski', 'ro': 'Română', 'ru': 'Русский', 'sk': 'Slovenčina', 'sl': 'Slovenščina', 'sq': 'Shqip', 'sr': 'Српски', 'sv': 'Svenska', 'tr': 'Türkçe', 'uk': 'Українська', 'zh': '中文' }; return names[lang] || lang; }; render() { const { languageContext } = this.props; const { anchorEl } = this.state; if (!languageContext) { return null; } const { currentLanguage, allLanguages } = languageContext; const open = Boolean(anchorEl); return ( {allLanguages.map((language) => { return ( this.handleLanguageChange(language)} selected={language === currentLanguage} sx={{ minWidth: 160, display: 'flex', justifyContent: 'space-between', gap: 2 }} > {this.getLanguageFlag(language)} {this.getLanguageName(language)} {this.getLanguageLabel(language)} ); })} ); } } export default withI18n()(LanguageSwitcher);