feat: 完成前端多语言支持和菜单优化

- 缩短菜单标题,解决显示不全问题
- 添加跟随系统语言选项,作为默认选项
- 移除语言切换时的页面刷新,实现无刷新切换
- 完成主要页面的多语言替换:
  * ConfigPage - 全局配置页面
  * ResetPassword - 重置密码页面
  * LeaderList - Leader 列表页面
  * UserList - 用户列表页面
  * Statistics - 统计信息页面
  * OrderList - 订单列表页面
  * TemplateList - 模板列表页面
  * CopyTradingList - 跟单配置列表页面
- 添加简体中文、繁体中文和英文的完整翻译键
- 优化语言设置页面,支持跟随系统语言
This commit is contained in:
WrBug
2025-12-04 10:36:28 +08:00
parent 88be178cde
commit 1a9407c544
51 changed files with 4829 additions and 835 deletions
+79
View File
@@ -0,0 +1,79 @@
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import zhCN from '../locales/zh-CN/common.json'
import zhTW from '../locales/zh-TW/common.json'
import en from '../locales/en/common.json'
/**
* 检测系统语言
* 支持的语言:zh-CN, zh-TW, en
* 如果不支持,默认使用 en
*/
const detectSystemLanguage = (): string => {
const systemLanguage = navigator.language || navigator.languages?.[0] || 'en'
const lang = systemLanguage.toLowerCase()
if (lang.startsWith('zh')) {
if (lang.includes('tw') || lang.includes('hk') || lang.includes('mo')) {
return 'zh-TW'
}
return 'zh-CN'
}
return 'en'
}
const detectLanguage = (): string => {
// 从 localStorage 读取用户设置的语言
const savedLanguage = localStorage.getItem('i18n_language')
// 如果是 auto 或未设置,使用系统语言
if (!savedLanguage || savedLanguage === 'auto') {
return detectSystemLanguage()
}
// 如果设置了具体语言,使用设置的语言
if (['zh-CN', 'zh-TW', 'en'].includes(savedLanguage)) {
return savedLanguage
}
// 默认使用系统语言
return detectSystemLanguage()
}
i18n
.use(initReactI18next)
.init({
resources: {
'zh-CN': {
translation: zhCN
},
'zh-TW': {
translation: zhTW
},
'en': {
translation: en
}
},
lng: detectLanguage(),
fallbackLng: 'en',
interpolation: {
escapeValue: false // React 已经转义了
}
})
export default i18n
/**
* 切换语言
*/
export const changeLanguage = (lng: 'zh-CN' | 'zh-TW' | 'en') => {
localStorage.setItem('i18n_language', lng)
i18n.changeLanguage(lng)
}
/**
* 获取当前语言
*/
export const getCurrentLanguage = (): string => {
return i18n.language || 'en'
}