feat: i18n annotations — data-de/data-en + toggle for all 54 custom sites

Phase 2 of i18n rollout:
- All 54 static custom sites now have data-de/data-en attributes on
  visible text elements with English translations
- i18n.js script tag injected into all sites
- Language toggle button with machine-translation disclaimer added
  to every site's footer area
- Brand names / domain wordplay preserved unchanged in both languages
- 2 dynamic sites (dasbes.de, dumusst.com) skipped — no static HTML
This commit is contained in:
m
2026-04-01 13:19:40 +02:00
parent 846fc04444
commit 5c92a7b021
53 changed files with 1850 additions and 1475 deletions

View File

@@ -407,26 +407,26 @@
<span class="bear">🧸</span>
Hey <span class="goldi">Goldi</span>!
</div>
<a href="#kontakt">Hallo sagen</a>
<a href="#kontakt" data-de="Hallo sagen" data-en="Say hello">Hallo sagen</a>
</div>
</nav>
<section class="hero">
<div class="hero-bear">🧸</div>
<h1><span class="hey">Hey </span><span class="goldi">Goldi</span><span class="excl">!</span></h1>
<p class="hero-sub">
<p class="hero-sub" data-de="Dein &lt;strong&gt;freundlicher KI-Begleiter&lt;/strong&gt;.&lt;br&gt; Immer da. Immer geduldig.&lt;br&gt; Wie ein guter Freund, der alles erklärt." data-en="Your &lt;strong&gt;friendly AI companion&lt;/strong&gt;.&lt;br&gt; Always there. Always patient.&lt;br&gt; Like a good friend who explains everything.">
Dein <strong>freundlicher KI-Begleiter</strong>.<br>
Immer da. Immer geduldig.<br>
Wie ein guter Freund, der alles erklärt.
</p>
<a href="#kontakt" class="cta-big">
<a href="#kontakt" class="cta-big" data-de="🧸 Goldi kennenlernen" data-en="🧸 Meet Goldi">
🧸 Goldi kennenlernen
</a>
</section>
<div class="intro">
<div class="container">
<p class="intro-text">
<p class="intro-text" data-de="Technik muss nicht &lt;strong&gt;kompliziert&lt;/strong&gt; sein.&lt;br&gt; &lt;span class=&quot;goldi&quot;&gt;Goldi&lt;/span&gt; erklärt alles in &lt;strong&gt;einfachen Worten&lt;/strong&gt;.&lt;br&gt; Kein Fachchinesisch. Keine Hektik.&lt;br&gt; Nur ein &lt;strong&gt;freundliches Gespräch&lt;/strong&gt;." data-en="Technology doesn't have to be &lt;strong&gt;complicated&lt;/strong&gt;.&lt;br&gt; &lt;span class=&quot;goldi&quot;&gt;Goldi&lt;/span&gt; explains everything in &lt;strong&gt;simple words&lt;/strong&gt;.&lt;br&gt; No jargon. No rushing.&lt;br&gt; Just a &lt;strong&gt;friendly conversation&lt;/strong&gt;.">
Technik muss nicht <strong>kompliziert</strong> sein.<br>
<span class="goldi">Goldi</span> erklärt alles in <strong>einfachen Worten</strong>.<br>
Kein Fachchinesisch. Keine Hektik.<br>
@@ -438,8 +438,8 @@
<section id="features">
<div class="container">
<div class="section-emoji"></div>
<h2>Was Goldi alles kann</h2>
<div class="section-desc">
<h2 data-de="Was Goldi alles kann" data-en="Everything Goldi can do">Was Goldi alles kann</h2>
<div class="section-desc" data-de="Goldi hilft dir bei allem, was im Alltag anfällt. Geduldig, verständlich und immer freundlich." data-en="Goldi helps you with everything that comes up in daily life. Patient, understandable and always friendly.">
Goldi hilft dir bei allem, was im Alltag anfällt.
Geduldig, verständlich und immer freundlich.
</div>
@@ -447,38 +447,38 @@
<div class="features-grid">
<div class="feature-card">
<div class="feature-emoji">💬</div>
<h3>Einfach plaudern</h3>
<p>Frag Goldi was du möchtest. Zum Wetter, zu Rezepten, zur Nachrichten-Lage. Goldi antwortet so, dass es Spaß macht.</p>
<h3 data-de="Einfach plaudern" data-en="Just chat">Einfach plaudern</h3>
<p data-de="Frag Goldi was du möchtest. Zum Wetter, zu Rezepten, zur Nachrichten-Lage. Goldi antwortet so, dass es Spaß macht." data-en="Ask Goldi whatever you like. About the weather, recipes, current news. Goldi answers in a way that's fun.">Frag Goldi was du möchtest. Zum Wetter, zu Rezepten, zur Nachrichten-Lage. Goldi antwortet so, dass es Spaß macht.</p>
</div>
<div class="feature-card">
<div class="feature-emoji">📱</div>
<h3>Technik-Hilfe</h3>
<p>Das Handy spinnt? Die App macht Probleme? Goldi erklärt Schritt für Schritt, was zu tun ist. In deinem Tempo.</p>
<h3 data-de="Technik-Hilfe" data-en="Tech help">Technik-Hilfe</h3>
<p data-de="Das Handy spinnt? Die App macht Probleme? Goldi erklärt Schritt für Schritt, was zu tun ist. In deinem Tempo." data-en="Phone acting up? App giving trouble? Goldi explains step by step what to do. At your own pace.">Das Handy spinnt? Die App macht Probleme? Goldi erklärt Schritt für Schritt, was zu tun ist. In deinem Tempo.</p>
</div>
<div class="feature-card">
<div class="feature-emoji">📝</div>
<h3>Briefe & Texte</h3>
<p>Goldi hilft beim Schreiben. Ob Kündigung, Beschwerde oder Geburtstagsgruß — verständlich und auf den Punkt.</p>
<h3 data-de="Briefe &amp; Texte" data-en="Letters &amp; texts">Briefe &amp; Texte</h3>
<p data-de="Goldi hilft beim Schreiben. Ob Kündigung, Beschwerde oder Geburtstagsgruß — verständlich und auf den Punkt." data-en="Goldi helps with writing. Whether a notice, complaint or birthday greeting — clear and to the point.">Goldi hilft beim Schreiben. Ob Kündigung, Beschwerde oder Geburtstagsgruß — verständlich und auf den Punkt.</p>
</div>
<div class="feature-card">
<div class="feature-emoji">🧠</div>
<h3>Gedächtnisstütze</h3>
<p>Goldi merkt sich, was dir wichtig ist. Arzttermine, Geburtstage, Einkaufslisten — alles sicher aufgehoben.</p>
<h3 data-de="Gedächtnisstütze" data-en="Memory aid">Gedächtnisstütze</h3>
<p data-de="Goldi merkt sich, was dir wichtig ist. Arzttermine, Geburtstage, Einkaufslisten — alles sicher aufgehoben." data-en="Goldi remembers what matters to you. Doctor's appointments, birthdays, shopping lists — all safely stored.">Goldi merkt sich, was dir wichtig ist. Arzttermine, Geburtstage, Einkaufslisten — alles sicher aufgehoben.</p>
</div>
<div class="feature-card">
<div class="feature-emoji">📖</div>
<h3>Geschichten & Rätsel</h3>
<p>Langeweile? Goldi erzählt Geschichten, stellt Quizfragen oder liest dir etwas vor. Unterhaltung, wann immer du magst.</p>
<h3 data-de="Geschichten &amp; Rätsel" data-en="Stories &amp; puzzles">Geschichten &amp; Rätsel</h3>
<p data-de="Langeweile? Goldi erzählt Geschichten, stellt Quizfragen oder liest dir etwas vor. Unterhaltung, wann immer du magst." data-en="Bored? Goldi tells stories, asks quiz questions or reads to you. Entertainment whenever you like.">Langeweile? Goldi erzählt Geschichten, stellt Quizfragen oder liest dir etwas vor. Unterhaltung, wann immer du magst.</p>
</div>
<div class="feature-card">
<div class="feature-emoji">❤️</div>
<h3>Einfach zuhören</h3>
<p>Manchmal braucht man jemanden zum Reden. Goldi hört zu, ohne zu urteilen. Und hat immer ein offenes Ohr.</p>
<h3 data-de="Einfach zuhören" data-en="Just listen">Einfach zuhören</h3>
<p data-de="Manchmal braucht man jemanden zum Reden. Goldi hört zu, ohne zu urteilen. Und hat immer ein offenes Ohr." data-en="Sometimes you just need someone to talk to. Goldi listens without judging. And always has an open ear.">Manchmal braucht man jemanden zum Reden. Goldi hört zu, ohne zu urteilen. Und hat immer ein offenes Ohr.</p>
</div>
</div>
</div>
@@ -487,8 +487,8 @@
<section class="steps-section">
<div class="container">
<div class="section-emoji">👋</div>
<h2>So einfach geht's</h2>
<div class="section-desc">
<h2 data-de="So einfach geht's" data-en="It's that simple">So einfach geht's</h2>
<div class="section-desc" data-de="Drei Schritte. Mehr braucht es nicht." data-en="Three steps. That's all it takes.">
Drei Schritte. Mehr braucht es nicht.
</div>
@@ -496,24 +496,24 @@
<div class="step">
<div class="step-number">1</div>
<div class="step-body">
<h3>Sag "Hey Goldi!"</h3>
<p>Einfach ansprechen — per Handy, Tablet oder Computer. Goldi ist sofort da und freut sich.</p>
<h3 data-de="Sag &quot;Hey Goldi!&quot;" data-en="Say &quot;Hey Goldi!&quot;">Sag "Hey Goldi!"</h3>
<p data-de="Einfach ansprechen — per Handy, Tablet oder Computer. Goldi ist sofort da und freut sich." data-en="Just speak up — by phone, tablet or computer. Goldi is immediately there and happy to help.">Einfach ansprechen — per Handy, Tablet oder Computer. Goldi ist sofort da und freut sich.</p>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div class="step-body">
<h3>Stell deine Frage</h3>
<p>Was auch immer dich beschäftigt. Goldi versteht dich, auch wenn du nicht die perfekten Worte findest.</p>
<h3 data-de="Stell deine Frage" data-en="Ask your question">Stell deine Frage</h3>
<p data-de="Was auch immer dich beschäftigt. Goldi versteht dich, auch wenn du nicht die perfekten Worte findest." data-en="Whatever is on your mind. Goldi understands you, even if you can't find the perfect words.">Was auch immer dich beschäftigt. Goldi versteht dich, auch wenn du nicht die perfekten Worte findest.</p>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div class="step-body">
<h3>Goldi antwortet</h3>
<p>Klar, freundlich, verständlich. Und wenn etwas unklar ist: einfach nochmal fragen. Goldi erklärt es gerne anders.</p>
<h3 data-de="Goldi antwortet" data-en="Goldi answers">Goldi antwortet</h3>
<p data-de="Klar, freundlich, verständlich. Und wenn etwas unklar ist: einfach nochmal fragen. Goldi erklärt es gerne anders." data-en="Clear, friendly, understandable. And if something is unclear: just ask again. Goldi is happy to explain it differently.">Klar, freundlich, verständlich. Und wenn etwas unklar ist: einfach nochmal fragen. Goldi erklärt es gerne anders.</p>
</div>
</div>
</div>
@@ -523,37 +523,37 @@
<div class="testimonial-section">
<div class="container">
<div class="section-emoji">💛</div>
<p class="testimonial-quote">
<p class="testimonial-quote" data-de="&quot;Endlich jemand, der mir alles in Ruhe erklärt. Ohne dass ich mich dumm fühle.&quot;" data-en="&quot;Finally someone who explains everything to me calmly. Without making me feel stupid.&quot;">
"Endlich jemand, der mir alles in Ruhe erklärt.
Ohne dass ich mich dumm fühle."
</p>
<p class="testimonial-author">— So soll es sich anfühlen.</p>
<p class="testimonial-author" data-de="— So soll es sich anfühlen." data-en="— That's how it should feel.">— So soll es sich anfühlen.</p>
</div>
</div>
<div class="reassurance">
<div class="container">
<h2>Das versprechen wir</h2>
<h2 data-de="Das versprechen wir" data-en="Our promise">Das versprechen wir</h2>
<div class="reassurance-items">
<div class="reassurance-item">
<div class="reassurance-emoji">🔒</div>
<div class="reassurance-text">Privat & sicher</div>
<div class="reassurance-sub">Deine Daten bleiben bei dir</div>
<div class="reassurance-text" data-de="Privat &amp; sicher" data-en="Private &amp; secure">Privat &amp; sicher</div>
<div class="reassurance-sub" data-de="Deine Daten bleiben bei dir" data-en="Your data stays with you">Deine Daten bleiben bei dir</div>
</div>
<div class="reassurance-item">
<div class="reassurance-emoji">🐢</div>
<div class="reassurance-text">In deinem Tempo</div>
<div class="reassurance-sub">Keine Hektik, kein Druck</div>
<div class="reassurance-text" data-de="In deinem Tempo" data-en="At your pace">In deinem Tempo</div>
<div class="reassurance-sub" data-de="Keine Hektik, kein Druck" data-en="No rushing, no pressure">Keine Hektik, kein Druck</div>
</div>
<div class="reassurance-item">
<div class="reassurance-emoji">😊</div>
<div class="reassurance-text">Immer freundlich</div>
<div class="reassurance-sub">Goldi wird nie ungeduldig</div>
<div class="reassurance-text" data-de="Immer freundlich" data-en="Always friendly">Immer freundlich</div>
<div class="reassurance-sub" data-de="Goldi wird nie ungeduldig" data-en="Goldi never gets impatient">Goldi wird nie ungeduldig</div>
</div>
<div class="reassurance-item">
<div class="reassurance-emoji">🇩🇪</div>
<div class="reassurance-text">Auf Deutsch</div>
<div class="reassurance-sub">Kein Fachchinesisch</div>
<div class="reassurance-text" data-de="Auf Deutsch" data-en="In German">Auf Deutsch</div>
<div class="reassurance-sub" data-de="Kein Fachchinesisch" data-en="No jargon">Kein Fachchinesisch</div>
</div>
</div>
</div>
@@ -562,12 +562,12 @@
<section id="kontakt" class="cta-section">
<div class="container">
<div class="section-emoji">🧸</div>
<h2>Sag <span style="color:var(--gold);">Hallo</span>!</h2>
<p>
<h2 data-de="Sag &lt;span style=&quot;color:var(--gold);&quot;&gt;Hallo&lt;/span&gt;!" data-en="Say &lt;span style=&quot;color:var(--gold);&quot;&gt;Hello&lt;/span&gt;!">Sag <span style="color:var(--gold);">Hallo</span>!</h2>
<p data-de="Goldi freut sich, dich kennenzulernen. Schreib uns — und wir bringen euch zusammen." data-en="Goldi looks forward to meeting you. Write to us — and we'll bring you together.">
Goldi freut sich, dich kennenzulernen.
Schreib uns — und wir bringen euch zusammen.
</p>
<a href="mailto:heygoldi@msbls.de?subject=Hey%20Goldi!%20—%20Hallo" class="cta-big">
<a href="mailto:heygoldi@msbls.de?subject=Hey%20Goldi!%20—%20Hallo" class="cta-big" data-de="🧸 heygoldi@msbls.de" data-en="🧸 heygoldi@msbls.de">
🧸 heygoldi@msbls.de
</a>
</div>
@@ -575,9 +575,14 @@
<footer>
<div class="footer-bear">🧸</div>
<p class="footer-text">Hey Goldi! — Dein freundlicher KI-Begleiter.</p>
<p class="footer-copy">&copy; 2026 heygoldi.de — ein Projekt von <a href="https://msbls.de">msbls.de</a></p>
<p class="footer-text" data-de="Hey Goldi! — Dein freundlicher KI-Begleiter." data-en="Hey Goldi! — Your friendly AI companion.">Hey Goldi! — Dein freundlicher KI-Begleiter.</p>
<p class="footer-copy">&copy; 2026 heygoldi.de — <span data-de="ein Projekt von" data-en="a project by">ein Projekt von</span> <a href="https://msbls.de">msbls.de</a></p>
<div style="text-align:center;margin-top:16px;">
<button data-i18n-toggle title="Maschinell übersetzt / Machine-translated — German is the original." style="background:none;border:1px solid rgba(251,240,212,0.4);color:rgba(251,240,212,0.6);font-size:0.65rem;letter-spacing:0.1em;padding:4px 12px;border-radius:4px;cursor:pointer;">EN</button>
<br><small data-de="Maschinell übersetzt" data-en="Machine-translated" style="color:rgba(251,240,212,0.4);font-size:0.6rem;opacity:0.5;">Maschinell übersetzt</small>
</div>
</footer>
<script src="/shared/i18n.js"></script>
</body>
</html>