0, 'path' => '/', 'domain' => '', 'secure' => (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'), 'httponly' => true, 'samesite' => 'Lax', ]); session_start(); } } // ----------------------------------------------------------- // 1) Sprache bestimmen (vor dem Laden der JSON-Dateien!) // ----------------------------------------------------------- $lang = $_GET['lang'] ?? null; if (is_string($lang)) { $lang = strtolower($lang); if (!preg_match('/^[a-z]{2}$/', $lang)) { $lang = null; } } else { $lang = null; } // ----------------------------------------------------------- // 2) Verfügbare JSON-Sprachen erkennen // ----------------------------------------------------------- $i18nDir = __DIR__ . '/../public/assets/i18n'; $langFiles = []; if (is_dir($i18nDir)) { $langFiles = glob($i18nDir . '/*.json') ?: []; } $availableLangs = []; // Alle vorhandenen JSONs einsammeln foreach ($langFiles as $file) { $json = json_decode(@file_get_contents($file), true); if (!is_array($json) || !isset($json['meta'])) { continue; } $meta = $json['meta']; // Option: nur Sprachen mit enabled=true anzeigen (Template-Dateien rausfiltern) if (isset($meta['enabled']) && $meta['enabled'] === false) { continue; } $code = isset($meta['code']) && is_string($meta['code']) ? strtolower($meta['code']) : strtolower(basename($file, '.json')); $availableLangs[$code] = [ 'code' => $code, 'label' => $meta['label'] ?? strtoupper($code), 'flag' => $meta['flag'] ?? '🏳️', ]; } // Falls keine Sprachdateien gefunden wurden → Minimal-Fallback if (empty($availableLangs)) { $availableLangs = [ 'en' => [ 'code' => 'en', 'label' => 'English', 'flag' => '🇬🇧', ], ]; } // Falls Sprache ungültig oder nicht in available → erste verfügbare Sprache wählen if (!$lang || !isset($availableLangs[$lang])) { $keys = array_keys($availableLangs); $lang = $keys[0] ?? 'en'; } // ----------------------------------------------------------- // 3) Aktive Sprachdatei laden // ----------------------------------------------------------- $activeLangFile = $i18nDir . '/' . $lang . '.json'; $activeLangData = []; if (is_readable($activeLangFile)) { $json = json_decode(@file_get_contents($activeLangFile), true); if (is_array($json)) { $activeLangData = $json; } } // ----------------------------------------------------------- // 4) Fallback-Sprache (EN) // ----------------------------------------------------------- $fallbackLangData = []; $fallbackFile = $i18nDir . '/en.json'; if ($lang !== 'en' && is_readable($fallbackFile)) { $json = json_decode(@file_get_contents($fallbackFile), true); if (is_array($json)) { $fallbackLangData = $json; } } // ----------------------------------------------------------- // 5) Globale i18n-Struktur bereitstellen // ----------------------------------------------------------- $GLOBALS['lang'] = $lang; $GLOBALS['availableLangs'] = $availableLangs; $GLOBALS['i18n'] = [ 'current' => $activeLangData, 'fallback' => $fallbackLangData, ]; // ----------------------------------------------------------- // 6) Rest des Systems laden // ----------------------------------------------------------- require_once __DIR__ . "/db.php"; require_once __DIR__ . '/../src/functions.php';