Unverified Commit 4a0884ce authored by John's avatar John Committed by GitHub
Browse files

Merge branch 'dmMaze:master' into master

parents a7254645 c17419bf
Loading
Loading
Loading
Loading
+77 −2
Original line number Diff line number Diff line
@@ -10,7 +10,8 @@ from ..moduleparamparser import ModuleParamParser
from utils.registry import Registry
from utils.io_utils import text_is_empty
from .hooks import chs2cht

import random
import hashlib
TRANSLATORS = Registry('translators')
register_translator = TRANSLATORS.register_module
PROXY = urllib.request.getproxies()
@@ -254,6 +255,7 @@ class GoogleTranslator(TranslatorBase):
        self.googletrans._url_params['tl'] = self.lang_map[self.lang_target]
        self.googletrans.__base_url = self.setup_params['url']['select']
        translations = self.googletrans.translate(text)

        return translations


@@ -335,6 +337,7 @@ class CaiyunTranslator(TranslatorBase):
            raise MissingTranslatorParams('token')

        direction = self.lang_map[self.lang_source] + '2' + self.lang_map[self.lang_target]

        payload = {
            "source": text,
            "trans_type": direction,
@@ -353,6 +356,78 @@ class CaiyunTranslator(TranslatorBase):
        return translations


@register_translator('baidu')
class BaiduTranslator(TranslatorBase):
    concate_text = False
    cht_require_convert = True
    setup_params: Dict = {
        'token': '',
        'appId': '',
        'delay': '0.0'
    }
    @staticmethod
    def get_json(from_lang, to_lang, query_text,BAIDU_APP_ID,BAIDU_SECRET_KEY):
        salt = random.randint(32768, 65536)
        sign = BAIDU_APP_ID + query_text + str(salt) + BAIDU_SECRET_KEY
        sign = sign.encode('utf-8')
        m1 = hashlib.md5()
        m1.update(sign)
        sign = m1.hexdigest()
        payload = {
            "appid": BAIDU_APP_ID,
            "q": query_text,
            "from": from_lang,
            "to": to_lang,
            "salt":str(salt),
            "sign":sign
        }
        return payload

    def _setup_translator(self):
        self.lang_map['简体中文'] = 'zh'
        self.lang_map['繁體中文'] = 'cht'
        self.lang_map['日本語'] = 'jp'
        self.lang_map['English'] = 'en'  
    
    def _translate(self, text: Union[str, List]) -> Union[str, List]:

        n_queries = []
        query_split_sizes = []
        for query in text:
            batch = query.split('\n')
            query_split_sizes.append(len(batch))
            n_queries.extend(batch)
        token = self.setup_params['token']
        appId = self.setup_params['appId']
        if token == '' or token is None:
            raise MissingTranslatorParams('token')
        if appId == '' or appId is None:
            raise MissingTranslatorParams('appId')
        
        payload = self.get_json(self.lang_map[self.lang_source], self.lang_map[self.lang_target], '\n'.join(n_queries),appId,token)
        headers = {
            "Content-Type": "application/x-www-form-urlencoded"
        }

        response = requests.request("POST", 'https://fanyi-api.baidu.com/api/trans/vip/translate', data=payload, headers=headers)
        result = json.loads(response.text)
        result_list = []
        if "trans_result" not in result:
            raise MissingTranslatorParams(f'Baidu returned invalid response: {result}\nAre the API keys set correctly?')
        for ret in result["trans_result"]:
            for v in ret["dst"].split('\n'):
                result_list.append(v)

        # Join queries that had \n back together
        translations = []
        i = 0
        for size in query_split_sizes:
            translations.append('\n'.join(result_list[i:i+size]))
            i += size

        return translations
    

@register_translator('Deepl')
class DeeplTranslator(TranslatorBase):

+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ unidic_lite
tqdm
opencv-python==4.5.*
PyQt6>=6.4.2   #PyQt5>=5.15.9
pywin32
shapely
pyclipper
einops