import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import BaseModal from '~/components/atoms/BaseModal'; import BaseLanguageSelector, { LanguageItem } from '~/components/molecules/BaseLanguageSelector'; import { ALL_TRANSLATION_LANGUAGES, isOfficiallySupported } from '~/config/translationLanguages'; interface TranslateLanguageModalProps { isVisible: boolean; onClose: () => void; onConfirm: (targetLanguage: string) => Promise; } /** * Modal zur Auswahl der Zielsprache für die Memo-Übersetzung * Unterstützt alle Gemini 2.0 Flash Sprachen (38 offiziell + zusätzliche) */ const TranslateLanguageModal: React.FC = ({ isVisible, onClose, onConfirm, }) => { const { t } = useTranslation(); const [selectedLanguage, setSelectedLanguage] = useState(null); const [isTranslating, setIsTranslating] = useState(false); // Convert translation languages to BaseLanguageSelector format const languagesWithMetadata: Record = Object.entries( ALL_TRANSLATION_LANGUAGES ).reduce( (acc, [code, lang]) => { acc[code] = { code, ...lang, isExperimental: !isOfficiallySupported(code), }; return acc; }, {} as Record ); // Handler für die Auswahl einer Sprache (nur State aktualisieren) const handleLanguageSelect = (languages: string[]) => { if (languages.length === 0) { setSelectedLanguage(null); return; } setSelectedLanguage(languages[0]); // Single selection mode }; // Handler für die Bestätigung der Übersetzung const handleConfirm = async () => { if (!selectedLanguage) return; setIsTranslating(true); try { await onConfirm(selectedLanguage); } finally { setIsTranslating(false); } }; // Handler für das Schließen des Modals const handleClose = () => { setSelectedLanguage(null); setIsTranslating(false); onClose(); }; return ( ); }; export default TranslateLanguageModal;