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

@@ -225,24 +225,28 @@
<nav>
<div class="container">
<div class="logo"><span class="deine">deine</span><span class="sei">Sei</span><span class="de">.de</span></div>
<a href="#kontakt">Projekt starten</a>
<a href="#kontakt" data-de="Projekt starten" data-en="Start project">Projekt starten</a>
</div>
</nav>
<section class="hero">
<div class="container">
<div class="hero-badge">
<span class="dot"></span>Jetzt verfügbar
<span class="dot"></span><span data-de="Jetzt verfügbar" data-en="Now available">Jetzt verfügbar</span>
</div>
<h1><span class="deine">deine</span><span class="sei">Sei</span><span class="de">.de</span></h1>
<p>
<strong>Deine Webseite</strong>, gebaut in Minuten. Nicht Wochen.
<strong data-de="Deine Webseite" data-en="Your website">Deine Webseite</strong>, <span data-de="gebaut in Minuten. Nicht Wochen.
Domain, Design, Hosting, SSL — alles aus einer Hand. Du sagst was du brauchst,
wir liefern.
wir liefern." data-en="built in minutes. Not weeks.
Domain, design, hosting, SSL — all from one source. You say what you need,
we deliver.">gebaut in Minuten. Nicht Wochen.
Domain, Design, Hosting, SSL — alles aus einer Hand. Du sagst was du brauchst,
wir liefern.</span>
</p>
<div class="cta-group">
<a href="#kontakt" class="btn btn-primary">Projekt starten</a>
<a href="#wie" class="btn btn-ghost">So funktioniert's</a>
<a href="#kontakt" class="btn btn-primary" data-de="Projekt starten" data-en="Start project">Projekt starten</a>
<a href="#wie" class="btn btn-ghost" data-de="So funktioniert's" data-en="How it works">So funktioniert's</a>
</div>
</div>
</section>
@@ -251,9 +255,11 @@
<section id="wie">
<div class="container">
<div class="section-label">Prozess</div>
<h2>Von der Idee zur Seite. Schnell.</h2>
<div class="section-desc">
<div class="section-label" data-de="Prozess" data-en="Process">Prozess</div>
<h2 data-de="Von der Idee zur Seite. Schnell." data-en="From idea to page. Fast.">Von der Idee zur Seite. Schnell.</h2>
<div class="section-desc" data-de="Kein WordPress-Dschungel, kein Baukasten-Frust.
Du beschreibst dein Projekt — wir bauen es." data-en="No WordPress jungle, no page-builder frustration.
You describe your project — we build it.">
Kein WordPress-Dschungel, kein Baukasten-Frust.
Du beschreibst dein Projekt — wir bauen es.
</div>
@@ -261,18 +267,18 @@
<div class="process-steps">
<div class="step">
<div class="step-num">01</div>
<h3>Briefing</h3>
<p>Erzähl uns, worum es geht. Name, Branche, was die Seite können soll. Per Mail, WhatsApp oder Anruf.</p>
<h3 data-de="Briefing" data-en="Briefing">Briefing</h3>
<p data-de="Erzähl uns, worum es geht. Name, Branche, was die Seite können soll. Per Mail, WhatsApp oder Anruf." data-en="Tell us what it's about. Name, industry, what the site should do. By email, WhatsApp or phone.">Erzähl uns, worum es geht. Name, Branche, was die Seite können soll. Per Mail, WhatsApp oder Anruf.</p>
</div>
<div class="step">
<div class="step-num">02</div>
<h3>Design & Build</h3>
<p>Wir designen und bauen deine Seite. Responsive, schnell, modern. Du bekommst einen Entwurf zum Reviewen.</p>
<h3 data-de="Design & Build" data-en="Design & Build">Design & Build</h3>
<p data-de="Wir designen und bauen deine Seite. Responsive, schnell, modern. Du bekommst einen Entwurf zum Reviewen." data-en="We design and build your site. Responsive, fast, modern. You get a draft to review.">Wir designen und bauen deine Seite. Responsive, schnell, modern. Du bekommst einen Entwurf zum Reviewen.</p>
</div>
<div class="step">
<div class="step-num">03</div>
<h3>Live</h3>
<p>Domain registriert, SSL-Zertifikat aktiv, Seite online. Fertig. Änderungen jederzeit möglich.</p>
<h3 data-de="Live" data-en="Live">Live</h3>
<p data-de="Domain registriert, SSL-Zertifikat aktiv, Seite online. Fertig. Änderungen jederzeit möglich." data-en="Domain registered, SSL certificate active, site online. Done. Changes possible at any time.">Domain registriert, SSL-Zertifikat aktiv, Seite online. Fertig. Änderungen jederzeit möglich.</p>
</div>
</div>
</div>
@@ -282,51 +288,51 @@
<section id="pakete">
<div class="container">
<div class="section-label">Pakete</div>
<h2>Was passt zu dir?</h2>
<div class="section-desc">
<div class="section-label" data-de="Pakete" data-en="Packages">Pakete</div>
<h2 data-de="Was passt zu dir?" data-en="What fits you?">Was passt zu dir?</h2>
<div class="section-desc" data-de="Jede Seite ist individuell. Aber als Orientierung:" data-en="Every site is individual. But as a guide:">
Jede Seite ist individuell. Aber als Orientierung:
</div>
<div class="packages">
<div class="package">
<div class="package-name">Visitenkarte</div>
<h3>One-Pager</h3>
<p class="price-note">Ab 99 €</p>
<div class="package-name" data-de="Visitenkarte" data-en="Business card">Visitenkarte</div>
<h3 data-de="One-Pager" data-en="One-Pager">One-Pager</h3>
<p class="price-note" data-de="Ab 99 €" data-en="From €99">Ab 99 €</p>
<ul>
<li>Eine Seite, alles drauf</li>
<li>Domain inklusive (.de)</li>
<li>HTTPS + Hosting</li>
<li>Responsive Design</li>
<li>Kontaktformular / E-Mail</li>
<li data-de="Eine Seite, alles drauf" data-en="One page, everything on it">Eine Seite, alles drauf</li>
<li data-de="Domain inklusive (.de)" data-en="Domain included (.de)">Domain inklusive (.de)</li>
<li data-de="HTTPS + Hosting" data-en="HTTPS + Hosting">HTTPS + Hosting</li>
<li data-de="Responsive Design" data-en="Responsive Design">Responsive Design</li>
<li data-de="Kontaktformular / E-Mail" data-en="Contact form / email">Kontaktformular / E-Mail</li>
</ul>
</div>
<div class="package featured">
<div class="package-name">Standard</div>
<h3>Multi-Page</h3>
<p class="price-note">Ab 299 €</p>
<div class="package-name" data-de="Standard" data-en="Standard">Standard</div>
<h3 data-de="Multi-Page" data-en="Multi-Page">Multi-Page</h3>
<p class="price-note" data-de="Ab 299 €" data-en="From €299">Ab 299 €</p>
<ul>
<li>Mehrere Seiten</li>
<li>Domain + E-Mail</li>
<li>CMS für eigene Änderungen</li>
<li>SEO-Grundlagen</li>
<li>Analytics</li>
<li>3 Monate Support</li>
<li data-de="Mehrere Seiten" data-en="Multiple pages">Mehrere Seiten</li>
<li data-de="Domain + E-Mail" data-en="Domain + email">Domain + E-Mail</li>
<li data-de="CMS für eigene Änderungen" data-en="CMS for your own changes">CMS für eigene Änderungen</li>
<li data-de="SEO-Grundlagen" data-en="SEO basics">SEO-Grundlagen</li>
<li data-de="Analytics" data-en="Analytics">Analytics</li>
<li data-de="3 Monate Support" data-en="3 months support">3 Monate Support</li>
</ul>
</div>
<div class="package">
<div class="package-name">Custom</div>
<h3>Maßarbeit</h3>
<p class="price-note">Auf Anfrage</p>
<div class="package-name" data-de="Custom" data-en="Custom">Custom</div>
<h3 data-de="Maßarbeit" data-en="Custom work">Maßarbeit</h3>
<p class="price-note" data-de="Auf Anfrage" data-en="On request">Auf Anfrage</p>
<ul>
<li>Web-App / Portal</li>
<li>API-Anbindungen</li>
<li>Datenbanken</li>
<li>Automatisierungen</li>
<li>Laufende Betreuung</li>
<li>Alles, was du brauchst</li>
<li data-de="Web-App / Portal" data-en="Web app / portal">Web-App / Portal</li>
<li data-de="API-Anbindungen" data-en="API integrations">API-Anbindungen</li>
<li data-de="Datenbanken" data-en="Databases">Datenbanken</li>
<li data-de="Automatisierungen" data-en="Automations">Automatisierungen</li>
<li data-de="Laufende Betreuung" data-en="Ongoing support">Laufende Betreuung</li>
<li data-de="Alles, was du brauchst" data-en="Everything you need">Alles, was du brauchst</li>
</ul>
</div>
</div>
@@ -337,21 +343,28 @@
<section id="kontakt" class="cta-section">
<div class="container">
<div class="section-label">Los geht's</div>
<h2>Deine Seite wartet.</h2>
<div class="section-desc">
<div class="section-label" data-de="Los geht's" data-en="Let's go">Los geht's</div>
<h2 data-de="Deine Seite wartet." data-en="Your site is waiting.">Deine Seite wartet.</h2>
<div class="section-desc" data-de="Schreib uns, was du brauchst. Wir melden uns innerhalb von 24 Stunden
mit einem Vorschlag." data-en="Write to us what you need. We'll get back to you within 24 hours
with a proposal.">
Schreib uns, was du brauchst. Wir melden uns innerhalb von 24 Stunden
mit einem Vorschlag.
</div>
<a href="mailto:deinesei@msbls.de?subject=deineSei.de%20—%20Projekt" class="btn btn-primary">Projekt anfragen</a>
<a href="mailto:deinesei@msbls.de?subject=deineSei.de%20—%20Projekt" class="btn btn-primary" data-de="Projekt anfragen" data-en="Request project">Projekt anfragen</a>
</div>
</section>
<footer>
<div class="container">
<p><span style="color:var(--text-dim)">deine</span><span style="color:var(--accent)">Sei</span>.de — ein Projekt von msbls.de</p>
<p><span style="color:var(--text-dim)">deine</span><span style="color:var(--accent)">Sei</span><span data-de=".de — ein Projekt von msbls.de" data-en=".de — a project by msbls.de">.de — ein Projekt von msbls.de</span></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 var(--text-muted,#444);color:var(--text-muted,#444);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:var(--text-muted,#444);font-size:0.6rem;opacity:0.5;">Maschinell übersetzt</small>
</div>
</div>
</footer>
<script src="/shared/i18n.js"></script>
</body>
</html>