From 9a85354d8b41e05ba8729cd8f44592291de9117a Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 03 Jun 2026 01:40:19 +0800
Subject: [PATCH] Implement Round 2 language settings

---
 privatevoice.src/internal/config/config.go |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/privatevoice.src/internal/config/config.go b/privatevoice.src/internal/config/config.go
index 62b4673..473bf25 100755
--- a/privatevoice.src/internal/config/config.go
+++ b/privatevoice.src/internal/config/config.go
@@ -9,8 +9,10 @@
 )
 
 const (
-	HotkeyModeTap  = "tap"
-	HotkeyModeHold = "hold"
+	HotkeyModeTap      = "tap"
+	HotkeyModeHold     = "hold"
+	LanguageModeAuto   = "auto"
+	LanguageModeManual = "manual"
 )
 
 // Config holds the application configuration, compatible with the WPF version's config.json.
@@ -25,6 +27,8 @@
 	IndicatorX               int    `json:"IndicatorX,omitempty"`
 	IndicatorY               int    `json:"IndicatorY,omitempty"`
 	SelectedModelID          string `json:"SelectedModelID,omitempty"`
+	LanguageMode             string `json:"LanguageMode,omitempty"`
+	LanguageID               string `json:"LanguageID,omitempty"`
 	ModelDownloadUrl         string `json:"ModelDownloadUrl"`
 	FallbackModelDownloadUrl string `json:"FallbackModelDownloadUrl"`
 }
@@ -39,6 +43,8 @@
 		HideDockIcon:             true,
 		CopyToClipboard:          true,
 		SelectedModelID:          model.DefaultModelID,
+		LanguageMode:             LanguageModeAuto,
+		LanguageID:               model.DefaultLanguageID,
 		ModelDownloadUrl:         "http://www.maikami.com/voicesnap/sensevoice.zip",
 		FallbackModelDownloadUrl: "https://modelscope.cn/models/sherpa-onnx/sherpa-onnx-sense-voice-zh-en-ja-ko-yue/resolve/master/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2024-07-17.tar.bz2",
 	}
@@ -66,6 +72,12 @@
 		return nil, err
 	}
 	cfg.HotkeyMode = NormalizeHotkeyMode(cfg.HotkeyMode)
+	cfg.LanguageMode = NormalizeLanguageMode(cfg.LanguageMode)
+	languageID := cfg.LanguageID
+	cfg.LanguageID = model.NormalizeLanguageID(cfg.LanguageID)
+	if languageID != "" && languageID != cfg.LanguageID {
+		logger.Info("Unknown LanguageID %q, falling back to %q", languageID, cfg.LanguageID)
+	}
 	selectedModelID := cfg.SelectedModelID
 	cfg.SelectedModelID = model.NormalizeModelID(cfg.SelectedModelID)
 	if selectedModelID != "" && selectedModelID != cfg.SelectedModelID {
@@ -74,6 +86,15 @@
 	return cfg, nil
 }
 
+func NormalizeLanguageMode(mode string) string {
+	switch mode {
+	case LanguageModeAuto, LanguageModeManual:
+		return mode
+	default:
+		return LanguageModeAuto
+	}
+}
+
 func NormalizeHotkeyMode(mode string) string {
 	switch mode {
 	case HotkeyModeTap, HotkeyModeHold:

--
Gitblit v1.9.3