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/model/registry.go |   38 +++++++++++++++++++++++++++++++++-----
 1 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/privatevoice.src/internal/model/registry.go b/privatevoice.src/internal/model/registry.go
index 9314941..c9db604 100644
--- a/privatevoice.src/internal/model/registry.go
+++ b/privatevoice.src/internal/model/registry.go
@@ -1,6 +1,9 @@
 package model
 
-import "fmt"
+import (
+	"fmt"
+	"sort"
+)
 
 const (
 	BackendSenseVoice = "sensevoice"
@@ -43,11 +46,20 @@
 }
 
 var languageProfiles = map[string]LanguageProfile{
-	"zh-CN": {
-		ID:             "zh-CN",
-		DisplayName:    "中文",
-		UILocale:       "zh-CN",
+	DefaultLanguageID: {
+		ID:             DefaultLanguageID,
+		DisplayName:    "Chinese",
+		NativeName:     "中文",
+		UILocale:       "zh",
 		SystemMatchers: []string{"zh", "zh-CN", "zh-Hans", "zh-Hant"},
+		DefaultModelID: DefaultModelID,
+	},
+	EnglishLanguageID: {
+		ID:             EnglishLanguageID,
+		DisplayName:    "English",
+		NativeName:     "English",
+		UILocale:       "en",
+		SystemMatchers: []string{"en", "en-US", "en-GB", "en-AU", "en-CA"},
 		DefaultModelID: DefaultModelID,
 	},
 }
@@ -95,5 +107,21 @@
 	for _, profile := range languageProfiles {
 		profiles = append(profiles, profile)
 	}
+	sort.Slice(profiles, func(i, j int) bool {
+		if profiles[i].ID == DefaultLanguageID {
+			return true
+		}
+		if profiles[j].ID == DefaultLanguageID {
+			return false
+		}
+		return profiles[i].ID < profiles[j].ID
+	})
 	return profiles
 }
+
+func NormalizeLanguageID(id string) string {
+	if _, err := GetLanguageProfile(id); err != nil {
+		return DefaultLanguageID
+	}
+	return id
+}

--
Gitblit v1.9.3