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

@@ -373,15 +373,15 @@
<h1 class="hero-title">
Commander<span class="ki">KI</span>n<span class="cursor-blink"></span>
</h1>
<p class="hero-sub">Level 1: <span class="ki-text">KI</span> Loading<span class="loading-dots"></span></p>
<p class="hero-sub" data-de="Level 1: &lt;span class=&quot;ki-text&quot;&gt;KI&lt;/span&gt; Loading" data-en="Level 1: &lt;span class=&quot;ki-text&quot;&gt;AI&lt;/span&gt; Loading">Level 1: <span class="ki-text">KI</span> Loading<span class="loading-dots"></span></p>
<div class="boot-text" id="bootSequence">
<span style="animation-delay:0.3s">C:\COMMANDERKIN> boot_sequence.exe</span><br>
<span style="animation-delay:0.8s">Initializing neural_network.dll ........ OK</span><br>
<span style="animation-delay:1.3s">Loading retro_vibes.dat ................ OK</span><br>
<span style="animation-delay:1.8s">Calibrating pixel_cannon.sys ........... OK</span><br>
<span style="animation-delay:2.3s">Mounting galaxy_drive D:\ .............. OK</span><br>
<span style="animation-delay:2.8s" style="color:var(--green)">SYSTEM READY. PRESS START.</span>
<span style="animation-delay:0.8s" data-de="Initializing neural_network.dll ........ OK" data-en="Initializing neural_network.dll ........ OK">Initializing neural_network.dll ........ OK</span><br>
<span style="animation-delay:1.3s" data-de="Loading retro_vibes.dat ................ OK" data-en="Loading retro_vibes.dat ................ OK">Loading retro_vibes.dat ................ OK</span><br>
<span style="animation-delay:1.8s" data-de="Calibrating pixel_cannon.sys ........... OK" data-en="Calibrating pixel_cannon.sys ........... OK">Calibrating pixel_cannon.sys ........... OK</span><br>
<span style="animation-delay:2.3s" data-de="Mounting galaxy_drive D:\ .............. OK" data-en="Mounting galaxy_drive D:\ .............. OK">Mounting galaxy_drive D:\ .............. OK</span><br>
<span style="animation-delay:2.8s" style="color:var(--green)" data-de="SYSTEM READY. PRESS START." data-en="SYSTEM READY. PRESS START.">SYSTEM READY. PRESS START.</span>
</div>
</div>
</section>
@@ -389,7 +389,7 @@
<!-- ===== CONCEPT ===== -->
<div class="section-divider">- - - - - - - - - -</div>
<section class="concept container reveal">
<p class="concept-text">
<p class="concept-text" data-de="Wie Commander Keen die Galaxie rettete, rettet &lt;em&gt;CommanderKIn&lt;/em&gt; deine Daten.&lt;br&gt;&lt;br&gt;Old-School Vibes. New-School &lt;em&gt;AI&lt;/em&gt;." data-en="Like Commander Keen saved the galaxy, &lt;em&gt;CommanderKIn&lt;/em&gt; saves your data.&lt;br&gt;&lt;br&gt;Old-School Vibes. New-School &lt;em&gt;AI&lt;/em&gt;.">
Wie Commander Keen die Galaxie rettete, rettet <em>CommanderKIn</em> deine Daten.<br><br>
Old-School Vibes. New-School <em>AI</em>.
</p>
@@ -401,15 +401,15 @@
<div class="stats-grid">
<div class="stat">
<div class="stat-val">9001</div>
<div class="stat-label">Bugs vernichtet</div>
<div class="stat-label" data-de="Bugs vernichtet" data-en="Bugs destroyed">Bugs vernichtet</div>
</div>
<div class="stat">
<div class="stat-val">256</div>
<div class="stat-label">Deploys überlebt</div>
<div class="stat-label" data-de="Deploys überlebt" data-en="Deploys survived">Deploys überlebt</div>
</div>
<div class="stat">
<div class="stat-val">1UP</div>
<div class="stat-label">Extra-Leben dank KI</div>
<div class="stat-label" data-de="Extra-Leben dank KI" data-en="Extra life thanks to AI">Extra-Leben dank KI</div>
</div>
</div>
</section>
@@ -417,13 +417,13 @@
<!-- ===== LEVELS ===== -->
<div class="section-divider">SELECT YOUR LEVEL</div>
<section class="levels container">
<h2 class="levels-title">// MISSION SELECT //</h2>
<h2 class="levels-title" data-de="// MISSION SELECT //" data-en="// MISSION SELECT //">// MISSION SELECT //</h2>
<div class="level reveal">
<div class="level-badge">LVL 1</div>
<div>
<div class="level-name">Data Rescue</div>
<div class="level-desc">Verschollene Daten aus den Tiefen korrupter Datenbanken bergen. Kein Byte bleibt zurück.</div>
<div class="level-desc" data-de="Verschollene Daten aus den Tiefen korrupter Datenbanken bergen. Kein Byte bleibt zurück." data-en="Recovering lost data from the depths of corrupt databases. No byte left behind.">Verschollene Daten aus den Tiefen korrupter Datenbanken bergen. Kein Byte bleibt zurück.</div>
</div>
</div>
@@ -431,7 +431,7 @@
<div class="level-badge">LVL 2</div>
<div>
<div class="level-name">Code Crusade</div>
<div class="level-desc">Legacy-Code durchforsten, Spaghetti entwirren. Der Kreuzzug gegen technische Schulden.</div>
<div class="level-desc" data-de="Legacy-Code durchforsten, Spaghetti entwirren. Der Kreuzzug gegen technische Schulden." data-en="Scouring legacy code, untangling spaghetti. The crusade against technical debt.">Legacy-Code durchforsten, Spaghetti entwirren. Der Kreuzzug gegen technische Schulden.</div>
</div>
</div>
@@ -439,7 +439,7 @@
<div class="level-badge">LVL 3</div>
<div>
<div class="level-name">Bug Blaster</div>
<div class="level-desc">Bugs jagen im Pixel-Dschungel. Jeder Stacktrace ein Hinweis, jeder Fix ein Power-Up.</div>
<div class="level-desc" data-de="Bugs jagen im Pixel-Dschungel. Jeder Stacktrace ein Hinweis, jeder Fix ein Power-Up." data-en="Bug hunting in the pixel jungle. Every stacktrace a clue, every fix a power-up.">Bugs jagen im Pixel-Dschungel. Jeder Stacktrace ein Hinweis, jeder Fix ein Power-Up.</div>
</div>
</div>
@@ -447,7 +447,7 @@
<div class="level-badge">LVL 4</div>
<div>
<div class="level-name">Deploy Dynasty</div>
<div class="level-desc">CI/CD-Pipelines bauen, Container orchestrieren. Von der Garage ins Rechenzentrum.</div>
<div class="level-desc" data-de="CI/CD-Pipelines bauen, Container orchestrieren. Von der Garage ins Rechenzentrum." data-en="Building CI/CD pipelines, orchestrating containers. From the garage to the data center.">CI/CD-Pipelines bauen, Container orchestrieren. Von der Garage ins Rechenzentrum.</div>
</div>
</div>
@@ -455,7 +455,7 @@
<div class="level-badge">BOSS</div>
<div>
<div class="level-name">Production</div>
<div class="level-desc">Der finale Boss. Freitag, 17:00 Uhr. "Können wir das noch schnell deployen?" — Nein. Doch. Ohhh!</div>
<div class="level-desc" data-de="Der finale Boss. Freitag, 17:00 Uhr. &quot;Können wir das noch schnell deployen?&quot; — Nein. Doch. Ohhh!" data-en="The final boss. Friday, 5pm. &quot;Can we quickly deploy that?&quot; — No. Yes. Ohhh!">Der finale Boss. Freitag, 17:00 Uhr. "Können wir das noch schnell deployen?" — Nein. Doch. Ohhh!</div>
</div>
</div>
</section>
@@ -472,15 +472,19 @@
<!-- ===== CTA ===== -->
<section class="cta container reveal">
<p class="cta-label">~ PLAYER 1 READY ~</p>
<a href="mailto:commanderkin@msbls.de" class="btn-start">Press START</a>
<p class="cta-label" data-de="~ PLAYER 1 READY ~" data-en="~ PLAYER 1 READY ~">~ PLAYER 1 READY ~</p>
<a href="mailto:commanderkin@msbls.de" class="btn-start" data-de="Press START" data-en="Press START">Press START</a>
</section>
<!-- ===== FOOTER ===== -->
<footer class="footer">
<div class="container">
<p class="insert-coin">INSERT COIN TO CONTINUE</p>
<p class="footer-sub">&copy; 2026 CommanderKIn &mdash; Powered by Pixel &amp; KI</p>
<p class="insert-coin" data-de="INSERT COIN TO CONTINUE" data-en="INSERT COIN TO CONTINUE">INSERT COIN TO CONTINUE</p>
<p class="footer-sub" data-de="&copy; 2026 CommanderKIn &mdash; Powered by Pixel &amp; KI" data-en="&copy; 2026 CommanderKIn &mdash; Powered by Pixel &amp; AI">&copy; 2026 CommanderKIn &mdash; Powered by Pixel &amp; KI</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 #333;color:#333;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:#333;font-size:0.6rem;opacity:0.5;">Maschinell übersetzt</small>
</div>
</div>
</footer>
@@ -510,5 +514,6 @@ document.addEventListener('keydown', (e) => {
});
</script>
<script src="/shared/i18n.js"></script>
</body>
</html>