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

@@ -648,7 +648,7 @@
<li><a href="#filosofia">La Filosofia</a></li>
<li><a href="#prodotti">I Prodotti</a></li>
<li><a href="#giardino">Il Giardino</a></li>
<li><a href="#kontakt">Kontakt</a></li>
<li><a href="#kontakt" data-de="Kontakt" data-en="Contact">Kontakt</a></li>
</ul>
</div>
</nav>
@@ -659,7 +659,7 @@
<div class="hero-overlay"></div>
<div class="hero-content">
<span class="hero-ornament"></span>
<p class="hero-sub">Hausgemachte Feinkost</p>
<p class="hero-sub" data-de="Hausgemachte Feinkost" data-en="Homemade Fine Foods">Hausgemachte Feinkost</p>
<h1 class="hero-brand">DaNoSi</h1>
<p class="hero-tagline">Dal Giardino alla Tavola</p>
</div>
@@ -672,15 +672,15 @@
<div class="filosofia-grid">
<div>
<p class="section-label">La Filosofia</p>
<h2 class="section-title">Mit Geduld und <em>Leidenschaft</em></h2>
<h2 class="section-title" data-de="Mit Geduld und &lt;em&gt;Leidenschaft&lt;/em&gt;" data-en="With Patience and &lt;em&gt;Passion&lt;/em&gt;">Mit Geduld und <em>Leidenschaft</em></h2>
<div class="section-divider"></div>
<p class="section-text">
<p class="section-text" data-de="Was im eigenen Garten wächst, verdient besondere Sorgfalt. Bei DaNoSi wird jede Frucht von Hand geerntet, jedes Rezept mit Bedacht verfeinert. Keine Massenproduktion, keine Abkürzungen — nur ehrliche Handarbeit, die man schmeckt." data-en="What grows in one's own garden deserves special care. At DaNoSi every fruit is harvested by hand, every recipe refined thoughtfully. No mass production, no shortcuts — just honest craftsmanship you can taste.">
Was im eigenen Garten wächst, verdient besondere Sorgfalt. Bei DaNoSi
wird jede Frucht von Hand geerntet, jedes Rezept mit Bedacht verfeinert.
Keine Massenproduktion, keine Abkürzungen — nur ehrliche Handarbeit,
die man schmeckt.
</p>
<p class="section-text" style="margin-top: 1.2rem;">
<p class="section-text" style="margin-top: 1.2rem;" data-de="Die Verbindung von deutscher Präzision und mediterraner Lebensfreude ist das Herz unserer kleinen Manufaktur. Jedes Glas erzählt eine Geschichte — von der Erde, von der Sonne, von der Hand, die es gemacht hat." data-en="The combination of German precision and Mediterranean joie de vivre is the heart of our small manufactory. Every jar tells a story — of the earth, of the sun, of the hand that made it.">
Die Verbindung von deutscher Präzision und mediterraner Lebensfreude
ist das Herz unserer kleinen Manufaktur. Jedes Glas erzählt eine
Geschichte — von der Erde, von der Sonne, von der Hand, die es
@@ -688,7 +688,7 @@
</p>
<p class="filosofia-quote">
"Buon cibo nasce dalla terra e dal cuore."<br>
<span style="font-size: 0.9rem; font-style: normal; color: var(--text-light);">
<span style="font-size: 0.9rem; font-style: normal; color: var(--text-light);" data-de="— Gutes Essen entsteht aus Erde und Herz." data-en="— Good food comes from earth and heart.">
— Gutes Essen entsteht aus Erde und Herz.
</span>
</p>
@@ -705,9 +705,9 @@
<section class="prodotti" id="prodotti">
<div class="section-inner">
<p class="section-label">I Prodotti</p>
<h2 class="section-title">Unsere <em>Spezialitäten</em></h2>
<h2 class="section-title" data-de="Unsere &lt;em&gt;Spezialitäten&lt;/em&gt;" data-en="Our &lt;em&gt;Specialities&lt;/em&gt;">Unsere <em>Spezialitäten</em></h2>
<div class="section-divider"></div>
<p class="section-text">
<p class="section-text" data-de="Kleine Chargen, große Sorgfalt. Jedes Produkt entsteht in limitierter Auflage aus dem, was Garten und Saison hergeben." data-en="Small batches, great care. Every product is made in limited edition from what the garden and season offer.">
Kleine Chargen, große Sorgfalt. Jedes Produkt entsteht in limitierter Auflage
aus dem, was Garten und Saison hergeben.
</p>
@@ -718,8 +718,8 @@
alt="Frische Erdbeeren für Konfitüren" loading="lazy">
<div class="prodotti-card-content">
<p class="prodotti-card-cat">Confetture</p>
<h3 class="prodotti-card-title">Konfitüren &amp; Marmeladen</h3>
<p class="prodotti-card-desc">Aus sonnengereiften Früchten, schonend eingekocht</p>
<h3 class="prodotti-card-title" data-de="Konfitüren &amp; Marmeladen" data-en="Jams &amp; Marmalades">Konfitüren &amp; Marmeladen</h3>
<p class="prodotti-card-desc" data-de="Aus sonnengereiften Früchten, schonend eingekocht" data-en="From sun-ripened fruit, gently cooked">Aus sonnengereiften Früchten, schonend eingekocht</p>
</div>
</div>
@@ -728,8 +728,8 @@
alt="Eingelegtes und Chutneys" loading="lazy">
<div class="prodotti-card-content">
<p class="prodotti-card-cat">Conserve</p>
<h3 class="prodotti-card-title">Eingelegtes &amp; Chutneys</h3>
<p class="prodotti-card-desc">Würzig, süß-sauer, nach alter Tradition</p>
<h3 class="prodotti-card-title" data-de="Eingelegtes &amp; Chutneys" data-en="Pickles &amp; Chutneys">Eingelegtes &amp; Chutneys</h3>
<p class="prodotti-card-desc" data-de="Würzig, süß-sauer, nach alter Tradition" data-en="Spicy, sweet-sour, following old tradition">Würzig, süß-sauer, nach alter Tradition</p>
</div>
</div>
@@ -738,8 +738,8 @@
alt="Kräuter und Gewürze" loading="lazy">
<div class="prodotti-card-content">
<p class="prodotti-card-cat">Erbe &amp; Spezie</p>
<h3 class="prodotti-card-title">Kräuter &amp; Gewürze</h3>
<p class="prodotti-card-desc">Frisch aus dem Garten, schonend getrocknet</p>
<h3 class="prodotti-card-title" data-de="Kräuter &amp; Gewürze" data-en="Herbs &amp; Spices">Kräuter &amp; Gewürze</h3>
<p class="prodotti-card-desc" data-de="Frisch aus dem Garten, schonend getrocknet" data-en="Fresh from the garden, gently dried">Frisch aus dem Garten, schonend getrocknet</p>
</div>
</div>
@@ -748,8 +748,8 @@
alt="Liköre und Essige" loading="lazy">
<div class="prodotti-card-content">
<p class="prodotti-card-cat">Liquori &amp; Aceti</p>
<h3 class="prodotti-card-title">Liköre &amp; Essige</h3>
<p class="prodotti-card-desc">Hauseigene Ansätze, lange gereift</p>
<h3 class="prodotti-card-title" data-de="Liköre &amp; Essige" data-en="Liqueurs &amp; Vinegars">Liköre &amp; Essige</h3>
<p class="prodotti-card-desc" data-de="Hauseigene Ansätze, lange gereift" data-en="House blends, long matured">Hauseigene Ansätze, lange gereift</p>
</div>
</div>
@@ -758,8 +758,8 @@
alt="Chili-Spezialitäten" loading="lazy">
<div class="prodotti-card-content">
<p class="prodotti-card-cat">Peperoncini</p>
<h3 class="prodotti-card-title">Chili-Spezialitäten</h3>
<p class="prodotti-card-desc">Eigene Zucht, von mild bis feurig — unsere besondere Leidenschaft</p>
<h3 class="prodotti-card-title" data-de="Chili-Spezialitäten" data-en="Chili Specialities">Chili-Spezialitäten</h3>
<p class="prodotti-card-desc" data-de="Eigene Zucht, von mild bis feurig — unsere besondere Leidenschaft" data-en="Own cultivation, from mild to fiery — our special passion">Eigene Zucht, von mild bis feurig — unsere besondere Leidenschaft</p>
</div>
</div>
@@ -768,8 +768,8 @@
alt="Feine Backwaren" loading="lazy">
<div class="prodotti-card-content">
<p class="prodotti-card-cat">Dolci &amp; Pane</p>
<h3 class="prodotti-card-title">Feine Backwaren</h3>
<p class="prodotti-card-desc">Innovative Kompositionen — handgebacken, kreativ, überraschend</p>
<h3 class="prodotti-card-title" data-de="Feine Backwaren" data-en="Fine Baked Goods">Feine Backwaren</h3>
<p class="prodotti-card-desc" data-de="Innovative Kompositionen — handgebacken, kreativ, überraschend" data-en="Innovative compositions — hand-baked, creative, surprising">Innovative Kompositionen — handgebacken, kreativ, überraschend</p>
</div>
</div>
</div>
@@ -784,25 +784,25 @@
<div class="process-step">
<div class="process-step-num">I</div>
<h3 class="process-step-title">Il Seme</h3>
<p class="process-step-desc">Säen und pflegen — mit Geduld beginnt alles</p>
<p class="process-step-desc" data-de="Säen und pflegen — mit Geduld beginnt alles" data-en="Sowing and tending — with patience everything begins">Säen und pflegen — mit Geduld beginnt alles</p>
</div>
<div class="process-connector"></div>
<div class="process-step">
<div class="process-step-num">II</div>
<h3 class="process-step-title">Il Raccolto</h3>
<p class="process-step-desc">Ernte zum perfekten Zeitpunkt, von Hand</p>
<p class="process-step-desc" data-de="Ernte zum perfekten Zeitpunkt, von Hand" data-en="Harvest at the perfect moment, by hand">Ernte zum perfekten Zeitpunkt, von Hand</p>
</div>
<div class="process-connector"></div>
<div class="process-step">
<div class="process-step-num">III</div>
<h3 class="process-step-title">L'Arte</h3>
<p class="process-step-desc">Verarbeitung nach eigenen Rezepturen</p>
<p class="process-step-desc" data-de="Verarbeitung nach eigenen Rezepturen" data-en="Processing according to our own recipes">Verarbeitung nach eigenen Rezepturen</p>
</div>
<div class="process-connector"></div>
<div class="process-step">
<div class="process-step-num">IV</div>
<h3 class="process-step-title">La Tavola</h3>
<p class="process-step-desc">Auf den Tisch — frisch und mit Liebe gemacht</p>
<p class="process-step-desc" data-de="Auf den Tisch — frisch und mit Liebe gemacht" data-en="To the table — fresh and made with love">Auf den Tisch — frisch und mit Liebe gemacht</p>
</div>
</div>
</div>
@@ -818,9 +818,9 @@
</div>
<div class="section-text-col">
<p class="section-label">Il Giardino</p>
<h2 class="section-title">Wo alles <em>beginnt</em></h2>
<h2 class="section-title" data-de="Wo alles &lt;em&gt;beginnt&lt;/em&gt;" data-en="Where everything &lt;em&gt;begins&lt;/em&gt;">Wo alles <em>beginnt</em></h2>
<div class="section-divider"></div>
<p class="section-text">
<p class="section-text" data-de="Der Garten ist das Herzstück von DaNoSi. Hier wachsen Beeren, Kräuter, Gemüse und Obst — ohne Eile, im Rhythmus der Jahreszeiten. Was die Natur vorgibt, bestimmt unser Sortiment. Jede Saison bringt neue Überraschungen auf den Tisch." data-en="The garden is the heart of DaNoSi. Here berries, herbs, vegetables and fruit grow — unhurried, in the rhythm of the seasons. What nature dictates determines our range. Every season brings new surprises to the table.">
Der Garten ist das Herzstück von DaNoSi. Hier wachsen Beeren, Kräuter,
Gemüse und Obst — ohne Eile, im Rhythmus der Jahreszeiten. Was die Natur
vorgibt, bestimmt unser Sortiment. Jede Saison bringt neue Überraschungen
@@ -830,19 +830,19 @@
<div class="giardino-values">
<div class="giardino-value">
<h4>Naturale</h4>
<p>Ohne künstliche Zusätze, ohne Konservierungsstoffe</p>
<p data-de="Ohne künstliche Zusätze, ohne Konservierungsstoffe" data-en="Without artificial additives, without preservatives">Ohne künstliche Zusätze, ohne Konservierungsstoffe</p>
</div>
<div class="giardino-value">
<h4>Stagionale</h4>
<p>Nur das, was die Saison hergibt — ehrlich und frisch</p>
<p data-de="Nur das, was die Saison hergibt — ehrlich und frisch" data-en="Only what the season offers — honest and fresh">Nur das, was die Saison hergibt — ehrlich und frisch</p>
</div>
<div class="giardino-value">
<h4>Artigianale</h4>
<p>Jedes Stück in Handarbeit, keine Massenproduktion</p>
<p data-de="Jedes Stück in Handarbeit, keine Massenproduktion" data-en="Every piece handcrafted, no mass production">Jedes Stück in Handarbeit, keine Massenproduktion</p>
</div>
<div class="giardino-value">
<h4>Locale</h4>
<p>Vom eigenen Garten direkt in die Manufaktur</p>
<p data-de="Vom eigenen Garten direkt in die Manufaktur" data-en="From our own garden directly to the manufactory">Vom eigenen Garten direkt in die Manufaktur</p>
</div>
</div>
</div>
@@ -852,9 +852,9 @@
<!-- Contact -->
<section class="contact" id="kontakt">
<p class="section-label" style="color: var(--olive-light);">Kontakt</p>
<p class="section-label" style="color: var(--olive-light);" data-de="Kontakt" data-en="Contact">Kontakt</p>
<div class="contact-brand">DaNoSi</div>
<p class="contact-sub">Hausgemachte Feinkost</p>
<p class="contact-sub" data-de="Hausgemachte Feinkost" data-en="Homemade Fine Foods">Hausgemachte Feinkost</p>
<div class="contact-divider"></div>
<p class="contact-name">Norbert Siebels</p>
<p class="contact-name" style="color: var(--text-light); margin-top: 0.2rem;">DaNoSi Feinkost</p>
@@ -864,8 +864,13 @@
<!-- Footer -->
<footer>
<p>&copy; 2026 DaNoSi Feinkost — Norbert Siebels. Alle Rechte vorbehalten.</p>
<p data-de="© 2026 DaNoSi Feinkost — Norbert Siebels. Alle Rechte vorbehalten." data-en="© 2026 DaNoSi Feinkost — Norbert Siebels. All rights reserved.">&copy; 2026 DaNoSi Feinkost — Norbert Siebels. Alle Rechte vorbehalten.</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(250,246,238,0.3);color:rgba(250,246,238,0.3);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(250,246,238,0.3);font-size:0.6rem;opacity:0.5;">Maschinell übersetzt</small>
</div>
</footer>
<script src="/shared/i18n.js"></script>
</body>
</html>