Multi-Language MVP: 4 Locales (DE/EN/UK/RU) mit SSR + UI + Tests #79
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/multilanguage-mvp"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Multi-Language Feature MVP (closes #71)
Komplettes i18n-Setup für die Landingpage in 4 Sprachen (DE/EN/UK/RU) mit PHP-Server-Side-Rendering, Locale-Switcher-UI und PHPUnit-Tests.
Sub-Issues (alle enthalten)
t()-HelperArchitektur (ADR-002)
app/Locales/*.php,t("key")-Helper/de/-URL-Prefixt() → Controller-Override → Locale-Resolver → Default-DEUI-Features
<details>-Dropdown für Desktop+Mobilede.svg,gb.svg,ua.svg,ru.svg) — CC-BY 4.0 Lipis flag-iconsaria-current="true"::marker+ Safari<li>list-style:none+ Chrome::-webkit-details-marker)?v=<filemtime>für HTML→CSS-URL (gegen Varnish-Cache-Desync)Mobile-Overflow-Fixes
.introhorizontaler Scrollbar auf mobile → Grid-Itemmin-width: 0+ Statsflex-wrap: wrap.hero-contentFlex-Item-Schrumpfung →min-width: 0; max-width: 100%.pricing-sectionMobile-Padding →padding: 4rem 1.5rem; grid-template-columns: 1frTests
Weitere Commits
a879aa0Cache-Buster?v=<filemtime>38410c4Hero-CTA "Entdecken" entfernt949ab20+a765497Mobile-Overflow-Fixesacaea97+70691ff+08235b0Flag-UI-Refactor (32×24, inline-SVGs → externe Assets)Deployment-Hinweise
/mit Cookie-basiertem Locale, kein/de/-PrefixHost: haus.test.kies-media.dekill -USR2 <fpm-master-pid>Closes #71, closes #72, closes #73, closes #74, closes #75, closes #76, closes #77
- App\Core\Locale: query-param > cookie > Accept-Language > 'de' fallback - BCP-47 region stripping (en-US -> en, uk-UA -> uk) - q-value sorting with stable order - og:locale mapping (de_DE, en_GB, uk_UA, ru_RU) - hreflang alternates helper - App\Core\I18n: t() with {placeholder} interpolation, lookup chain current-locale -> de -> key, in-memory cache - ADR-002: documents the architecture decision - 46 PHPUnit tests (LocaleTest, I18nTest), all greenProblem: Bei viewports <375px loest die CSS-Grid '1fr'-Spalte auf die min-content-breite von .intro-stats auf (~300px), weil grid-items standardmaessig 'min-width: auto' haben. Das sprengt das grid und erzeugt horizontalen overflow (docScrollW=359 bei 320px viewport). Loesung: - .intro-grid { min-width: 0 } erlaubt der spalte unter min-content zu schrumpfen und respektiert den verfuegbaren platz - .intro-stats { flex-wrap: wrap; gap: 1.5rem 2rem } erlaubt den 3 stat-boxen + badge auf 2 zeilen zu wrappen - .intro-stats > .stat { flex: 1 1 auto; min-width: 0 } sauberes wrapping der einzelnen boxes Diagnose: Playwright computed styles + bounding box bei 280/320/360/375px Result: docScrollW == viewport bei 360+, 320, 280 (vorher 359/320). Tests: 141/141 gruen.