File size: 6,474 Bytes
8a469fd |
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 |
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), '')
|