From a2f625afd9e9163d33901ec7e76a62abe89c7804 Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Fri, 30 Aug 2024 06:15:28 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E6=9B=B4=E6=96=B0=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 1 + tools/i18n/i18n.py | 51 ++++++++++++++++++++++++++++++++++------------ webui.py | 1 + 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/requirements.txt b/requirements.txt index fe9c18fa1..a239aa896 100644 --- a/requirements.txt +++ b/requirements.txt @@ -33,3 +33,4 @@ ko_pron opencc; sys_platform != 'linux' opencc==1.1.1; sys_platform == 'linux' python_mecab_ko; sys_platform != 'win32' +gradio-i18n diff --git a/tools/i18n/i18n.py b/tools/i18n/i18n.py index e256941a6..b8c19a9c8 100644 --- a/tools/i18n/i18n.py +++ b/tools/i18n/i18n.py @@ -2,35 +2,60 @@ import locale import os -I18N_JSON_DIR : os.PathLike = os.path.join(os.path.dirname(os.path.relpath(__file__)), 'locale') +import gradio_i18n + +I18N_JSON_DIR: os.PathLike = os.path.join( + os.path.dirname(os.path.relpath(__file__)), "locale" +) + def load_language_list(language): - with open(os.path.join(I18N_JSON_DIR, f"{language}.json"), "r", encoding="utf-8") as f: + with open( + os.path.join(I18N_JSON_DIR, f"{language}.json"), "r", encoding="utf-8" + ) as f: language_list = json.load(f) return language_list + def scan_language_list(): language_list = [] for name in os.listdir(I18N_JSON_DIR): - if name.endswith(".json"):language_list.append(name.split('.')[0]) + if name.endswith(".json"): + language_list.append(name.split(".")[0]) return language_list + class I18nAuto: def __init__(self, language=None): - if language in ["Auto", None]: - language = locale.getdefaultlocale()[0] - # getlocale can't identify the system's language ((None, None)) - if not os.path.exists(os.path.join(I18N_JSON_DIR, f"{language}.json")): - language = "en_US" - self.language = language - self.language_map = load_language_list(language) + if language in ["Auto", None] or not os.path.exists( + os.path.join(I18N_JSON_DIR, f"{language}.json") + ): + self.language = "Auto" + else: + self.language = language + self.language_map = load_language_list(language) def __call__(self, key): - return self.language_map.get(key, key) + if self.language == "Auto": + return gradio_i18n.gettext(key) + else: + return self.language_map.get(key, key) def __repr__(self): return "Use Language: " + self.language + def translate_blocks(self, block): + translation = {} + for lang in scan_language_list(): + short_lang = lang.partition("_")[0] + if short_lang == "zh" and "CN" not in lang: + continue + + translation[short_lang] = load_language_list(lang) + + gradio_i18n.translate_blocks(block, translation) + + if __name__ == "__main__": - i18n = I18nAuto(language='en_US') - print(i18n) \ No newline at end of file + i18n = I18nAuto(language="en_US") + print(i18n) diff --git a/webui.py b/webui.py index d510370f8..d9638ff12 100644 --- a/webui.py +++ b/webui.py @@ -1045,6 +1045,7 @@ def change_precision_choices(key): #根据选择的模型修改可选的语言 close_tts.click(change_tts_inference, [bert_pretrained_dir,cnhubert_base_dir,gpu_number_1C,GPT_dropdown,SoVITS_dropdown, batched_infer_enabled], [tts_info,open_tts,close_tts]) version_checkbox.change(switch_version,[version_checkbox],[pretrained_s2G,pretrained_s2D,pretrained_s1,GPT_dropdown,SoVITS_dropdown]) with gr.TabItem(i18n("2-GPT-SoVITS-变声")):gr.Markdown(value=i18n("施工中,请静候佳音")) + i18n.translate_blocks(app) app.queue().launch(#concurrency_count=511, max_size=1022 server_name="0.0.0.0", inbrowser=True, From f36cdf70e4cb3a6bf11a34a491eeda4b4555ffb7 Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Fri, 30 Aug 2024 06:33:56 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=90=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=A4=9A=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GPT_SoVITS/inference_webui.py | 1 + GPT_SoVITS/inference_webui_fast.py | 2 ++ tools/uvr5/webui.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/GPT_SoVITS/inference_webui.py b/GPT_SoVITS/inference_webui.py index 5aff4ae5c..4055425f7 100644 --- a/GPT_SoVITS/inference_webui.py +++ b/GPT_SoVITS/inference_webui.py @@ -761,6 +761,7 @@ def html_left(text, label='p'): # button4.click(cut4, [text_inp], [text_opt]) # button5.click(cut5, [text_inp], [text_opt]) # gr.Markdown(html_center(i18n("后续将支持转音素、手工修改音素、语音合成分步执行。"))) + i18n.translate_blocks(app) if __name__ == '__main__': app.queue().launch(#concurrency_count=511, max_size=1022 diff --git a/GPT_SoVITS/inference_webui_fast.py b/GPT_SoVITS/inference_webui_fast.py index dcc2bcf9f..3f566ca5d 100644 --- a/GPT_SoVITS/inference_webui_fast.py +++ b/GPT_SoVITS/inference_webui_fast.py @@ -326,6 +326,8 @@ def to_cut(text_inp, how_to_cut): cut_text.click(to_cut, [text_inp, _how_to_cut], [text_opt]) gr.Markdown(value=i18n("后续将支持转音素、手工修改音素、语音合成分步执行。")) + i18n.translate_blocks(app) + if __name__ == '__main__': app.queue().launch(#concurrency_count=511, max_size=1022 server_name="0.0.0.0", diff --git a/tools/uvr5/webui.py b/tools/uvr5/webui.py index dc6dd024e..4fde23c66 100644 --- a/tools/uvr5/webui.py +++ b/tools/uvr5/webui.py @@ -199,6 +199,8 @@ def uvr(model_name, inp_root, save_root_vocal, paths, save_root_ins, agg, format [vc_output4], api_name="uvr_convert", ) + + i18n.translate_blocks(app) app.queue().launch(#concurrency_count=511, max_size=1022 server_name="0.0.0.0", inbrowser=True, From 21fc21ef0206c1e076f0b0b7819948f484338e15 Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Mon, 2 Sep 2024 09:57:11 +0000 Subject: [PATCH 3/3] Fix i18n string being stripped off. --- tools/uvr5/webui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/uvr5/webui.py b/tools/uvr5/webui.py index 4fde23c66..702617af0 100644 --- a/tools/uvr5/webui.py +++ b/tools/uvr5/webui.py @@ -32,12 +32,12 @@ def html_left(text, label='p'): return f"""
- <{label} style="margin: 0; padding: 0;">{text} + <{label} style="margin: 0; padding: 0;">""" + text + f"""
""" def html_center(text, label='p'): return f"""
- <{label} style="margin: 0; padding: 0;">{text} + <{label} style="margin: 0; padding: 0;">""" + text + f"""
""" def uvr(model_name, inp_root, save_root_vocal, paths, save_root_ins, agg, format0):