Added translation API: MyMemory

增加翻译API:MyMemory
This commit is contained in:
Physton
2023-06-22 17:17:01 +08:00
parent f820309fad
commit 43aea0cedc
4 changed files with 388 additions and 51 deletions

View File

@@ -13,6 +13,7 @@ from scripts.physton_prompt.translator.tencent_translator import TencentTranslat
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
caches = {}
@@ -95,6 +96,8 @@ def translate(text, from_lang, to_lang, api, api_config=None):
translator = YoudaoTranslator()
elif api == 'tencent':
translator = TencentTranslator()
elif api == 'myMemory_free' or api == 'myMemory':
translator = MyMemoryTranslator()
elif 'type' in find and find['type'] == 'translators':
translator = TranslatorsTranslator(api)
translator.set_translator(find['translator'])

View File

@@ -0,0 +1,37 @@
from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import uuid
import requests
from scripts.physton_prompt.get_lang import get_lang
class MyMemoryTranslator(BaseTranslator):
def __init__(self):
super().__init__('myMemory_free')
def translate(self, text):
if not text:
return ''
url = 'https://api.mymemory.translated.net/get'
api_key = self.api_config.get('api_key', '')
params = {
'q': text,
'langpair': f'{self.from_lang}|{self.to_lang}',
}
if api_key:
params['key'] = api_key
response = requests.get(url, params=params)
if response.status_code != 200:
raise Exception(get_lang('request_error', {'0': 'myMemory'}))
if not response.text:
raise Exception(get_lang('response_is_empty', {'0': 'myMemory'}))
result = response.json()
if 'responseStatus' not in result:
raise Exception(get_lang('no_response_from', {'0': 'myMemory'}))
if result['responseStatus'] != 200:
raise Exception(result['responseDetails'])
if 'responseData' not in result:
raise Exception(get_lang('no_response_from', {'0': 'myMemory'}))
if 'translatedText' not in result['responseData']:
raise Exception(get_lang('no_response_from', {'0': 'myMemory'}))
return result['responseData']['translatedText']