Spaces:
Sleeping
Sleeping
| 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()] |