Loading ballontranslator/dl/translators/__init__.py +77 −2 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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 Loading Loading @@ -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, Loading @@ -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): Loading requirements.txt +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ unidic_lite tqdm opencv-python==4.5.* PyQt6>=6.4.2 #PyQt5>=5.15.9 pywin32 shapely pyclipper einops Loading Loading
ballontranslator/dl/translators/__init__.py +77 −2 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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 Loading Loading @@ -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, Loading @@ -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): Loading
requirements.txt +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ unidic_lite tqdm opencv-python==4.5.* PyQt6>=6.4.2 #PyQt5>=5.15.9 pywin32 shapely pyclipper einops Loading