Spaces:
Build error
Build error
File size: 7,598 Bytes
33a2aaf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
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') |