|
@@ -32,40 +32,60 @@ export const i18n = new VueI18n({
|
|
|
// }
|
|
|
});
|
|
|
|
|
|
-export function changLang(langs) {
|
|
|
- // if (currentLang === 'en') {
|
|
|
- // dayjs.locale('en');
|
|
|
- // } else {
|
|
|
- // dayjs.locale('zh-cn');
|
|
|
- // }
|
|
|
- console.log( langs)
|
|
|
- // cookies.set('blueking_language', langs);
|
|
|
+
|
|
|
+// 获取用户首选语言(考虑存储和浏览器设置)
|
|
|
+export function getPreferredLanguage() {
|
|
|
+ // 1. 检查是否有存储的语言设置
|
|
|
+ const savedLang = localStorage.getItem('blueking_language');
|
|
|
+ if (savedLang) return savedLang;
|
|
|
+
|
|
|
+ // 2. 检查浏览器语言设置
|
|
|
+ const browserLang = navigator.language.toLowerCase();
|
|
|
+ const availableLangs = langList.map(lang => lang.value);
|
|
|
+
|
|
|
+ // 尝试精确匹配 (zh-cn)
|
|
|
+ if (availableLangs.includes(browserLang)) {
|
|
|
+ return browserLang;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 尝试主语言匹配 (zh)
|
|
|
+ const primaryLang = browserLang.split('-')[0];
|
|
|
+ const matchedLang = langList.find(lang => lang.value.startsWith(primaryLang));
|
|
|
+
|
|
|
+ return matchedLang ? matchedLang.value : langList[0].value;
|
|
|
+}
|
|
|
+
|
|
|
+export function changLang(langs) {
|
|
|
+ // 持久化存储语言选择
|
|
|
+ localStorage.setItem('blueking_language', langs);
|
|
|
loadLanguageAsync(langs);
|
|
|
- // window.location.reload();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
export function setI18nLanguage(lang) {
|
|
|
i18n.global.locale = lang;
|
|
|
return lang;
|
|
|
}
|
|
|
export function loadLanguageAsync(lang) {
|
|
|
- if (i18n.locale === lang) {
|
|
|
+ const targetLang = lang || getPreferredLanguage();
|
|
|
+ if (i18n.locale === targetLang) {
|
|
|
return Promise.resolve()
|
|
|
}
|
|
|
|
|
|
// 如果语言已加载
|
|
|
- if (loadedLanguages.includes(lang)) {
|
|
|
- i18n.locale = lang
|
|
|
+ if (loadedLanguages.includes(targetLang)) {
|
|
|
+ i18n.locale = targetLang
|
|
|
return Promise.resolve()
|
|
|
}
|
|
|
|
|
|
// 动态加载语言包
|
|
|
- return import(/* webpackChunkName: "lang-[request]" */ `./lang/${lang}`)
|
|
|
+ return import(/* webpackChunkName: "lang-[request]" */ `./lang/${targetLang}`)
|
|
|
.then(module => {
|
|
|
console.log( module);
|
|
|
- i18n.setLocaleMessage(lang, module.default)
|
|
|
- loadedLanguages.push(lang)
|
|
|
- i18n.locale = lang
|
|
|
- return lang
|
|
|
+ i18n.setLocaleMessage(targetLang, module.default)
|
|
|
+ loadedLanguages.push(targetLang)
|
|
|
+ i18n.locale = targetLang
|
|
|
+ return targetLang
|
|
|
})
|
|
|
.catch(err => {
|
|
|
console.error(`加载语言包失败: ${err}`)
|