Files
tetris.js/js/language.js

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: "Glattpoliert",
themeModern: "Modern",
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);
}