update
This commit is contained in:
@@ -7,20 +7,26 @@ import zhMessages from './locales/zh.json';
|
||||
// 类型推断 (可选,但推荐)
|
||||
type MessageSchema = typeof enMessages; // 假设 en.json 包含所有 key
|
||||
|
||||
// 获取浏览器语言或默认语言
|
||||
const getInitialLocale = (): string => {
|
||||
const navigatorLang = navigator.language?.split('-')[0]; // 获取 'en', 'zh' 等
|
||||
if (navigatorLang === 'zh') {
|
||||
return 'zh';
|
||||
// 定义默认语言
|
||||
export const defaultLng = 'en';
|
||||
const localStorageKey = 'user-locale';
|
||||
|
||||
// 尝试从 localStorage 获取语言,否则回退
|
||||
const getInitialLocaleFromStorage = (): 'en' | 'zh' => {
|
||||
const storedLocale = localStorage.getItem(localStorageKey);
|
||||
if (storedLocale === 'en' || storedLocale === 'zh') {
|
||||
return storedLocale;
|
||||
}
|
||||
// 可以添加更多语言支持
|
||||
return 'en'; // 默认英文
|
||||
// Fallback logic (e.g., browser language or default)
|
||||
const navigatorLang = navigator.language?.split('-')[0];
|
||||
return navigatorLang === 'zh' ? 'zh' : defaultLng;
|
||||
};
|
||||
|
||||
|
||||
const i18n = createI18n<[MessageSchema], 'en' | 'zh'>({
|
||||
legacy: false, // 必须设置为 false 才能在 Composition API 中使用 useI18n
|
||||
locale: getInitialLocale(), // 设置初始语言
|
||||
fallbackLocale: 'en', // 如果当前语言缺少某个 key,则回退到英文
|
||||
locale: getInitialLocaleFromStorage(), // 使用从 localStorage 或回退获取的初始语言
|
||||
fallbackLocale: defaultLng, // 如果当前语言缺少某个 key,则回退到默认语言
|
||||
messages: {
|
||||
en: enMessages,
|
||||
zh: zhMessages,
|
||||
@@ -30,4 +36,23 @@ const i18n = createI18n<[MessageSchema], 'en' | 'zh'>({
|
||||
// silentFallbackWarn: true,
|
||||
});
|
||||
|
||||
/**
|
||||
* 设置 i18n 实例的区域设置
|
||||
* @param lang 要设置的语言代码 ('en', 'zh', etc.)
|
||||
*/
|
||||
export const setLocale = (lang: 'en' | 'zh') => {
|
||||
if (i18n.global.availableLocales.includes(lang)) {
|
||||
i18n.global.locale = lang; // 直接赋值
|
||||
try {
|
||||
localStorage.setItem(localStorageKey, lang); // 持久化到 localStorage
|
||||
console.log(`[i18n] Locale set to "${lang}" and saved to localStorage.`); // 添加日志
|
||||
} catch (e) {
|
||||
console.error('[i18n] Failed to save locale to localStorage:', e);
|
||||
}
|
||||
} else {
|
||||
console.warn(`[i18n] Locale "${lang}" is not available.`);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export default i18n;
|
||||
|
||||
Reference in New Issue
Block a user