|
@@ -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) {
|