refactor(language): move language constants to common module and improve language handling

This commit is contained in:
2025-11-14 17:42:10 +08:00
parent ef8076d87f
commit 4356813820
8 changed files with 124 additions and 88 deletions

View File

@@ -9,6 +9,7 @@ import type { LLMFactory } from "@/constants/llm";
import type { IMcpServer, IMcpServerListResponse } from "@/interfaces/database/mcp";
import type { IImportMcpServersRequestBody, ITestMcpRequestBody, ICreateMcpServerRequestBody } from "@/interfaces/request/mcp";
import type { IPaginationBody } from "@/interfaces/request/base";
import { LanguageAbbreviation, LanguageAbbreviationKeysMap, LanguageTranslationMap } from "@/constants/common";
/**
* 个人中心设置
@@ -49,6 +50,28 @@ export function useProfileSetting() {
};
}
export function useLanguageSetting() {
const { userInfo, updateUserInfo } = useProfileSetting();
const [language, setLanguage] = useState(userInfo?.language || 'English');
const changeLanguage = async (language: LanguageAbbreviation) => {
try {
// LanguageAbbreviation to language
const translatedLanguage = LanguageAbbreviationKeysMap[language];
await updateUserInfo({ language: translatedLanguage });
setLanguage(translatedLanguage);
} catch (error) {
logger.error('更新语言设置失败:', error);
throw error;
}
}
return {
language,
changeLanguage,
}
}
/**
* LLM 模型设置
*/

View File

@@ -2,6 +2,8 @@ import { useEffect, useCallback } from 'react';
import { useUserStore } from '@/stores/userStore';
import userService from '@/services/user_service';
import type { IUserInfo } from '@/interfaces/database/user-setting';
import i18n from '@/locales';
import { LanguageTranslationMap } from '@/constants/common';
/**
* 用户数据管理Hook
@@ -31,6 +33,9 @@ export const useUserData = () => {
if (response.data.code === 0) {
const userInfoData: IUserInfo | null = response.data.data || null;
setUserInfo(userInfoData);
i18n.changeLanguage(
LanguageTranslationMap[userInfoData?.language as keyof typeof LanguageTranslationMap],
);
return userInfoData;
} else {
throw new Error(response.data.message || '获取用户信息失败');
@@ -95,15 +100,15 @@ export const useUserData = () => {
// 检查是否有失败的请求
const errors: string[] = [];
if (userInfoResult.status === 'rejected') {
errors.push(`用户信息: ${userInfoResult.reason.message}`);
}
if (tenantInfoResult.status === 'rejected') {
errors.push(`租户信息: ${tenantInfoResult.reason.message}`);
}
if (tenantListResult.status === 'rejected') {
errors.push(`租户列表: ${tenantListResult.reason.message}`);
}
@@ -144,7 +149,7 @@ export const useUserData = () => {
tenantList,
isLoading,
error,
// 方法
initializeUserData,
refreshUserData,