diff --git a/main.py b/main.py index 3c98b8de..8ef83a7f 100644 --- a/main.py +++ b/main.py @@ -3,8 +3,6 @@ import customtkinter from vrct_gui import vrct_gui from config import config from model import model -from models.translation.translation_languages import translatorEngine, translation_lang -from models.transcription.transcription_languages import transcription_lang # func transcription send message def sendMicMessage(message): @@ -120,84 +118,71 @@ def foregroundOnForcefully(e): vrct_gui.attributes("-topmost", True) # func select languages -def getListLanguageAndCountry(): - langs = [] - for lang in model.SUPPORTED_LANGUAGES: - for country in transcription_lang[lang]: - langs.append(f"{lang}\n({country})") - return langs - -def getLanguageAndState(select): - parts = select.split("\n") - language = parts[0] - country = parts[1][1:-1] - return language, country - def setYourLanguageAndCountry(select): languages = config.SELECTED_TAB_YOUR_LANGUAGES languages[config.SELECTED_TAB_NO] = select config.SELECTED_TAB_YOUR_LANGUAGES = languages - - language, country = getLanguageAndState(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) def setTargetLanguageAndCountry(select): languages = config.SELECTED_TAB_TARGET_LANGUAGES languages[config.SELECTED_TAB_NO] = select config.SELECTED_TAB_TARGET_LANGUAGES = languages - - language, country = getLanguageAndState(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) def callbackSelectedTabNo1(): config.SELECTED_TAB_NO = "tab_1" vrct_gui.YOUR_LANGUAGE = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO] vrct_gui.TARGET_LANGUAGE = config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO] - languages = config.SELECTED_TAB_YOUR_LANGUAGES select = languages[config.SELECTED_TAB_NO] - language, country = getLanguageAndState(select) + 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 = getLanguageAndState(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) def callbackSelectedTabNo2(): config.SELECTED_TAB_NO = "tab_2" vrct_gui.YOUR_LANGUAGE = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO] vrct_gui.TARGET_LANGUAGE = config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO] - languages = config.SELECTED_TAB_YOUR_LANGUAGES select = languages[config.SELECTED_TAB_NO] - language, country = getLanguageAndState(select) + 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 = getLanguageAndState(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) def callbackSelectedTabNo3(): config.SELECTED_TAB_NO = "tab_3" vrct_gui.YOUR_LANGUAGE = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO] vrct_gui.TARGET_LANGUAGE = config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO] - languages = config.SELECTED_TAB_YOUR_LANGUAGES select = languages[config.SELECTED_TAB_NO] - language, country = getLanguageAndState(select) + 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 = getLanguageAndState(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) # func print textbox def logTranslationStatusChange(): @@ -333,11 +318,11 @@ entry_message_box.bind("", foregroundOffForcefully) entry_message_box.bind("", foregroundOnForcefully) sqls__optionmenu_your_language = getattr(vrct_gui, "sqls__optionmenu_your_language") -sqls__optionmenu_your_language.configure(values=getListLanguageAndCountry()) +sqls__optionmenu_your_language.configure(values=model.getListLanguageAndCountry()) sqls__optionmenu_your_language.configure(command=setYourLanguageAndCountry) sqls__optionmenu_target_language = getattr(vrct_gui, "sqls__optionmenu_target_language") -sqls__optionmenu_target_language.configure(values=getListLanguageAndCountry()) +sqls__optionmenu_target_language.configure(values=model.getListLanguageAndCountry()) sqls__optionmenu_target_language.configure(command=setTargetLanguageAndCountry) vrct_gui.CALLBACK_SELECTED_TAB_NO_1 = callbackSelectedTabNo1 diff --git a/model.py b/model.py index eabcd022..19bb3820 100644 --- a/model.py +++ b/model.py @@ -11,6 +11,8 @@ from models.transcription.transcription_recorder import SelectedMicRecorder, Sel from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakeEnergyRecorder from models.transcription.transcription_transcriber import AudioTranscriber from models.xsoverlay.notification import xsoverlayForVRCT +from models.translation.translation_languages import translatorEngine, translation_lang +from models.transcription.transcription_languages import transcription_lang from config import config class threadFnc(Thread): @@ -75,6 +77,31 @@ class Model: config.AUTH_KEYS = auth_keys return result + @staticmethod + def getListLanguageAndCountry(): + langs = [] + for lang in model.SUPPORTED_LANGUAGES: + for country in transcription_lang[lang]: + langs.append(f"{lang}\n({country})") + return langs + + @staticmethod + def getLanguageAndCountry(select): + parts = select.split("\n") + language = parts[0] + country = parts[1][1:-1] + return language, country + + @staticmethod + def findTranslationEngine(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) + return compatible_engines[0] + def getTranslatorStatus(self): return self.translator.translator_status[config.CHOICE_TRANSLATOR] @@ -93,8 +120,8 @@ class Model: def getOutputTranslate(self, message): translation = self.translator.translate( translator_name=config.CHOICE_TRANSLATOR, - source_language=config.OUTPUT_SOURCE_LANG, - target_language=config.OUTPUT_TARGET_LANG, + source_language=config.TARGET_LANGUAGE, + target_language=config.SOURCE_LANGUAGE, message=message ) return translation