xuruiqian
2025-06-04 17ce21955b4e3402d3d5868b52e50bfdd55bc572
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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;