PageSourceSearch

https://xpal.com/js/common.js?v=mI2wFIt0LhfxkJV1SIxO7I9zN5j6yo46ZYY00Yu5mKg

js xpal.com collected 2026-10-02 15:01:57 UTC 3,871 bytes, 132 lines download raw bytes

1// common.js
2
3// Create a global namespace to avoid polluting the global scope
4window.MyApp = window.MyApp || {};
5
6// Function to get browser language
7MyApp.getBrowserLanguage = function () {
8    const browserLanguage = navigator.language || navigator.userLanguage; // Detect browser language
9    const supportedLanguages = [
10        'en', 'es', 'fr', 'pt', 'de', 'ro', 'ru', 'ko',
11        'it', 'hi', 'ja', 'sv', 'ar', 'fa', 'bn', 'vi',
12        'da', 'zh-Hans', 'zh-Hant', 'tr', 'uk', 'pl'
13    ];
14
15    let lang = browserLanguage.split('-')[0];
16
17    if (lang === 'zh') {
18        if (browserLanguage === 'zh-CN') {
19            lang = 'zh-Hans';
20        } else if (browserLanguage === 'zh-TW') {
21            lang = 'zh-Hant';
22        }
23    }
24
25    return supportedLanguages.includes(lang) ? lang : 'en';
26};
27
28// Function to validate the language code
29MyApp.isValidLanguage = function (language) {
30    const supportedLanguages = [
31        'en', 'es', 'zh-Hans', 'zh-Hant', 'fr', 'pt', 'de',
32        'ro', 'ru', 'ko', 'it', 'hi', 'ja', 'sv', 'ar',
33        'fa', 'bn', 'vi', 'da', 'tr','uk','pl'
34    ];
35    return supportedLanguages.includes(language);
36};
37
38// Function to update the selected language in the UI
39MyApp.updateSelectedLanguageUI = function (language) {
40    const languageNames = {
41        en: "English",
42        es: "Español",
43        'zh-Hans': '中文(普通话)',
44        'zh-Hant': '中文(粤语)',
45        fr: "Français",
46        pt: "Português",
47        de: "Deutsch",
48        ro: "Română",
49        ru: "Русский",
50        ko: "한국어",
51        it: "Italiano",
52        hi: "हिन्दी",
53        ja: "日本語",
54        sv: "Svenska",
55        ar: "العربية",
56        fa: "فارسی",
57        bn: "বাংলা",
58        vi: "Tiếng Việt",
59        da: "Dansk",
60        uk: 'Ukranian',
61        tr:'Turkish',
62        pl: 'Polski'
63    };
64
65    const flagIcons = {
66        en: "us",
67        es: "es",
68        'zh-Hans': 'cn',
69        'zh-Hant': 'cn',
70        fr: "fr",
71        pt: "pt",
72        de: "de",
73        ro: "ro",
74        ru: "ru",
75        ko: "kr",
76        it: "it",
77        hi: "in",
78        ja: "jp",
79        sv: "se",
80        ar: "sa",
81        fa: "ir",
82        bn: "bd",
83        vi: "vn",
84        da: "dk",
85        uk: 'ua',
86        tr: 'tr',
87        pl: 'pl'
88    };
89
90    const flagElement = document.getElementById("selected-language-flag");
91    const nameElement = document.getElementById("selected-language-name");
92
93    if (flagElement && nameElement) {
94        flagElement.className = `flag-icon flag-icon-${flagIcons[language]}`;
95        nameElement.textContent = languageNames[language];
96    }
97
98    const languageLinks = document.querySelectorAll(".dropup-content a");
99    languageLinks.forEach((link) => {
100        if (link.textContent.trim() === languageNames[language]) {
101            link.classList.add("selected-language");
102        } else {
103            link.classList.remove("selected-language");
104        }
105    });
106};
107
108// Standalone changeLanguage function
109MyApp.changeLanguage = function (language, callback) {
110    if (!MyApp.isValidLanguage(language)) {
111        console.error('Invalid language code:', language);
112        window.location.href = '/404';
113        return;
114    }
115
116    i18next.changeLanguage(language, (err) => {
117        if (err) {
118            console.error('Error changing language:', err);
119            return;
120        } else {
121            if (typeof callback === 'function') {
122                callback();
123            }
124            MyApp.updateSelectedLanguageUI(language);
125
126            const url = new URL(window.location);
127            url.searchParams.set('lang', language);
128            window.history.pushState({}, "", url);
129        }
130    });
131};
132

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.