TriviaVerse_38 / utils /translator.py
RaghavenderReddy's picture
Upload 13 files
33a2aaf verified
from googletrans import Translator as GoogleTranslator
import json
from typing import Optional
class Translator:
"""Handle text translation for multiple languages"""
def __init__(self):
self.translator = GoogleTranslator()
self.supported_languages = {
'en': 'English',
'hi': 'Hindi',
'te': 'Telugu',
'ta': 'Tamil',
'kn': 'Kannada',
'bn': 'Bengali'
}
# Fallback translations for common terms
self.fallback_translations = {
'hi': {
'Question': 'प्रश्न',
'Answer': 'उत्तर',
'Score': 'स्कोर',
'Correct': 'सही',
'Incorrect': 'गलत',
'Next': 'अगला',
'Previous': 'पिछला',
'Submit': 'जमा करें',
'Skip': 'छोड़ें',
'Easy': 'आसान',
'Medium': 'मध्यम',
'Hard': 'कठिन'
},
'te': {
'Question': 'ప్రశ్న',
'Answer': 'సమాధానం',
'Score': 'స్కోర్',
'Correct': 'సరైనది',
'Incorrect': 'తప్పు',
'Next': 'తదుపరి',
'Previous': 'మునుపటి',
'Submit': 'సమర్పించు',
'Skip': 'దాటవేయి',
'Easy': 'సులువు',
'Medium': 'మధ్యమ',
'Hard': 'కష్టం'
},
'ta': {
'Question': 'கேள்வி',
'Answer': 'பதில்',
'Score': 'மதிப்பெண்',
'Correct': 'சரி',
'Incorrect': 'தவறு',
'Next': 'அடுத்து',
'Previous': 'முந்தைய',
'Submit': 'சமர்ப்பிக்கவும்',
'Skip': 'தவிர்க்கவும்',
'Easy': 'எளிதான',
'Medium': 'நடுத்தர',
'Hard': 'கடினமான'
},
'kn': {
'Question': 'ಪ್ರಶ್ನೆ',
'Answer': 'ಉತ್ತರ',
'Score': 'ಅಂಕ',
'Correct': 'ಸರಿ',
'Incorrect': 'ತಪ್ಪು',
'Next': 'ಮುಂದಿನ',
'Previous': 'ಹಿಂದಿನ',
'Submit': 'ಸಲ್ಲಿಸಿ',
'Skip': 'ಬಿಟ್ಟುಬಿಡಿ',
'Easy': 'ಸುಲಭ',
'Medium': 'ಮಧ್ಯಮ',
'Hard': 'ಕಠಿಣ'
},
'bn': {
'Question': 'প্রশ্ন',
'Answer': 'উত্তর',
'Score': 'স্কোর',
'Correct': 'সঠিক',
'Incorrect': 'ভুল',
'Next': 'পরবর্তী',
'Previous': 'পূর্ববর্তী',
'Submit': 'জমা দিন',
'Skip': 'এড়িয়ে যান',
'Easy': 'সহজ',
'Medium': 'মাধ্যম',
'Hard': 'কঠিন'
}
}
def translate_text(self, text: str, target_language: str) -> str:
"""Translate text to target language"""
if not text or target_language == 'en':
return text
try:
# Try Google Translate first
result = self.translator.translate(text, dest=target_language)
return result.text
except Exception as e:
print(f"Translation error: {e}")
# Try fallback translation
return self._fallback_translate(text, target_language)
def _fallback_translate(self, text: str, target_language: str) -> str:
"""Fallback translation using predefined dictionary"""
if target_language not in self.fallback_translations:
return text
translations = self.fallback_translations[target_language]
# Check if the text is a common term
if text in translations:
return translations[text]
# Try to translate word by word for simple phrases
words = text.split()
translated_words = []
for word in words:
if word in translations:
translated_words.append(translations[word])
else:
translated_words.append(word)
return ' '.join(translated_words)
def translate_quiz_content(self, quiz_data: dict, target_language: str) -> dict:
"""Translate entire quiz content"""
if target_language == 'en':
return quiz_data
translated_quiz = quiz_data.copy()
# Translate quiz title if present
if 'title' in translated_quiz:
translated_quiz['title'] = self.translate_text(translated_quiz['title'], target_language)
# Translate questions
if 'questions' in translated_quiz:
for question in translated_quiz['questions']:
question['question'] = self.translate_text(question['question'], target_language)
if 'options' in question:
question['options'] = [
self.translate_text(option, target_language)
for option in question['options']
]
if 'explanation' in question:
question['explanation'] = self.translate_text(question['explanation'], target_language)
return translated_quiz
def get_ui_text(self, key: str, language: str) -> str:
"""Get UI text in specified language"""
if language == 'en':
return key
if language in self.fallback_translations:
return self.fallback_translations[language].get(key, key)
return key
def batch_translate(self, texts: list, target_language: str) -> list:
"""Translate multiple texts at once"""
if target_language == 'en':
return texts
translated_texts = []
for text in texts:
translated_text = self.translate_text(text, target_language)
translated_texts.append(translated_text)
return translated_texts
def detect_language(self, text: str) -> Optional[str]:
"""Detect the language of given text"""
try:
result = self.translator.detect(text)
return result.lang
except Exception as e:
print(f"Language detection error: {e}")
return 'en' # Default to English
def is_supported_language(self, language_code: str) -> bool:
"""Check if language is supported"""
return language_code in self.supported_languages
def get_language_name(self, language_code: str) -> str:
"""Get full language name from code"""
return self.supported_languages.get(language_code, 'Unknown')