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:
1 parent
084a3be2cf
commit
2e179ef7f4
15 files changed
+860
-112
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user