translate-api / app /services /translator.py
knighter75's picture
Initial
93f4eb2
Raw
History Blame Contribute Delete
1.51 kB
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()]