-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
66 lines (50 loc) · 3.06 KB
/
Copy pathscript.js
File metadata and controls
66 lines (50 loc) · 3.06 KB
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
//-------------------------------------------------------------------------------------------------------------------------------------------|
// |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Constants ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
//-------------------------------------------------------------------------------------------------------------------------------------------|
let translations = {};
const languageButtons = document.querySelectorAll('.lang-btn');
//-------------------------------------------------------------------------------------------------------------------------------------------|
// |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Reloading Fonctions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
//-------------------------------------------------------------------------------------------------------------------------------------------|
async function loadTranslations() {
try {
const response = await fetch('translations.json');
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
translations = await response.json();
} catch (error) {
console.error("Error loading translation file:", error);
document.body.innerHTML = '<p style="color: red; text-align: center; padding-top: 50px;">Failed to load language data. Please try again later.</p>';
}
}
const setLanguage = (lang) => {
if (!translations[lang]) return console.error(`Language '${lang}' not found in translations.`);
const elementsToTranslate = document.querySelectorAll('[data-lang-key]');
elementsToTranslate.forEach(element => {
const key = element.getAttribute('data-lang-key');
element.textContent = translations[lang][key] || key;
});
document.title = translations[lang]['page_title'] || 'Multilingual Website';
document.documentElement.lang = lang;
languageButtons.forEach(btn => {
btn.classList.toggle('active', `btn-${lang}` === btn.id);
});
localStorage.setItem('selectedLanguage', lang);
};
//-------------------------------------------------------------------------------------------------------------------------------------------|
// |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Init ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
//-------------------------------------------------------------------------------------------------------------------------------------------|
function initializePage() {
languageButtons.forEach(button => {
button.addEventListener('click', () => {
const lang = button.id.split('-')[1];
setLanguage(lang);
});
});
const savedLang = localStorage.getItem('selectedLanguage');
const initialLang = savedLang && translations[savedLang] ? savedLang : 'en';
setLanguage(initialLang);
}
document.addEventListener('DOMContentLoaded', async () => {
await loadTranslations();
initializePage();
});