Abkürzen von Listen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

1) Die Daten würde ich in eine JSON-Datei auslagern. Für den Produktiveinsatz kann sie komprimiert werden.

2) Wenn der Tipp immer das gleiche Muster hat, brauchst du dir nur die variablen Daten im JSON merken.

The country is located in ? and known for its ? and ?

Du kannst sie später dynamisch einfügen:

const specials = data.hint1.join(" and ");
const hint = `The country is located in ${data.location} and known for its ${specials}`;

In meinen Snippets nutze ich das Format, was ich unter Punkt 4 vorstelle.

3) Bei den Bildern brauchst du ebenso nur die URL und den alternativen Text. Das HTML drumherum kann später dynamisch generiert werden.

const image = document.createElement("img");
const imageData = data[language].hint2;
image.alt = imageData.alt;
image.src = imageData.src;

4) Folgendermaßen würde ich vermutlich so eine Struktur aufbauen:

{
  "en": {
    "country": "Germany",
    "location": "Central Europe"
    "hint1": [ "beer", "castles" ],
    "hint2": {
      "alt": "..."
      "src": "..."
    }
  }
  "de": {
    /* ... */
}

So und so wird es dennoch irgendwann unweigerlich lang.

Man könnte zwar überlegen, ob man die Übersetzungen von einem Third-Party-Tool einholt, allerdings hast du damit auch unschöne Abhängigkeiten (der Dienst muss zuverlässig erreichbar sein, Anfragen sollten nicht extrem lang dauern, Übersetzungen sind womöglich nicht immer passend). Wenn, würde ich das nur einmal zur Entwicklungszeit anstoßen. Du bräuchtest also ein Skript, welches dein JSON um Übersetzungen vervollständigt.

Alternativ zu dem JSON kannst du die Daten auch in einer Datenbank abspeichern. Das vereinfacht die Wartung etwas. Zur Laufzeit lässt sich ein JSON zu allen Einträgen bilden, was anschließend an den Browser geschickt werden kann, wo deine JavaScript-Anwendung damit weiterarbeitet. Dafür müsstest du dir allerdings eine Serveranwendung bauen oder einen Dienstleister wie Firebase nutzen.

Luna93136 
Fragesteller
 27.04.2023, 12:15

Dankeschön, das ist genau das was ich gesucht habe! Jetzt weiß ich aber leider nicht wie ich ein zufälliges country herausnehmen kann wenn en und de so getrennt sind, vorher ging es einfach mit:

function getRandomCountry() {
      return countries[Math.floor(Math.random() * countries.length)];
    }

0
Luna93136 
Fragesteller
 27.04.2023, 14:33
@Luna93136

Gut irgendwie funktioniert überhaupt nichts mehr und anscheinend sollen ":" falsch sein, das ist wirklich schwerer als gedacht..

0
regex9  27.04.2023, 18:58
@Luna93136

Dann ist deine Struktur falsch. Oben ist nur ein einzelner Eintrag abgebildet. Dein JSON-Array würde so aussehen:

[
  {
    "en": { /* ... */ },
    "de": { /* ... */ }
  },
  {
    "en": { /* ... */ },
    "de": { /* ... */ },
  },
  /* etc. ... */
]
0
regex9  27.04.2023, 19:02
@Luna93136

Du kannst einen Validator zur Prüfung nutzen. Dieser validiert, formatiert und behebt auch kleinere Fehler, wie fehlende Anführungszeichen.

0