1let currentLanguage = 'en'; 2let currentLanguageText = 'English'; 3let bestExp = null; 4 5window.addEventListener("DOMContentLoaded", async (event) => { 6 7 document.querySelector(".languages .ddl").addEventListener('click', (event) => { 8 if (document.querySelector('.ddl-items').classList.contains('expanded')) { 9 document.querySelector('.ddl-items').classList.remove('expanded'); 10 document.querySelector('.ddl .chevron').classList.remove('up'); 11 document.querySelector('.ddl .chevron').classList.add('down'); 12 } else { 13 document.querySelector('.ddl-items').classList.add('expanded'); 14 document.querySelector('.ddl .chevron').classList.remove('down'); 15 document.querySelector('.ddl .chevron').classList.add('up') 16 } 17 }); 18 19 currentLanguage = getCookie('lang') ? getCookie('lang') : getParameterByName('lang'); 20 21 if (!currentLanguage) { currentLanguage = 'en'; } 22 23 getLanguage(currentLanguage, true); 24}); 25 26function getLanguage(lang, retry) { 27 let pathPrefix = ''; 28 if (window.location.pathname.startsWith('/beta')) { 29 pathPrefix = '/beta'; 30 } 31 const jsonFilePath = `${pathPrefix}/languages/website.${lang}.json`; 32 33 // Fetch the JSON file 34 fetch(jsonFilePath) 35 .then(response => { 36 if (!response.ok) { 37 throw new Error('Network response was not ok ' + response.statusText); 38 } 39 return response.json(); 40 }) 41 .then(translations => { 42 43 document.getElementById('langCode').innerText = lang; 44 document.getElementById('langText').innerText = translations[lang]; 45 46 let languageKeys = []; 47 for (var key in translations) { 48 if (translations.hasOwnProperty(key) && key.length == 2) { 49 console.log(key + " -> " + translations[key]); 50 languageKeys.push({key: key, value: translations[key]}); 51 } 52 } 53 54 bestExp = translations["bestExp"]; 55 56 document.querySelectorAll('[translation-key]').forEach((element) => { 57 let key = element.getAttribute('translation-key'); 58 59 if (translations[key]) {
60 let value = translations[key].replace(/\\n/g, '<br/>').replace(/\{\{appName\}\}/g, 'Car Cast'); 61 document.querySelectorAll('[translation-key="' + key + '"').forEach((elem) => { elem.innerText = value; }) 62 } 63 64 }); 65 66 // process languages 67 languageKeys.sort(function(a, b) { 68 var textA = a.value.toUpperCase(); 69 var textB = b.value.toUpperCase(); 70 return (textA < textB) ? -1 : (textA > textB) ? 1 : 0; 71 }); 72 73 console.log(languageKeys) 74 //sort 75 let html = ''; 76 languageKeys.forEach((lang) => { 77 let item = ` 78 <div class="item" lang="${lang.key}"> 79 <small>${lang.key}</small> <span>${lang.value}</span> 80 </div>`; 81 html += item; 82 }); 83 84 document.querySelector('.ddl-items').innerHTML = html; 85 86 87 88 document.querySelector('.ddl-items').addEventListener('click', function(event) { 89 if (event.target.closest('.item')) { 90 let clickedItem = event.target.closest('.item'); 91 let newLang = clickedItem.getAttribute('lang'); 92 console.log(newLang) 93 setCookie('lang', newLang, 365); 94 currentLanguage = newLang; 95 currentLanguageText = translations[newLang]; 96 document.getElementById('langCode').innerText = newLang; 97 document.getElementById('langText').innerText = currentLanguageText; 98 99 // hide dropdown 100 document.querySelector('.ddl-items').classList.remove('expanded'); 101 document.querySelector('.ddl .chevron').classList.remove('up'); 102 document.querySelector('.ddl .chevron').classList.add('down'); 103 104 getLanguage(newLang, true); 105 } 106 }); 107 108 }) 109 .catch(error => { 110 console.error('There was a problem with the fetch operation:', error); 111 112 if (retry) 113 getLanguage('en', false); 114 }); 115}
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.