From e5e32d20a1ab40a583facaf14b8571662e2b5bfc Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 26 Nov 2025 22:33:37 +0100 Subject: [PATCH] as --- config/fileload.php | 70 ++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/config/fileload.php b/config/fileload.php index 480ae21..5dd6035 100644 --- a/config/fileload.php +++ b/config/fileload.php @@ -25,7 +25,7 @@ if (php_sapi_name() !== 'cli') { } // ----------------------------------------------------------- -// 1) Sprache bestimmen (vor dem Laden der JSON-Dateien!) +// 1) Sprache aus GET (optional) ermitteln // ----------------------------------------------------------- $lang = $_GET['lang'] ?? null; @@ -38,6 +38,21 @@ if (is_string($lang)) { $lang = null; } +// ----------------------------------------------------------- +// 1b) Browser-Sprache aus HTTP_ACCEPT_LANGUAGE +// ----------------------------------------------------------- +$browserLang = null; +if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + $accept = $_SERVER['HTTP_ACCEPT_LANGUAGE']; + $parts = explode(',', $accept); + if (!empty($parts[0])) { + $primary = strtolower(trim($parts[0])); + if (preg_match('/^([a-z]{2})/', $primary, $m)) { + $browserLang = $m[1]; // z.B. "de" aus "de-DE" + } + } +} + // ----------------------------------------------------------- // 2) Verfügbare JSON-Sprachen erkennen // ----------------------------------------------------------- @@ -67,34 +82,26 @@ foreach ($langFiles as $file) { // meta ist optional $meta = $json['meta'] ?? []; - // Option: nur Sprachen mit enabled=false ausblenden + // Optional: Sprachen mit enabled=false ausblenden if (array_key_exists('enabled', $meta) && $meta['enabled'] === false) { continue; } - // Sprachcode bestimmen + // Sprachcode bestimmen (meta.code oder Dateiname) $code = strtolower($meta['code'] ?? basename($file, '.json')); - // Nur 2-Buchstaben-Codes zulassen (de, en, fr, it, ...) + // Nur 2-Buchstaben-Codes zulassen (de, en, fr, it, dk, es, ...) if (!preg_match('/^[a-z]{2}$/', $code)) { // Sonderdatei (z.B. template.json) ignorieren continue; } - // Label + // Label: aus meta.label oder Fallback = strtoupper(code) $label = $meta['label'] ?? strtoupper($code); - // Default-Flag nach Code - $defaultFlag = '🏳️'; - switch ($code) { - case 'de': $defaultFlag = '🇩🇪'; break; - case 'en': $defaultFlag = '🇬🇧'; break; - case 'fr': $defaultFlag = '🇫🇷'; break; - case 'it': $defaultFlag = '🇮🇹'; break; - } - - // Flag aus meta oder Default - $flag = $meta['flag'] ?? $defaultFlag; + // Flag: ausschließlich aus meta.flag oder neutrale Flagge, + // KEINE festen Mappings mehr für de/en/fr/it + $flag = $meta['flag'] ?? '🏳️'; $availableLangs[$code] = [ 'code' => $code, @@ -114,13 +121,20 @@ if (empty($availableLangs)) { ]; } -// Falls Sprache ungültig oder nicht in available: -// 1) Wenn 'de' existiert → nimm 'de' -// 2) sonst, wenn 'en' existiert → nimm 'en' -// 3) sonst: erste verfügbare Sprache -if (!$lang || !isset($availableLangs[$lang])) { - if (isset($availableLangs['de'])) { - $lang = 'de'; +// ----------------------------------------------------------- +// 3) Endgültige Sprache bestimmen (ohne harte Standardsprachen) +// +// Reihenfolge: +// a) ?lang=xx → wenn gültig und in available +// b) Browser-Sprache → wenn in available +// c) 'en', wenn vorhanden +// d) sonst: erste verfügbare Sprache +// ----------------------------------------------------------- +if ($lang && isset($availableLangs[$lang])) { + // GET-Parameter ist gültig, nichts weiter tun +} else { + if ($browserLang && isset($availableLangs[$browserLang])) { + $lang = $browserLang; } elseif (isset($availableLangs['en'])) { $lang = 'en'; } else { @@ -129,9 +143,8 @@ if (!$lang || !isset($availableLangs[$lang])) { } } - // ----------------------------------------------------------- -// 3) Aktive Sprachdatei laden +// 4) Aktive Sprachdatei laden // ----------------------------------------------------------- $activeLangFile = $i18nDir . '/' . $lang . '.json'; $activeLangData = []; @@ -144,7 +157,7 @@ if (is_readable($activeLangFile)) { } // ----------------------------------------------------------- -// 4) Fallback-Sprache (EN) +// 5) Fallback-Sprache (EN), falls vorhanden // ----------------------------------------------------------- $fallbackLangData = []; $fallbackFile = $i18nDir . '/en.json'; @@ -157,7 +170,7 @@ if ($lang !== 'en' && is_readable($fallbackFile)) { } // ----------------------------------------------------------- -// 5) Globale i18n-Struktur bereitstellen +// 6) Globale i18n-Struktur bereitstellen // ----------------------------------------------------------- $GLOBALS['lang'] = $lang; $GLOBALS['availableLangs'] = $availableLangs; @@ -167,9 +180,8 @@ $GLOBALS['i18n'] = [ 'fallback' => $fallbackLangData, ]; -$lang = $GLOBALS['lang'] ?? 'de'; // ----------------------------------------------------------- -// 6) Rest des Systems laden +// 7) Rest des Systems laden // ----------------------------------------------------------- require_once __DIR__ . "/db.php"; require_once __DIR__ . '/../src/functions.php';