mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-02-18 18:50:49 +08:00
fix(i18n): harden language switching and enforce language list consistency
This commit is contained in:
@@ -8,11 +8,11 @@ import { persist } from 'zustand/middleware';
|
||||
import type { Language } from '@/types';
|
||||
import { LANGUAGE_ORDER, STORAGE_KEY_LANGUAGE } from '@/utils/constants';
|
||||
import i18n from '@/i18n';
|
||||
import { getInitialLanguage } from '@/utils/language';
|
||||
import { getInitialLanguage, isSupportedLanguage } from '@/utils/language';
|
||||
|
||||
interface LanguageState {
|
||||
language: Language;
|
||||
setLanguage: (language: Language) => void;
|
||||
setLanguage: (language: string) => void;
|
||||
toggleLanguage: () => void;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,9 @@ export const useLanguageStore = create<LanguageState>()(
|
||||
language: getInitialLanguage(),
|
||||
|
||||
setLanguage: (language) => {
|
||||
if (!isSupportedLanguage(language)) {
|
||||
return;
|
||||
}
|
||||
// 切换 i18next 语言
|
||||
i18n.changeLanguage(language);
|
||||
set({ language });
|
||||
@@ -35,7 +38,18 @@ export const useLanguageStore = create<LanguageState>()(
|
||||
}
|
||||
}),
|
||||
{
|
||||
name: STORAGE_KEY_LANGUAGE
|
||||
name: STORAGE_KEY_LANGUAGE,
|
||||
merge: (persistedState, currentState) => {
|
||||
const nextLanguage = (persistedState as Partial<LanguageState>)?.language;
|
||||
if (typeof nextLanguage === 'string' && isSupportedLanguage(nextLanguage)) {
|
||||
return {
|
||||
...currentState,
|
||||
...(persistedState as Partial<LanguageState>),
|
||||
language: nextLanguage
|
||||
};
|
||||
}
|
||||
return currentState;
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user