From f87b8a668ea979e8d6b7ead5a63098ec130c1b73 Mon Sep 17 00:00:00 2001 From: Igor Baranov Date: Wed, 15 Jul 2026 12:55:38 +0300 Subject: [PATCH] Refactor language resolution into shared helper --- GPT_SoVITS/inference_webui.py | 5 ++--- tests/test_i18n_language.py | 13 +++++++++++++ tools/i18n/i18n.py | 9 +++++++++ webui.py | 4 ++-- 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 tests/test_i18n_language.py diff --git a/GPT_SoVITS/inference_webui.py b/GPT_SoVITS/inference_webui.py index 91c00307..19290510 100644 --- a/GPT_SoVITS/inference_webui.py +++ b/GPT_SoVITS/inference_webui.py @@ -124,10 +124,9 @@ from text import cleaned_text_to_sequence from text.cleaner import clean_text from tools.assets import css, js, top_html -from tools.i18n.i18n import I18nAuto, scan_language_list +from tools.i18n.i18n import I18nAuto, resolve_language -language = os.environ.get("language", "Auto") -language = sys.argv[-1] if sys.argv[-1] in scan_language_list() else language +language = resolve_language(os.environ.get("language", "Auto")) i18n = I18nAuto(language=language) # os.environ['PYTORCH_ENABLE_MPS_FALLBACK'] = '1' # 确保直接启动推理UI时也能够设置。 diff --git a/tests/test_i18n_language.py b/tests/test_i18n_language.py new file mode 100644 index 00000000..2dfa6558 --- /dev/null +++ b/tests/test_i18n_language.py @@ -0,0 +1,13 @@ +from tools.i18n.i18n import resolve_language + + +def test_resolve_language_prefers_supported_last_cli_locale(): + assert resolve_language("fr_FR", ["webui.py", "zh_CN"]) == "zh_CN" + + +def test_resolve_language_keeps_language_for_unknown_last_argument(): + assert resolve_language("fr_FR", ["webui.py", "--port", "9872"]) == "fr_FR" + + +def test_resolve_language_keeps_language_for_empty_argv(): + assert resolve_language("fr_FR", []) == "fr_FR" diff --git a/tools/i18n/i18n.py b/tools/i18n/i18n.py index 4cd123f3..f13b8587 100644 --- a/tools/i18n/i18n.py +++ b/tools/i18n/i18n.py @@ -1,6 +1,7 @@ import json import locale import os +import sys I18N_JSON_DIR: os.PathLike = os.path.join(os.path.dirname(os.path.relpath(__file__)), "locale") @@ -19,6 +20,14 @@ def scan_language_list(): return language_list +def resolve_language(language="Auto", argv=None): + if argv is None: + argv = sys.argv + if argv and argv[-1] in scan_language_list(): + return argv[-1] + return language + + class I18nAuto: def __init__(self, language=None): if language in ["Auto", None]: diff --git a/webui.py b/webui.py index 9c5ddd07..956ce8c3 100644 --- a/webui.py +++ b/webui.py @@ -61,9 +61,9 @@ import subprocess from subprocess import Popen from tools.assets import css, js, top_html -from tools.i18n.i18n import I18nAuto, scan_language_list +from tools.i18n.i18n import I18nAuto, resolve_language -language = sys.argv[-1] if sys.argv[-1] in scan_language_list() else "Auto" +language = resolve_language() os.environ["language"] = language i18n = I18nAuto(language=language) from multiprocessing import cpu_count