fix(i18n): map gallery + hero + floorplan images to real filenames; force-DE on legal pages

- home: map 9/12 gallery items to real filenames (Wohnzimmer-1 -> wohnzimmer2.png,
  Badezimmer-1 -> Bad.jpg, etc.); remove 3 items whose source images are missing
- home: hero-bg.jpg -> Außenansicht-2.webp (file exists)
- home: floorplan image -> /bilder/grundrisse/<name>.png (subdir + correct name)
- layout: og:image fallback Aussenansicht-2.webp (ASCII) -> Außenansicht-2.png (UTF-8)
- layout: hero-bg.jpg fallback -> Außenansicht-2.png (UTF-8)
- Controller::render(): add $forceLocale param for legal pages
- ImpressumController / DatenschutzController: force 'de' (TMG §5 / GDPR)
  so <html lang=de> is emitted regardless of cookie
This commit is contained in:
Hermes
2026-06-04 16:13:54 +00:00
parent d9b4c71735
commit 4bc035b783
5 changed files with 50 additions and 38 deletions

View File

@@ -11,17 +11,18 @@ class DatenschutzController extends Controller
{
public function index(): void
{
$locale = LocaleController::current();
// Legal pages (Datenschutzerklärung) must be served in German only by GDPR / German law.
// Force German locale for render() so <html lang="de"> + German meta are emitted
// regardless of cookie/Accept-Language.
$this->render('datenschutz/index', [
'pageTitle' => I18n::t('legal.privacy_h1', [], $locale) . ' ' . I18n::t('site.title', [], $locale),
'pageDescription' => I18n::t('legal.privacy_h1', [], $locale) . ' ' . I18n::t('site.title', [], $locale),
'pageTitle' => I18n::t('legal.privacy_h1', [], 'de') . ' ' . I18n::t('site.title', [], 'de'),
'pageDescription' => I18n::t('legal.privacy_h1', [], 'de') . ' ' . I18n::t('site.title', [], 'de'),
'robots' => 'noindex',
'canonical' => I18n::t('site.canonical_base', [], $locale) . '/datenschutz',
'ogLocale' => Locale::toOgLocale($locale),
'ogUrl' => I18n::t('site.canonical_base', [], $locale) . '/datenschutz',
'ogTitle' => I18n::t('legal.privacy_h1', [], $locale),
'ogDescription' => I18n::t('legal.privacy_h1', [], $locale),
]);
'canonical' => I18n::t('site.canonical_base', [], 'de') . '/datenschutz',
'ogLocale' => Locale::toOgLocale('de'),
'ogUrl' => I18n::t('site.canonical_base', [], 'de') . '/datenschutz',
'ogTitle' => I18n::t('legal.privacy_h1', [], 'de'),
'ogDescription' => I18n::t('legal.privacy_h1', [], 'de'),
], 'main', 'de');
}
}