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.