Files
eventmap/js/i18n/strings.js
T
dapelzaandClaude Sonnet 5 2aaff8f680 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>
2026-07-28 15:16:31 +02:00

109 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Übersetzungstabelle für die App-Oberfläche (UI-Sprachumschalter, Phase A
// laut ADR 0002). Reine Datendatei ohne Logik - die Auflösung/Fallback-Kette
// übernimmt js/i18n/i18n.js.
//
// WICHTIG: Dies ist von EventMap.ai.buildPrompt()/buildTranslationPrompt()
// (js/ai/promptBuilder.js, js/ai/translatePromptBuilder.js) komplett getrennt.
// Dort geht es um die Sprache, in der eine externe KI Ortsbeschreibungen
// verfasst/übersetzt (Datenebene) - hier um die Sprache der Bedienoberfläche
// selbst (UI-Ebene). Nicht vermischen.
window.EventMap = window.EventMap || {};
window.EventMap.i18n = window.EventMap.i18n || {};
(function () {
const STRINGS = {
de: {
documentTitle: 'EventMap Familienfreundliche Ausflugsziele',
header: {
title: 'EventMap',
subtitle: 'Familienfreundliche Ausflugsziele auf der Karte',
menuToggleLabel: 'Menü öffnen',
},
settings: {
languageLabel: 'Anzeigesprache',
},
menu: {
ariaLabel: 'Aktionen',
locate: 'Meinen Standort verwenden',
locating: 'Standort wird ermittelt…',
manualLocation: 'Standort manuell eingeben',
pickLocation: '📍 Standort auf Karte wählen',
pickLocationActive: 'Klicke auf die Karte …',
addPlace: '+ Neues Ausflugsziel hinzufügen',
promptGenerator: '🤖 Neue Ausflugsziele mit KI erstellen',
translatePlace: '🌐 Ausflugsziel übersetzen (KI)',
import: '📥 KI-Ausflugsziele importieren',
backup: '💾 Daten sichern/wiederherstellen',
},
status: {
closeLabel: 'Meldung schließen',
geolocationError: 'Standort konnte nicht ermittelt werden. Bitte Standortfreigabe im Browser prüfen.',
seedLoadFailed: 'Beispieldaten konnten nicht geladen werden. Du kannst trotzdem eigene Ausflugsziele hinzufügen.',
bootstrapFailed: 'Die Anwendung konnte nicht geladen werden. Bitte Seite neu laden.',
},
map: {
ariaLabel: 'Karte',
loading: 'Karte wird geladen…',
pickingHint: 'Klicke auf die Karte, um den Standort auszuwählen.',
pickingCancel: 'Abbrechen',
},
filterPanel: {
ariaLabel: 'Filter und Suche',
},
list: {
ariaLabel: 'Ergebnisliste',
title: 'Ausflugsziele',
loading: 'Lade Ausflugsziele…',
},
},
en: {
documentTitle: 'EventMap Family-friendly outing destinations',
header: {
title: 'EventMap',
subtitle: 'Family-friendly outing destinations on the map',
menuToggleLabel: 'Open menu',
},
settings: {
languageLabel: 'Display language',
},
menu: {
ariaLabel: 'Actions',
locate: 'Use my location',
locating: 'Locating…',
manualLocation: 'Enter location manually',
pickLocation: '📍 Pick location on map',
pickLocationActive: 'Click on the map …',
addPlace: '+ Add new destination',
promptGenerator: '🤖 Create new destinations with AI',
translatePlace: '🌐 Translate destination (AI)',
import: '📥 Import AI destinations',
backup: '💾 Backup/restore data',
},
status: {
closeLabel: 'Dismiss message',
geolocationError: 'Could not determine your location. Please check location permissions in your browser.',
seedLoadFailed: 'Sample data could not be loaded. You can still add your own destinations.',
bootstrapFailed: 'The application could not be loaded. Please reload the page.',
},
map: {
ariaLabel: 'Map',
loading: 'Loading map…',
pickingHint: 'Click on the map to choose the location.',
pickingCancel: 'Cancel',
},
filterPanel: {
ariaLabel: 'Filter and search',
},
list: {
ariaLabel: 'Results list',
title: 'Destinations',
loading: 'Loading destinations…',
},
},
};
EventMap.i18n.STRINGS = STRINGS;
EventMap.i18n.SUPPORTED_LANGUAGES = Object.keys(STRINGS);
})();