From 57868a8279e371e71c1600f6bc12c40e18d8bb04 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Tue, 23 Jun 2026 14:37:01 +0800
Subject: [PATCH] Polish input settings layout

---
 privatevoice.src/frontend/src/App.svelte |   31 ++++++++++++++++++++++---------
 1 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/privatevoice.src/frontend/src/App.svelte b/privatevoice.src/frontend/src/App.svelte
index e6dc993..407dd7e 100755
--- a/privatevoice.src/frontend/src/App.svelte
+++ b/privatevoice.src/frontend/src/App.svelte
@@ -11,6 +11,7 @@
   import { deviceName, engineHardwareInfo } from './lib/stores/app'
   import { setLocale, localeRevision } from './lib/i18n'
   import { languageMode, languageID, effectiveLanguageID, uiLocale } from './lib/stores/config'
+  import type { UILocale } from './lib/stores/config'
 
   let isIndicatorRoute = $state(window.location.hash === '#/indicator')
   let showUpdateDialog = $state(false)
@@ -84,11 +85,7 @@
       }
     })
 
-    Call.ByName('voicesnap/services.EngineService.ModelExists').then((exists: any) => {
-      if (!exists) {
-        engineStatus.set('need_model')
-      }
-    })
+    refreshCurrentModelAvailability()
 
     // Load actual hotkey name from backend (store default is generic "Ctrl")
     Call.ByName('voicesnap/services.HotkeyService.GetHotkeyName').then((name: any) => {
@@ -100,16 +97,32 @@
 
   function applyLanguageSettings(settings: any) {
     const mode = settings?.languageMode === 'manual' ? 'manual' : 'auto'
-    const configured = settings?.languageID === 'en' ? 'en' : 'zh-CN'
-    const effective = settings?.effectiveLanguageID === 'en' ? 'en' : 'zh-CN'
-    const locale = settings?.uiLocale === 'en' ? 'en' : 'zh'
+    const configured = typeof settings?.languageID === 'string' && settings.languageID ? settings.languageID : 'zh-CN'
+    const effective = typeof settings?.effectiveLanguageID === 'string' && settings.effectiveLanguageID ? settings.effectiveLanguageID : configured
+    const locale = typeof settings?.uiLocale === 'string' && settings.uiLocale ? settings.uiLocale : 'en'
     languageMode.set(mode)
     languageID.set(configured)
     effectiveLanguageID.set(effective)
-    uiLocale.set(locale)
+    uiLocale.set(locale as UILocale)
     setLocale(locale)
     languageReady = true
   }
+
+  async function refreshCurrentModelAvailability() {
+    try {
+      const current: any = await Call.ByName('voicesnap/services.EngineService.GetCurrentModelStatus')
+      if (!current?.installed) {
+        engineStatus.set('need_model')
+      }
+    } catch {
+      try {
+        const exists: any = await Call.ByName('voicesnap/services.EngineService.ModelExists')
+        if (!exists) {
+          engineStatus.set('need_model')
+        }
+      } catch {}
+    }
+  }
 </script>
 
 {#if isIndicatorRoute}

--
Gitblit v1.9.3