117 lines
3.3 KiB
JavaScript
117 lines
3.3 KiB
JavaScript
const en = {
|
|
btnPlay: "Play!",
|
|
btnReset: "Reset",
|
|
btnResume: "Resume",
|
|
controlsDown: "Accelerate falling",
|
|
controlsHold: "Hold",
|
|
controlsLeft: "Move left",
|
|
controlsPause: "Pause",
|
|
controlsRight: "Move right",
|
|
controlsTLeft: "Rotate to the left",
|
|
controlsTRight: "Rotate to the right",
|
|
counterScore: "Score: ",
|
|
counterTime: "Time: ",
|
|
themeDefault: "Default",
|
|
themeClean: "Clean",
|
|
themeModern: "Modern",
|
|
themeRetro: "Retro",
|
|
themeSnakes: "Snakes",
|
|
titleAppearance: "Appearance",
|
|
titleControls: "Controls",
|
|
titleGame: "Tetris.js",
|
|
titleLanguage: "Language",
|
|
titlePaused: "Paused"
|
|
};
|
|
|
|
const de = {
|
|
btnPlay: "Spielen!",
|
|
btnReset: "Zurücksetzen",
|
|
btnResume: "Weiterspielen",
|
|
controlsDown: "Fallen beschleunigen",
|
|
controlsHold: "Halten",
|
|
controlsLeft: "Nach links bewegen",
|
|
controlsPause: "Pausieren",
|
|
controlsRight: "Nach rechts bewegen",
|
|
controlsTLeft: "Nach links drehen",
|
|
controlsTRight: "Nach rechts drehen",
|
|
counterScore: "Punkte: ",
|
|
counterTime: "Zeit: ",
|
|
themeDefault: "Standard",
|
|
themeClean: "Lückenlos",
|
|
themeModern: "Futuristisch",
|
|
themeRetro: "Retro",
|
|
themeSnakes: "Schlangen",
|
|
titleAppearance: "Aussehen",
|
|
titleControls: "Steuerung",
|
|
titleLanguage: "Sprache",
|
|
titlePaused: "Pausiert"
|
|
};
|
|
|
|
let currentLang = ["de", "en"].includes(navigator.language || navigator.userLanguage) ? navigator.language || navigator.userLanguage : "en";
|
|
let firstRun = true;
|
|
|
|
class Language {
|
|
|
|
constructor(lang) {
|
|
this.lang = lang;
|
|
if(eval('typeof ' + this.lang) === 'undefined')
|
|
this.lang = "en";
|
|
}
|
|
|
|
getStr(str, defaultStr) {
|
|
const retStr = eval('eval(this.lang).' + str);
|
|
if(typeof retStr !== 'undefined')
|
|
return retStr;
|
|
if(typeof defaultStr !== 'undefined')
|
|
return defaultStr;
|
|
return eval('en.' + str);
|
|
}
|
|
}
|
|
|
|
function switchLang(lang) {
|
|
currentLang = lang;
|
|
const l = new Language(currentLang);
|
|
|
|
const elements = document.querySelectorAll('[data-string]');
|
|
for (let i = 0; i < elements.length; i++) {
|
|
let el = elements[i];
|
|
let str = l.getStr(el.getAttribute("data-string"));
|
|
if (el.getAttribute("data-string-first-run") != null && firstRun) {
|
|
str = l.getStr(el.getAttribute("data-string-first-run"));
|
|
}
|
|
if (el.getAttribute("data-string-type")) {
|
|
switch (el.getAttribute("data-string-type")) {
|
|
case "prefix":
|
|
el.setAttribute("data-prefix", str);
|
|
break;
|
|
default:
|
|
el.innerHTML = str;
|
|
break;
|
|
}
|
|
} else {
|
|
el.innerHTML = str;
|
|
}
|
|
}
|
|
|
|
switchActiveSelector(currentLang)
|
|
}
|
|
|
|
function switchActiveSelector(newSelector) {
|
|
const selectors = document.getElementsByClassName("lang");
|
|
|
|
for (let i = 0; i < selectors.length; i++) {
|
|
selectors[i].classList.remove("active");
|
|
}
|
|
|
|
document.getElementById("lang-" + newSelector).classList.add("active");
|
|
}
|
|
|
|
switchLang(currentLang);
|
|
|
|
const langSelectors = document.getElementsByClassName("lang");
|
|
|
|
for (let i = 0; i < langSelectors.length; i++) {
|
|
langSelectors[i].addEventListener('click', () => {
|
|
switchLang(langSelectors[i].getAttribute("data-lang"))
|
|
}, false);
|
|
} |