feat(i18n): U3 国际化 — react-i18next 双语框架 + 侧边栏/Header/Login 全量翻译 + 语言切换器

- 安装 i18next + react-i18next,创建 src/i18n/ 配置实例
- 创建 zh-CN.json (120+ 键) + en-US.json 全量英文翻译
- 侧边栏 42+ 菜单项全量 labelKey 国际化
- Header 通知/主题/用户菜单全量翻译
- Login 页面表单/按钮/主题+语言切换器
- zustand useLanguageStore 持久化语言选择
- HTML lang 属性自动同步
- tsc -b=0, npm build=✅, 17/17 测试通过
This commit is contained in:
attacker committed 2026-06-27 16:54:07 +08:00
1 parent 084a3be2cf
commit 2e179ef7f4
15 files changed
+860 -112

No files matched your search

+26
View File
@@ -14,6 +14,32 @@ export const useThemeStore = create<ThemeState>((set) => ({
toggleSidebar: () => set((state) => ({ sidebarCollapsed: !state.sidebarCollapsed })),
}));
// 语言状态(i18n — U3 国际化)
type AppLanguage = 'zh-CN' | 'en-US';
interface LanguageState {
language: AppLanguage;
setLanguage: (lang: AppLanguage) => void;
}
export const useLanguageStore = create<LanguageState>()(
persist(
(set) => ({
language: 'zh-CN' as AppLanguage,
setLanguage: (lang) => {
// 同步切换 i18next 实例
import('@/i18n').then(({ default: i18n }) => {
i18n.changeLanguage(lang);
}).catch(() => { /* i18n not yet loaded */ });
set({ language: lang });
},
}),
{
name: 'language-storage',
},
),
);
// 用户状态
interface UserState {
user: User | null;