Jelajahi Sumber

fix(i18n): use software configured language instead of browser language in src/app.tsx

sw 1 Minggu lalu
induk
melakukan
ba50be9d8b
2 mengubah file dengan 20 tambahan dan 15 penghapusan
  1. 19 14
      src/app.tsx
  2. 1 1
      src/states/productSlice.ts

+ 19 - 14
src/app.tsx

@@ -47,29 +47,34 @@ function AppContent({ children }: { children: ReactNode }): JSX.Element {
     setCurrentTheme(themeConfig);
   };
 
-  // 检测浏览器语言
-  const browserLocale = (window.navigator.language || 'en')
-    .toLowerCase()
-    .split('-')[0];
-
   useEffect(() => {
-    store.dispatch(initializeProductState());
-
-    // 应用启动时加载多语言资源
-    const localeToLoad = ['zh', 'en'].includes(browserLocale)
-      ? browserLocale
-      : 'en';
-    dispatch(loadI18nMessages(localeToLoad))
+    // 先加载软件信息获取语言设置
+    store
+      .dispatch(initializeProductState())
       .unwrap()
+      .then((productState) => {
+        // 从 current_locale 提取语言代码 (例如: "zh_CN.UTF-8" -> "zh")
+        const languageCode = productState.language
+          .split('_')[0]
+          .split('.')[0]
+          .toLowerCase();
+
+        // 应用启动时加载多语言资源
+        const localeToLoad = ['zh', 'en'].includes(languageCode)
+          ? languageCode
+          : 'en';
+
+        return dispatch(loadI18nMessages(localeToLoad)).unwrap();
+      })
       .then(() => {
         setIsI18nReady(true);
       })
       .catch((error) => {
-        console.error('加载多语言资源失败:', error);
+        console.error('初始化失败:', error);
         // 阻止加载后面的页面
         setIsI18nReady(false);
       });
-  }, [dispatch, browserLocale]);
+  }, [dispatch]);
 
   // 显示加载状态
   if (loading || !isI18nReady) {

+ 1 - 1
src/states/productSlice.ts

@@ -26,7 +26,7 @@ export const initializeProductState = createAsyncThunk(
     console.log(`加载软件系统信息:${JSON.stringify(softwareInfo)}`);
     return {
       productName: softwareInfo.product as 'DROS' | 'VETDROS',
-      language: softwareInfo.language[0],
+      language: softwareInfo.current_locale,
       source: 'Browser' as const,
       guest: softwareInfo.guest,
       fpd: softwareInfo.FPD,