diff --git a/config.py b/config.py index 44529b5a..93e70c2d 100644 --- a/config.py +++ b/config.py @@ -150,13 +150,22 @@ class Config: self._TARGET_LANGUAGE = value @property - def CHOICE_TRANSLATOR(self): - return self._CHOICE_TRANSLATOR + def CHOICE_INPUT_TRANSLATOR(self): + return self._CHOICE_INPUT_TRANSLATOR - @CHOICE_TRANSLATOR.setter - def CHOICE_TRANSLATOR(self, value): + @CHOICE_INPUT_TRANSLATOR.setter + def CHOICE_INPUT_TRANSLATOR(self, value): if value in translatorEngine: - self._CHOICE_TRANSLATOR = value + self._CHOICE_INPUT_TRANSLATOR= value + + @property + def CHOICE_OUTPUT_TRANSLATOR(self): + return self._CHOICE_OUTPUT_TRANSLATOR + + @CHOICE_OUTPUT_TRANSLATOR.setter + def CHOICE_OUTPUT_TRANSLATOR(self, value): + if value in translatorEngine: + self._CHOICE_OUTPUT_TRANSLATOR = value # Save Json Data ## Main Window @@ -171,6 +180,28 @@ class Config: self._SELECTED_TAB_NO = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property + @json_serializable('SELECTED_TAB_YOUR_TRANSLATOR_ENGINES') + def SELECTED_TAB_YOUR_TRANSLATOR_ENGINES(self): + return self._SELECTED_TAB_YOUR_TRANSLATOR_ENGINES + + @SELECTED_TAB_YOUR_TRANSLATOR_ENGINES.setter + def SELECTED_TAB_YOUR_TRANSLATOR_ENGINES(self, value): + if isinstance(value, dict): + self._SELECTED_TAB_YOUR_TRANSLATOR_ENGINES = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + + @property + @json_serializable('SELECTED_TAB_TARGET_TRANSLATOR_ENGINES') + def SELECTED_TAB_TARGET_TRANSLATOR_ENGINES(self): + return self._SELECTED_TAB_TARGET_TRANSLATOR_ENGINES + + @SELECTED_TAB_TARGET_TRANSLATOR_ENGINES.setter + def SELECTED_TAB_TARGET_TRANSLATOR_ENGINES(self, value): + if isinstance(value, dict): + self._SELECTED_TAB_TARGET_TRANSLATOR_ENGINES = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property @json_serializable('SELECTED_TAB_YOUR_LANGUAGES') def SELECTED_TAB_YOUR_LANGUAGES(self): @@ -562,7 +593,8 @@ class Config: self._ENABLE_TRANSCRIPTION_SEND = False self._ENABLE_TRANSCRIPTION_RECEIVE = False self._ENABLE_FOREGROUND = False - self._CHOICE_TRANSLATOR = translatorEngine[0] + self._CHOICE_INPUT_TRANSLATOR = translatorEngine[0] + self._CHOICE_OUTPUT_TRANSLATOR = translatorEngine[0] self._SOURCE_LANGUAGE = "Japanese" self._SOURCE_COUNTRY = "Japan" self._TARGET_LANGUAGE = "English" @@ -571,6 +603,16 @@ class Config: # Save Json Data ## Main Window self._SELECTED_TAB_NO = "1" + self._SELECTED_TAB_YOUR_TRANSLATOR_ENGINES = { + "1":translatorEngine[0], + "2":translatorEngine[0], + "3":translatorEngine[0], + } + self._SELECTED_TAB_TARGET_TRANSLATOR_ENGINES = { + "1":translatorEngine[0], + "2":translatorEngine[0], + "3":translatorEngine[0], + } self._SELECTED_TAB_YOUR_LANGUAGES = { "1":"Japanese\n(Japan)", "2":"Japanese\n(Japan)", diff --git a/controller.py b/controller.py index e6352411..fceebc2c 100644 --- a/controller.py +++ b/controller.py @@ -209,6 +209,12 @@ def messageBoxFocusOut(e): model.oscStopSendTyping() # func select languages +def initSetTranslateEngine(): + engine = config.SELECTED_TAB_YOUR_TRANSLATOR_ENGINES[config.SELECTED_TAB_NO] + config.CHOICE_INPUT_TRANSLATOR = engine + engine = config.SELECTED_TAB_TARGET_TRANSLATOR_ENGINES[config.SELECTED_TAB_NO] + config.CHOICE_OUTPUT_TRANSLATOR = engine + def initSetLanguageAndCountry(): select = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO] language, country = model.getLanguageAndCountry(select) @@ -218,7 +224,18 @@ def initSetLanguageAndCountry(): language, country = model.getLanguageAndCountry(select) config.TARGET_LANGUAGE = language config.TARGET_COUNTRY = country - config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) + +def setYourTranslateEngine(select): + engines = config.SELECTED_TAB_YOUR_TRANSLATOR_ENGINES + engines[config.SELECTED_TAB_NO] = select + config.SELECTED_TAB_YOUR_TRANSLATOR_ENGINES = engines + config.CHOICE_INPUT_TRANSLATOR = select + +def setTargetTranslateEngine(select): + engines = config.SELECTED_TAB_TARGET_TRANSLATOR_ENGINES + engines[config.SELECTED_TAB_NO] = select + config.SELECTED_TAB_TARGET_TRANSLATOR_ENGINES = engines + config.CHOICE_OUTPUT_TRANSLATOR = select def setYourLanguageAndCountry(select): languages = config.SELECTED_TAB_YOUR_LANGUAGES @@ -227,7 +244,6 @@ def setYourLanguageAndCountry(select): language, country = model.getLanguageAndCountry(select) config.SOURCE_LANGUAGE = language config.SOURCE_COUNTRY = country - config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) view.printToTextbox_selectedYourLanguages(select) def setTargetLanguageAndCountry(select): @@ -237,7 +253,6 @@ def setTargetLanguageAndCountry(select): language, country = model.getLanguageAndCountry(select) config.TARGET_LANGUAGE = language config.TARGET_COUNTRY = country - config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) view.printToTextbox_selectedTargetLanguages(select) def swapYourLanguageAndTargetLanguage(): @@ -252,17 +267,26 @@ def swapYourLanguageAndTargetLanguage(): def callbackSelectedLanguagePresetTab(selected_tab_no): config.SELECTED_TAB_NO = selected_tab_no view.updateGuiVariableByPresetTabNo(config.SELECTED_TAB_NO) + + engines = config.SELECTED_TAB_YOUR_TRANSLATOR_ENGINES + engine = engines[config.SELECTED_TAB_NO] + config.CHOICE_INPUT_TRANSLATOR = engine + + engines = config.SELECTED_TAB_TARGET_TRANSLATOR_ENGINES + engine = engines[config.SELECTED_TAB_NO] + config.CHOICE_OUTPUT_TRANSLATOR = engine + languages = config.SELECTED_TAB_YOUR_LANGUAGES select = languages[config.SELECTED_TAB_NO] language, country = model.getLanguageAndCountry(select) config.SOURCE_LANGUAGE = language config.SOURCE_COUNTRY = country + languages = config.SELECTED_TAB_TARGET_LANGUAGES select = languages[config.SELECTED_TAB_NO] language, country = model.getLanguageAndCountry(select) config.TARGET_LANGUAGE = language config.TARGET_COUNTRY = country - config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) view.printToTextbox_changedLanguagePresetTab(config.SELECTED_TAB_NO) # command func @@ -392,7 +416,7 @@ def callbackSetUiLanguage(value): def callbackSetDeeplAuthkey(value): print("callbackSetDeeplAuthkey", str(value)) if len(value) == 39: - result = model.authenticationTranslator(choice_translator="DeepL_API", auth_key=value) + result = model.authenticationTranslatorDeepLAuthKey(auth_key=value) if result is True: key = value view.printToTextbox_AuthenticationSuccess() @@ -402,12 +426,10 @@ def callbackSetDeeplAuthkey(value): auth_keys = config.AUTH_KEYS auth_keys["DeepL_API"] = key config.AUTH_KEYS = auth_keys - config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) elif len(value) == 0: auth_keys = config.AUTH_KEYS auth_keys["DeepL_API"] = None config.AUTH_KEYS = auth_keys - config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) # Transcription Tab (Mic) def callbackSetMicHost(value): @@ -703,15 +725,17 @@ def createMainWindow(): # init config initSetConfigByExeArguments() + initSetTranslateEngine() initSetLanguageAndCountry() - if model.authenticationTranslator(config.CHOICE_TRANSLATOR, config.AUTH_KEYS[config.CHOICE_TRANSLATOR]) is False: - # error update Auth key - auth_keys = config.AUTH_KEYS - auth_keys[config.CHOICE_TRANSLATOR] = None - config.AUTH_KEYS = auth_keys - view.printToTextbox_AuthenticationError() - config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) + # if (config.SELECTED_TAB_YOUR_TRANSLATOR_ENGINES[config.SELECTED_TAB_NO] == "DeepL_API" or + # config.SELECTED_TAB_TARGET_TRANSLATOR_ENGINES[config.SELECTED_TAB_NO] == "DeepL_API"): + # if model.authenticationTranslator("DeepL_API", config.AUTH_KEYS["DeepL_API"]) is False: + # # error update Auth key + # auth_keys = config.AUTH_KEYS + # auth_keys["DeepL_API"] = None + # config.AUTH_KEYS = auth_keys + # view.printToTextbox_AuthenticationError() # set word filter model.addKeywords() diff --git a/model.py b/model.py index f7fa4642..30e6a852 100644 --- a/model.py +++ b/model.py @@ -83,13 +83,8 @@ class Model: del self.keyword_processor self.keyword_processor = KeywordProcessor() - def authenticationTranslator(self, choice_translator=None, auth_key=None): - if choice_translator is None: - choice_translator = config.CHOICE_TRANSLATOR - if auth_key is None: - auth_key = config.AUTH_KEYS[choice_translator] - - result = self.translator.authentication(choice_translator, auth_key) + def authenticationTranslatorDeepLAuthKey(self, auth_key): + result = self.translator.authenticationDeepLAuthKey(auth_key) return result def startLogger(self): @@ -123,25 +118,25 @@ class Model: country = parts[1][1:-1] return language, country - def findTranslationEngine(self, source_lang, target_lang): - compatible_engines = [] - for engine in translatorEngine: - source_languages = translation_lang.get(engine, {}).get("source", {}) - target_languages = translation_lang.get(engine, {}).get("target", {}) - if source_lang in source_languages and target_lang in target_languages: - compatible_engines.append(engine) - engine_name = compatible_engines[0] + # def findTranslationEngine(self, source_lang, target_lang): + # compatible_engines = [] + # for engine in translatorEngine: + # source_languages = translation_lang.get(engine, {}).get("source", {}) + # target_languages = translation_lang.get(engine, {}).get("target", {}) + # if source_lang in source_languages and target_lang in target_languages: + # compatible_engines.append(engine) + # engine_name = compatible_engines[0] - if engine_name == "DeepL" and config.AUTH_KEYS["DeepL_API"] is not None: - if self.authenticationTranslator(engine_name, config.AUTH_KEYS["DeepL_API"]) is True: - engine_name = "DeepL_API" - elif engine_name == "DeepL_API" and config.AUTH_KEYS["DeepL_API"] is None: - engine_name = "DeepL" + # if engine_name == "DeepL" and config.AUTH_KEYS["DeepL_API"] is not None: + # if self.authenticationTranslator(engine_name, config.AUTH_KEYS["DeepL_API"]) is True: + # engine_name = "DeepL_API" + # elif engine_name == "DeepL_API" and config.AUTH_KEYS["DeepL_API"] is None: + # engine_name = "DeepL" - return engine_name + # return engine_name def getInputTranslate(self, message): - translator_name=config.CHOICE_TRANSLATOR + translator_name=config.CHOICE_INPUT_TRANSLATOR source_language=config.SOURCE_LANGUAGE target_language=config.TARGET_LANGUAGE target_country = config.TARGET_COUNTRY @@ -157,19 +152,12 @@ class Model: target_language = "Portuguese European" else: target_language = "Portuguese Brazilian" - elif translator_name == "DeepL": + else: if target_language in ["English American", "English British"]: target_language = "English" elif target_language in ["Portuguese European", "Portuguese Brazilian"]: target_language = "Portuguese" - # translation = self.translator.translate_ctranslate2( - # translator_name=translator_name, - # source_language=source_language, - # target_language=target_language, - # message=message - # ) - translation = self.translator.translate( translator_name=translator_name, source_language=source_language, @@ -179,7 +167,7 @@ class Model: return translation def getOutputTranslate(self, message): - translator_name=config.CHOICE_TRANSLATOR + translator_name=config.CHOICE_OUTPUT_TRANSLATOR source_language=config.TARGET_LANGUAGE target_language=config.SOURCE_LANGUAGE target_country = config.SOURCE_COUNTRY @@ -195,18 +183,12 @@ class Model: target_language = "Portuguese European" else: target_language = "Portuguese Brazilian" - elif translator_name == "DeepL": + else: if target_language in ["English American", "English British"]: target_language = "English" elif target_language in ["Portuguese European", "Portuguese Brazilian"]: target_language = "Portuguese" - # translation = self.translator.translate_ctranslate2( - # translator_name=translator_name, - # source_language=source_language, - # target_language=target_language, - # message=message - # ) translation = self.translator.translate( translator_name=translator_name, source_language=source_language, diff --git a/models/translation/translation_translator.py b/models/translation/translation_translator.py index 496a9b44..371c907e 100644 --- a/models/translation/translation_translator.py +++ b/models/translation/translation_translator.py @@ -21,15 +21,13 @@ class Translator(): self.translator = ctranslate2.Translator(self.weight_path, device="cpu", device_index=0, compute_type="int8", inter_threads=1, intra_threads=4) self.tokenizer = transformers.AutoTokenizer.from_pretrained(tokenizer) - def authentication(self, translator_name, authkey=None): + def authenticationDeepLAuthKey(self, authkey): result = True - match translator_name: - case "DeepL_API": - try: - self.deepl_client = deepl_Translator(authkey) - self.deepl_client.translate_text(" ", target_lang="EN-US") - except Exception: - result = False + try: + self.deepl_client = deepl_Translator(authkey) + self.deepl_client.translate_text(" ", target_lang="EN-US") + except Exception: + result = False return result def translate(self, translator_name, source_language, target_language, message):