在 SystemZone 区域添加语言管理按钮(mgr按钮),点击后以弹出对话框的形式显示多语言列表,支持选择语言并保存,实现系统语言切换。
GET /dr/api/v1/pub/language
响应示例:
{
"code": "0x000000",
"data": [
{
"language": "en",
"display": "English"
},
{
"language": "zh",
"display": "简体中文"
}
],
"description": "Success",
"solution": ""
}
POST /api/v1/auth/manage/language
json
{
"lang": "en_US.UTF-8" // 或 "zh_CN.UTF-8"
}
响应示例:
{
"code": "0x000000",
"description": "Success",
"solution": "",
"data": {}
}
en
-> en_US.UTF-8
zh
-> zh_CN.UTF-8
扩展 src/states/i18nSlice.ts
,添加语言管理功能:
availableLanguages
: 可用语言列表selectedLanguage
: 当前选中的语言languagesLoading
: 加载语言列表状态savingLanguage
: 保存语言设置状态languageError
: 语言操作错误信息
新增 async thunks:
loadAvailableLanguages
: 加载可用语言列表
updateSystemLanguage
: 更新系统语言
新增 reducers:
setSelectedLanguage
: 设置选中的语言
clearLanguageError
: 清除语言错误
创建 src/API/language.ts
文件,包含以下接口:
// 获取多语言列表接口
export interface LanguageItem {
language: string; // en, zh
display: string; // English, 简体中文
}
export interface LanguageListResponse {
code: string;
data: LanguageItem[];
description: string;
solution: string;
}
// 修改系统语言接口
export interface ChangeLanguageRequest {
lang: string; // en_US.UTF-8, zh_CN.UTF-8
}
export interface ChangeLanguageResponse {
code: string;
description: string;
solution: string;
data: {};
}
接口方法:
getLanguageList()
: 获取多语言列表changeLanguage(lang: string)
: 修改系统语言创建 src/components/LanguageSettingModal.tsx
,实现以下功能:
useAppSelector
和 useAppDispatch
hooks组件特性:
在 src/layouts/SystemZone.tsx
中:
创建 API 文件 (src/API/language.ts
)
扩展 i18nSlice (src/states/i18nSlice.ts
)
创建语言设置对话框组件 (src/components/LanguageSettingModal.tsx
)
更新 SystemZone 组件 (src/layouts/SystemZone.tsx
)
测试验证
// 从简短代码转换为完整代码
const languageMap = {
'en': 'en_US.UTF-8',
'zh': 'zh_CN.UTF-8'
};
function mapLanguageCode(shortCode: string): string {
return languageMap[shortCode] || shortCode;
}
修改语言接口需要携带特定的请求头,这些会在 axios interceptor 中统一处理:
+----------------------------------+
| 语言设置 |
+----------------------------------+
| |
| 选择语言: |
| [ ▼] |
| |
| [取消] [保存] |
| |
+----------------------------------+
错误处理:
加载状态:
用户体验:
代码规范:
src/API/language.ts
- 语言相关APIsrc/states/i18nSlice.ts
- 扩展添加语言管理功能src/components/LanguageSettingModal.tsx
- 语言设置对话框组件(使用 Redux 状态)src/layouts/SystemZone.tsx
- 集成语言管理功能为了更好地管理应用状态,我们将语言相关的状态从组件本地状态提升到 Redux store 中:
优势:
实现方式:
i18nSlice.ts
中添加 availableLanguages
、selectedLanguage
等状态createAsyncThunk
处理异步 API 调用useAppSelector
读取状态,通过 useAppDispatch
触发 actions