from googletrans import Translator, LANGUAGES import asyncio from typing import Dict, List, Optional class TranslationService: def __init__(self): self.translator = Translator() self.languages = LANGUAGES def get_language_name(self, code: str) -> str: return self.languages.get(code, code) async def translate(self, text: str, dest: str = 'ru', src: str = 'auto') -> Dict: try: loop = asyncio.get_event_loop() result = await loop.run_in_executor( None, lambda: self.translator.translate(text, src=src, dest=dest) ) return { 'original_text': result.origin, 'translated_text': result.text, 'source_lang': result.src, 'target_lang': dest, 'source_lang_name': self.get_language_name(result.src), 'target_lang_name': self.get_language_name(dest), 'pronunciation': result.pronunciation } except Exception as e: raise Exception(f"Translation error: {str(e)}") async def translate_batch(self, texts: List[str], dest: str = 'ru', src: str = 'auto') -> List[Dict]: tasks = [self.translate(text, dest, src) for text in texts] return await asyncio.gather(*tasks) def get_supported_languages(self) -> List[Dict]: return [{'code': code, 'name': name} for code, name in self.languages.items()]