FashGate's picture
Upload 204 files
8a469fd
import json
import hashlib
from scripts.physton_prompt.get_lang import get_lang
from scripts.physton_prompt.get_translate_apis import get_translate_apis, unprotected_translate_api_config
from scripts.physton_prompt.translator.alibaba_translator import AlibabaTranslator
from scripts.physton_prompt.translator.amazon_translator import AmazonTranslator
from scripts.physton_prompt.translator.baidu_translator import BaiduTranslator
from scripts.physton_prompt.translator.deepl_translator import DeeplTranslator
from scripts.physton_prompt.translator.google_tanslator import GoogleTranslator
from scripts.physton_prompt.translator.microsoft_translator import MicrosoftTranslator
from scripts.physton_prompt.translator.openai_translator import OpenaiTranslator
from scripts.physton_prompt.translator.tencent_translator import TencentTranslator
from scripts.physton_prompt.translator.translators_translator import TranslatorsTranslator
from scripts.physton_prompt.translator.yandex_translator import YandexTranslator
from scripts.physton_prompt.translator.youdao_translator import YoudaoTranslator
from scripts.physton_prompt.translator.mymemory_translator import MyMemoryTranslator
from scripts.physton_prompt.translator.niutrans_translator import NiutransTranslator
from scripts.physton_prompt.translator.caiyun_translator import CaiyunTranslator
from scripts.physton_prompt.translator.volcengine_translator import VolcengineTranslator
from scripts.physton_prompt.translator.iflytekV1_translator import IflytekV1Translator
from scripts.physton_prompt.translator.iflytekV2_translator import IflytekV2Translator
from scripts.physton_prompt.translator.mbart50_translator import MBart50Translator
caches = {}
def translate(text, from_lang, to_lang, api, api_config=None):
if api_config is None:
api_config = {}
global caches
def _translate_result(success, message, translated_text):
return {
"success": success,
"message": message,
"text": text,
"translated_text": translated_text,
"from_lang": from_lang,
"to_lang": to_lang,
"api": api
}
def _cache_name(text):
cache_name = f'{api}.{from_lang}.{to_lang}.{text}.' + json.dumps(api_config)
cache_name = hashlib.md5(cache_name.encode('utf-8')).hexdigest()
return cache_name
apis = get_translate_apis()
find = False
for group in apis['apis']:
for item in group['children']:
if item['key'] == api:
find = item
break
if not find:
return _translate_result(False, get_lang('translate_api_not_found'), '')
try:
texts = []
if isinstance(text, list):
if len(text) < 1:
return _translate_result(False, get_lang('translate_text_is_empty'), '')
for item in text:
texts.append(None)
for index in range(len(text)):
item = text[index]
item = item.strip()
if item == '':
texts[index] = ''
continue
cache_name = _cache_name(item)
if cache_name in caches:
texts[index] = caches[cache_name]
else:
texts[index] = None
else:
text = text.strip()
if text == '':
return _translate_result(False, get_lang('translate_text_is_empty'), '')
cache_name = _cache_name(text)
if cache_name in caches:
return _translate_result(True, '', caches[cache_name])
if api == 'google':
translator = GoogleTranslator()
elif api == 'microsoft':
translator = MicrosoftTranslator()
elif api == 'openai':
translator = OpenaiTranslator()
elif api == 'amazon':
translator = AmazonTranslator()
elif api == 'deepl':
translator = DeeplTranslator()
elif api == 'baidu':
translator = BaiduTranslator()
elif api == 'alibaba':
translator = AlibabaTranslator()
elif api == 'yandex':
translator = YandexTranslator()
elif api == 'youdao':
translator = YoudaoTranslator()
elif api == 'tencent':
translator = TencentTranslator()
elif api == 'myMemory_free' or api == 'myMemory':
translator = MyMemoryTranslator()
elif api == 'niutrans':
translator = NiutransTranslator()
elif api == 'caiyun':
translator = CaiyunTranslator()
elif api == 'volcengine':
translator = VolcengineTranslator()
elif api == 'iflytekV1':
translator = IflytekV1Translator()
elif api == 'iflytekV2':
translator = IflytekV2Translator()
elif api == 'mbart50':
translator = MBart50Translator()
elif 'type' in find and find['type'] == 'translators':
translator = TranslatorsTranslator(api)
translator.set_translator(find['translator'])
else:
return _translate_result(False, get_lang('translate_api_not_support'), '')
translator.set_from_lang(from_lang)
translator.set_to_lang(to_lang)
translator.set_api_config(unprotected_translate_api_config('translate_api.' + api, api_config))
if isinstance(text, list):
translate_texts = []
translate_indexes = []
for index in range(len(texts)):
item = texts[index]
if item is None:
translate_indexes.append(index)
translate_texts.append(text[index])
if len(translate_texts) < 1:
return _translate_result(True, '', texts)
result = translator.translate_batch(translate_texts)
for index in range(len(result)):
item = result[index]
texts[translate_indexes[index]] = item
caches[_cache_name(translate_texts[index])] = item
return _translate_result(True, '', texts)
else:
translated_text = translator.translate(text).strip()
caches[_cache_name(text)] = translated_text
return _translate_result(True, '', translated_text)
except Exception as e:
# print(e)
return _translate_result(False, str(e), '')