// Reine Funktion zur Erzeugung eines Übersetzungs-Prompts für ein bestehendes // Ausflugsziel. Ergänzung zu js/ai/promptBuilder.js (das neue Ausflugsziele // recherchiert) - hier wird stattdessen ein einzelnes, bereits vorhandenes // Place-Objekt an eine externe KI übergeben, mit der Bitte, name/ // shortDescription/description in eine Zielsprache zu übersetzen (Englisch/ // Spanisch/Französisch) und als JSON zurückzuliefern, das direkt in das // "translations"-Feld des Datenmodells passt (siehe js/models/schema.js, // js/models/place.js). // // Getrennt von EventMap.i18n (UI-Sprachumschalter, js/i18n/*.js): dort geht // es um die Sprache der App-Oberfläche, hier um die Sprache von // Ortsinhalten, die von einer externen KI übersetzt werden - beide Konzepte // bewusst nicht vermischt. (function () { const TARGET_LANGUAGE_LABELS = { en: 'Englisch (English)', es: 'Spanisch (Español)', fr: 'Französisch (Français)', }; function buildTranslationJsonTemplate(place, targetLanguage) { return `{ "id": "${place.id}", "translations": { "${targetLanguage}": { "name": "...", "shortDescription": "...", "description": "..." } } }`; } /** * @param {object} place Bestehendes Place-Objekt (id/name/shortDescription/description werden gelesen) * @param {'en'|'es'|'fr'} targetLanguage * @returns {string} */ function buildTranslationPrompt(place, targetLanguage) { const label = TARGET_LANGUAGE_LABELS[targetLanguage] || targetLanguage; const sourceText = JSON.stringify( { name: place.name, shortDescription: place.shortDescription, description: place.description, }, null, 2 ); const sections = [ 'Du bist ein sorgfältiger Übersetzer für Beschreibungen familienfreundlicher Ausflugsziele.', `Übersetze die folgenden drei Textfelder eines Ausflugsziels ins ${label}. Übersetze inhaltlich ` + 'korrekt und natürlich klingend, ohne neue Informationen zu erfinden oder bestehende Informationen ' + 'zu verändern. Eigennamen (z.B. Orts- und Straßennamen) bleiben unverändert, sofern im ' + 'Zielsprachenraum kein gebräuchlicher, etablierter Name existiert.', '', '1. Ausgangstext (Deutsch)', '```json', sourceText, '```', '', '2. Ausgabeformat', 'Antworte ausschließlich mit einem einzigen, gültigen JSON-Objekt - ohne einleitenden oder ' + 'abschließenden Fließtext, ohne Markdown-Codeblock-Auszeichnung außerhalb des JSON und ohne ' + 'Kommentare innerhalb des JSON. Das Feld "id" muss exakt wie unten vorgegeben übernommen werden.', '', 'Zielformat (bitte exakt einhalten, "..." durch die übersetzten Texte ersetzen)', '```json', buildTranslationJsonTemplate(place, targetLanguage), '```', ]; return sections.join('\n'); } EventMap.ai.buildTranslationPrompt = buildTranslationPrompt; EventMap.ai.TARGET_LANGUAGE_LABELS = TARGET_LANGUAGE_LABELS; })();