Worte per Array ersetzen

Mike Rofon

Erfahrenes Mitglied
Hallo zusammen.

Ich habe grundsätzlich extrem wenig Ahnung von Javascript, möchte aber eine gewisse Funktionalität einrichten und bin auf JS angewiesen.
Es geht NICHT um eine Webseite, sondern um eine Software, wo man per "Plugin-System" Javascripte laufen lassen kann. Ok, die Datenausgabe funktioniert dann schon wie bei HTML und mit CSS usw. aber es ist eben keine Webseite im herkömmlichen Sinne.

Der Plan:
Bei einem Autorennen gibt es mehrere Sessions: Practice, Qualifying, Race. Liegt nur auf englisch vor. Ich möchte das auf Deutsch dargestellt haben.
Dazu hab ich mir gedacht:
Die jeweils aktuelle Session kann ich iwo auslesen. Die pack ich mir in eine Variable:
Code:
let t = rawData.sessionType;
Das funktioniert. Geht jetzt nicht darum, wo diese rawData herkommen.
Was immer da drin steht wird auch aktualisiert, falls sich die Session ändert.
Jetzt gibt es innerhalb dieser Software schon diverse Arrays mit Übersetzungen englisch-deutsch. eines davon sieht so aus:
Code:
Overlay.SessionState.Localisation.SessionTypeHeaders = "'Race':'Rennen', 'R':'R', 'Warmup':'Warmup', 'W':'W', 'Qualify':'Qualifikation', 'Lone Qualify':'Qualifikation', 'Q':'Q', 'Practice':'Training', 'P':'P', 'Offline Testing':'Offline Testing', 'T':'T'";
OK, dacht ich, dann müsste es doch möglich sein, unter Benutzung der Variable t die deutsche Übersetzung zu verwenden.
Und DAS weiß ich nicht, wie man das macht.

Weil es nie funktionierte, dachte ich, vielleicht hab ich auf dieses Array innerhalb des Plugin-Systems keinen Zugriff, und hab eine Zeile dazugepackt:

const td = {'Practice':'Training', 'Lone Qualy':'Qualifikation', 'Race': 'Rennen' };

Nagelt mich jetzt nicht auf Variablen und so fest, ich hab das jetzt hier einfach zusammenkopiert.

this.panel.innerText = Overlay.SessionState.Localisation.SessionTypeHeaders[t]; oder
this.panel.innerText = td[t];
geht nicht, so ähnlich würde man das mit PHP machen.
Ne Fehlermeldung krieg ich aber nicht, sowas findet in dem System irgendwie nicht statt. Es tut einfach nix.

Dann hat man ja bei W3Schools so "TryItYourself" Seiten... da hatte ich was gefunden zum Thema und folgendes probiert:
<p>JavaScript uses names to access object properties.</p>
<p id="demo"></p>
<script>
const person = {"Jens":"John", "Dummy":"Doe", "Age":46};
let test = "Jens";
document.getElementById("demo").innerHTML = person.test;
</script>

Bekomme aber "undefined". Gefühlt bin ich hier aber näher dran an der Lösung, aber ich kanns halt nicht.

Am Ende glaube ich, diese Try-Error Methode is am Ende nicht zielführend, und ich frag am Besten jemand, der sich damit auskennt und dann noch deutsch spricht ;)
Mag mir bitte jemand helfen?

Tut mir ja leid, daß ich die Spezialisten hier mit so nem Pillepalle Kram belästige. Zumindest hab ich es wenigstens mal selber versucht.
 
Bei dem letzten Codeschnipsel erkenne ich sofort, woran es liegt:
Code:
<script>
const person = {"Jens":"John", "Dummy":"Doe", "Age":46};
let test = "Jens";
// document.getElementById("demo").innerHTML = person.test;
// So wird es funktionieren:
document.getElementById("demo").innerHTML = person[test];
</script>
D. h. wenn der Schlüssel als Variable vorliegt, musst Du die Syntax mit eckigen Klammern nehmen.
Ganz verkehrt war dein Ansatz nicht, denn dies würde auch funktionieren:
Code:
document.getElementById("demo").innerHTML = person.Jens;
aber dann ist der Schlüssel fest im Code eingebrannt und keine Variable.
 
Code:
<script>

// So wird es funktionieren:
document.getElementById("demo").innerHTML = person[test];
</script>
ja, es funktioniert tatsächlich
let t = rawData.sessionType;
const td = {'Practice':'Training', 'Lone Qualy':'Qualifikation', 'Race': 'Rennen' };
...
this.panel.innerText = t + ' (' + td[t] + ')';

ergibt 1728373566274.png

Vielen Dank erstmal dafür... Was mir jetzt noch wichtig wäre: Was passiert, wenn der rawData.sessionType nicht im Array gefunden wird?
Das hier zumindest funktionert schonmal.
Code:
    let keys = Object.keys(td);  

    if (keys.indexOf(t) < 0) {
        this.panel.innerText = t ;
        } else {
        this.panel.innerText = t + ' (' + td[t] + ')';
        }
Geht das auch eleganter?
 
Auf jeden Fall geht es kürzer:
Code:
    if (td[t]) {
        this.panel.innerText = t + ' (' + td[t] + ')';
        } else {
        this.panel.innerText = t ;
        }
 
Zurück