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;