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/frontend/src/App.svelte |   34 ++++++++++++++++++++++++++++++----
 1 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/privatevoice.src/frontend/src/App.svelte b/privatevoice.src/frontend/src/App.svelte
index 31f69cd..e6dc993 100755
--- a/privatevoice.src/frontend/src/App.svelte
+++ b/privatevoice.src/frontend/src/App.svelte
@@ -9,11 +9,20 @@
   import { indicatorVisible, indicatorStatus, indicatorVolume, hotkeyName } from './lib/stores/indicator'
   import { updateAvailable, type UpdateInfo } from './lib/stores/update'
   import { deviceName, engineHardwareInfo } from './lib/stores/app'
+  import { setLocale, localeRevision } from './lib/i18n'
+  import { languageMode, languageID, effectiveLanguageID, uiLocale } from './lib/stores/config'
 
   let isIndicatorRoute = $state(window.location.hash === '#/indicator')
   let showUpdateDialog = $state(false)
+  let languageReady = $state(false)
 
   onMount(() => {
+    Call.ByName('voicesnap/services.ConfigService.GetLanguageSettings').then((settings: any) => {
+      applyLanguageSettings(settings)
+    }).catch(() => {
+      languageReady = true
+    })
+
     Events.On('indicator:show', (ev: any) => {
       indicatorVisible.set(true)
       if (ev?.data?.status) {
@@ -88,15 +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'
+    languageMode.set(mode)
+    languageID.set(configured)
+    effectiveLanguageID.set(effective)
+    uiLocale.set(locale)
+    setLocale(locale)
+    languageReady = true
+  }
 </script>
 
 {#if isIndicatorRoute}
   <FloatingIndicator />
 {:else}
-  {#if $engineStatus === 'need_model'}
-    <OnboardingView />
-  {:else}
-    <SettingsWindow />
+  {#if languageReady}
+    {#key $localeRevision}
+      {#if $engineStatus === 'need_model'}
+        <OnboardingView />
+      {:else}
+        <SettingsWindow />
+      {/if}
+    {/key}
   {/if}
 
   {#if showUpdateDialog && $updateAvailable}

--
Gitblit v1.9.3