import { createI18n } from "vue3-i18n";
|
import Cookies from 'js-cookie'
|
import { getRequest } from "../../../src/utils/axioshttp";
|
|
let appDomain = WGURL.appDomain;
|
|
function getDevelopmentLanguages() {
|
const LanguageSources =
|
import.meta.globEager(`./lang/*.json`, {
|
as: 'raw',
|
eager: true
|
})
|
let languagemessages = {};
|
Object.keys(LanguageSources).forEach(key => {
|
const reg = /.*lang\/(.*)\.(js?|jsx|json)/
|
const regMatch = key.match(reg)
|
if (!regMatch)
|
return
|
|
const langKey = regMatch[1] || ''
|
const suffix = regMatch[2] || ''
|
if (!langKey || !suffix)
|
return
|
languagemessages[langKey] = JSON.parse(LanguageSources[key]);
|
let languages = localStorage.getItem("languages") ? JSON.parse(localStorage.getItem("languages")) : []
|
languages.push({ key: langKey, value: langKey });
|
localStorage.setItem("languages", JSON.stringify(languages))
|
})
|
return languagemessages;
|
}
|
|
function getDefaultLanguageKey() {
|
let languagekey = 'zh_cn';
|
|
//根据浏览器设置语言
|
let defaultlanguage = Cookies.get("language", { domain: WGURL.cookieDomain });
|
if (!defaultlanguage) {
|
let language = (navigator.language || navigator.browserLanguage).toLowerCase();
|
|
switch (language) {
|
case "zh":
|
case "zh-cn":
|
Cookies.set("language", "zh_cn", { domain: WGURL.cookieDomain });
|
languagekey = 'zh_cn';
|
break;
|
case "ru":
|
case "ru-mo":
|
Cookies.set("language", "ru", { domain: WGURL.cookieDomain });
|
languagekey = 'ru';
|
break;
|
case "en":
|
case "en-us":
|
case "en-gb":
|
Cookies.set("language", "en_us", { domain: WGURL.cookieDomain });
|
languagekey = "en_us";
|
break;
|
case "ja":
|
case "ja-jp":
|
Cookies.set("language", "ja", { domain: WGURL.cookieDomain });
|
languagekey = 'ja';
|
break;
|
default:
|
Cookies.set("language", "en_us", { domain: WGURL.cookieDomain });
|
languagekey = "en_us";
|
break;
|
}
|
} else {
|
languagekey = defaultlanguage;
|
}
|
|
return languagekey;
|
}
|
|
function getLanguages(url) {
|
let languagekey = getDefaultLanguageKey();
|
|
getRequest(url).then((response) => {
|
let languages = localStorage.getItem("languages") ? JSON.parse(localStorage.getItem("languages")) : []
|
i18n.setLocale(languagekey);
|
i18n.messages[languagekey] = response.data;
|
let ex = languages.filter(e => e.key === languagekey);
|
if (ex === null && ex.length <= 0) {
|
languages.push({ key: languagekey, value: languagekey });
|
localStorage.setItem("languages", JSON.stringify(languages))
|
}
|
}).catch(error => {
|
console.error(error);
|
i18n.setLocale('en_us');
|
});
|
}
|
|
const localeData = {
|
legacy: false,
|
locale: getDefaultLanguageKey(),
|
messages: getDevelopmentLanguages(),
|
}
|
|
const i18n = createI18n(localeData);
|
|
export async function setLanguage() {
|
let languagekey = getDefaultLanguageKey();
|
|
if (!
|
import.meta.env.DEV) {
|
const localLang = `${appDomain}assets/i18n/lang/${languagekey}.json`;
|
await getLanguages(localLang);
|
} else {
|
if (languagekey !== 'zh_cn' && languagekey !== 'en_us') {
|
i18n.setLocale('ru');
|
}
|
}
|
|
return i18n;
|
}
|
|
export default i18n;
|