feat: Add Microsoft Translator as free service provider

- Added Microsoft Translator (Free) as priority 5 provider
- Updated provider priority order: GLM-4 Flash > Silicon Flow > Baidu > Youdao > Microsoft > Google > Libre > MyMemory > DeepL > Azure
- Added comprehensive language code mapping for Microsoft Translator API
- Enhanced free translation options with Microsoft's robust service
- Updated provider list in UI to include Microsoft Translator
This commit is contained in:
Cyber Dick Lang
2025-10-27 18:03:01 +08:00
parent 1e511bcc06
commit 8db9c45e29
+72 -5
View File
@@ -391,12 +391,77 @@ class YoudaoTranslateProvider(TranslationProvider):
return False, f"Youdao Translate error: {str(e)}"
class MicrosoftTranslateProvider(TranslationProvider):
"""Microsoft Translator (Free) - Microsoft translation service"""
def __init__(self):
super().__init__("Microsoft Translator (Free)", True, False)
self.priority = 5
self.base_url = "https://api.cognitive.microsofttranslator.com/translate"
def translate(self, text: str, target_lang: str, source_lang: str = "auto", api_key: str = None) -> Tuple[bool, str]:
try:
print(f" 🔗 Connecting to Microsoft Translator API...")
# Microsoft Translator language code mapping
lang_map = {
"auto": "auto", "en": "en", "zh": "zh-Hans", "ja": "ja", "ko": "ko",
"fr": "fr", "de": "de", "es": "es", "it": "it", "pt": "pt",
"ru": "ru", "ar": "ar", "hi": "hi", "th": "th", "vi": "vi",
"tr": "tr", "pl": "pl", "nl": "nl", "sv": "sv", "da": "da",
"no": "no", "fi": "fi", "cs": "cs", "hu": "hu", "ro": "ro",
"bg": "bg", "hr": "hr", "sk": "sk", "sl": "sl", "et": "et",
"lv": "lv", "lt": "lt", "el": "el", "he": "he", "fa": "fa",
"ur": "ur", "bn": "bn", "ta": "ta", "te": "te", "ml": "ml",
"kn": "kn", "gu": "gu", "pa": "pa", "or": "or", "as": "as",
"ne": "ne", "si": "si", "my": "my", "km": "km", "lo": "lo",
"ka": "ka", "am": "am", "sw": "sw", "zu": "zu", "af": "af",
"sq": "sq", "eu": "eu", "be": "be", "bs": "bs", "ca": "ca",
"cy": "cy", "eo": "eo", "gl": "gl", "is": "is", "mk": "mk",
"mt": "mt", "sr": "sr", "uk": "uk", "uz": "uz"
}
ms_source = lang_map.get(source_lang, "auto")
ms_target = lang_map.get(target_lang, "en")
headers = {
'Content-Type': 'application/json'
}
params = {
'api-version': '3.0',
'to': ms_target
}
if ms_source != "auto":
params['from'] = ms_source
body = [{'text': text}]
print(f" 📤 Sending request: {source_lang} -> {target_lang}")
response = requests.post(self.base_url, params=params, headers=headers, json=body, timeout=10)
print(f" 📥 Response status: {response.status_code}")
response.raise_for_status()
result = response.json()
if result and len(result) > 0 and 'translations' in result[0]:
translated_text = result[0]['translations'][0]['text']
print(f" ✅ Microsoft Translator success: {len(translated_text)} characters")
return True, translated_text
print(f" ❌ Microsoft Translator: Invalid response format")
return False, "Translation failed"
except Exception as e:
print(f" ❌ Microsoft Translator error: {str(e)}")
return False, f"Microsoft Translator error: {str(e)}"
class GoogleTranslateProvider(TranslationProvider):
"""Google Translate (Free) - Using web interface"""
def __init__(self):
super().__init__("Google Translate (Free)", True, False)
self.priority = 5
self.priority = 6
self.base_url = "https://translate.googleapis.com/translate_a/single"
def translate(self, text: str, target_lang: str, source_lang: str = "auto", api_key: str = None) -> Tuple[bool, str]:
@@ -434,7 +499,7 @@ class LibreTranslateProvider(TranslationProvider):
def __init__(self):
super().__init__("LibreTranslate (Free)", True, False)
self.priority = 6
self.priority = 7
self.base_url = "https://libretranslate.de/translate"
def translate(self, text: str, target_lang: str, source_lang: str = "auto", api_key: str = None) -> Tuple[bool, str]:
@@ -471,7 +536,7 @@ class MyMemoryProvider(TranslationProvider):
def __init__(self):
super().__init__("MyMemory (Free)", True, False)
self.priority = 7
self.priority = 8
self.base_url = "https://api.mymemory.translated.net/get"
def translate(self, text: str, target_lang: str, source_lang: str = "auto", api_key: str = None) -> Tuple[bool, str]:
@@ -506,7 +571,7 @@ class DeepLProvider(TranslationProvider):
def __init__(self):
super().__init__("DeepL (Paid)", False, True)
self.priority = 8
self.priority = 9
self.base_url = "https://api-free.deepl.com/v2/translate"
def translate(self, text: str, target_lang: str, source_lang: str = "auto", api_key: str = None) -> Tuple[bool, str]:
@@ -548,7 +613,7 @@ class AzureTranslatorProvider(TranslationProvider):
def __init__(self):
super().__init__("Azure Translator (Paid)", False, True)
self.priority = 9
self.priority = 10
self.base_url = "https://api.cognitive.microsofttranslator.com/translate"
def translate(self, text: str, target_lang: str, source_lang: str = "auto", api_key: str = None) -> Tuple[bool, str]:
@@ -600,6 +665,7 @@ class TextTranslator_UTK:
"Silicon Flow (Free)": SiliconFlowProvider(),
"Baidu Translate (Free)": BaiduTranslateProvider(),
"Youdao Translate (Free)": YoudaoTranslateProvider(),
"Microsoft Translator (Free)": MicrosoftTranslateProvider(),
"Google Translate (Free)": GoogleTranslateProvider(),
"LibreTranslate (Free)": LibreTranslateProvider(),
"MyMemory (Free)": MyMemoryProvider(),
@@ -650,6 +716,7 @@ class TextTranslator_UTK:
"Silicon Flow (Free)",
"Baidu Translate (Free)",
"Youdao Translate (Free)",
"Microsoft Translator (Free)",
"Google Translate (Free)",
"LibreTranslate (Free)",
"MyMemory (Free)",