Seed-Daten per Fetch von externem Server laden, UI-Sprachumschalter (DE/EN) und KI-Übersetzungs-Prompt-Generator ergänzen
- Beispieldaten werden nicht mehr eingebettet (data/seed.js entfernt), sondern beim ersten Start per fetch(EventMap.config.SEED_DATA_URL) von einem externen, selbst gehosteten Server geladen (siehe ADR 0001, Revision 2026-07-28). - Neuer UI-Sprachumschalter (Deutsch/Englisch) für die Bedienoberfläche: js/i18n/strings.js + js/i18n/i18n.js, Sprachwahl im Menü, Persistenz über settings.language, Retranslation ohne Reload. - Neuer Menüpunkt "Ausflugsziel übersetzen (KI)": erzeugt einen Prompt, der eine externe KI bittet, Name/Beschreibungen eines bestehenden Ortes ins Englische, Spanische oder Französische zu übersetzen (js/ai/translatePromptBuilder.js, js/ui/translatePromptGenerator.js). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -76,17 +76,31 @@ Abhängigkeiten zugreifen kann.
|
||||
Überschreibungen) und macht Abhängigkeiten weniger explizit als
|
||||
`import`-Statements – sie ergeben sich aus der Script-Reihenfolge in
|
||||
`index.html`, die entsprechend sorgfältig gepflegt werden muss.
|
||||
- **Behobenes Restrisiko:** Ursprünglich lud `js/store/store.js` die
|
||||
Beispieldaten per `fetch('data/seed.json')`, was unter `file://`
|
||||
- **Behobenes Restrisiko (2026-07-24):** Ursprünglich lud `js/store/store.js`
|
||||
die Beispieldaten per `fetch('data/seed.json')`, was unter `file://`
|
||||
(insbesondere in Chrome/Chromium) von der Same-Origin-Policy blockiert
|
||||
wird. Die Seed-Daten wurden daher von `data/seed.json` nach
|
||||
`data/seed.js` verschoben und liegen dort als eingebettetes
|
||||
`data/seed.js` verschoben und lagen dort als eingebettetes
|
||||
`<script>`-Objekt (`EventMap.data.SEED_PLACES`), das wie jede andere
|
||||
JS-Datei klassisch eingebunden wird. `initStore()` ist dadurch wieder
|
||||
synchron; `fetch()` kommt aktuell an keiner Stelle der Anwendung mehr
|
||||
vor. Für spätere Phasen (z.B. KI-JSON-Import) ist zu beachten: Datei-Uploads
|
||||
über `<input type="file">` + `FileReader` sind unproblematisch unter
|
||||
`file://`, ein `fetch()` auf lokale Dateien dagegen nicht.
|
||||
JS-Datei klassisch eingebunden wurde. `initStore()` war dadurch
|
||||
synchron. Für spätere Phasen (z.B. KI-JSON-Import) gilt weiterhin:
|
||||
Datei-Uploads über `<input type="file">` + `FileReader` sind
|
||||
unproblematisch unter `file://`, ein `fetch()` auf *lokale* Dateien
|
||||
dagegen nicht.
|
||||
- **Revision (2026-07-28):** `data/seed.js` wurde aus dem Repo entfernt.
|
||||
Die Beispieldaten werden jetzt beim allerersten Start per
|
||||
`fetch(EventMap.config.SEED_DATA_URL)` von einem externen, selbst
|
||||
gehosteten Server geladen (siehe `js/store/store.js`,
|
||||
`loadSeedPlaces()`/`initStore()`). Das ist kein Rückfall in das oben
|
||||
beschriebene Problem, da sich die Same-Origin-Blockade unter `file://`
|
||||
nur auf *lokale* Dateien bezieht – ein `fetch()` auf eine entfernte
|
||||
`https://`-URL funktioniert auch von `file://` aus, sofern der Server
|
||||
passende CORS-Header (`Access-Control-Allow-Origin`) sendet.
|
||||
`initStore()` ist dadurch wieder asynchron (`main.js` awaitet es
|
||||
bereits). Schlägt der Download fehl (offline, fehlende CORS-Header,
|
||||
Server nicht erreichbar), startet die App bewusst mit einer leeren
|
||||
Places-Liste und zeigt einen Hinweis im Status-Banner statt die
|
||||
gesamte Initialisierung abzubrechen.
|
||||
- Es gibt keinen automatischen Minify-/Tree-Shaking-Schritt; die
|
||||
Dateigröße im Produktivbetrieb ist etwas größer als mit Bundler, was für
|
||||
den Umfang dieser Anwendung akzeptabel ist.
|
||||
|
||||
Reference in New Issue
Block a user