From 7f04c4e246f84e9a05e7da5b9d2ee241f00b7ec1 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 26 Nov 2025 23:42:55 +0100 Subject: [PATCH] asd --- config/fileload.php | 61 +++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/config/fileload.php b/config/fileload.php index 7581783..1a4a307 100644 --- a/config/fileload.php +++ b/config/fileload.php @@ -25,17 +25,36 @@ if (php_sapi_name() !== 'cli') { } // ----------------------------------------------------------- -// Helper: Browser-Sprache aus HTTP_ACCEPT_LANGUAGE bestimmen +// Kleine Helper-Funktion für internes Logging + HTML-Debug +// ----------------------------------------------------------- +function usb_i18n_debug_log(string $msg): void +{ + // 1) In eine eigene Log-Datei schreiben (im config/-Ordner) + $logFile = __DIR__ . '/i18n_debug.log'; + $line = '[' . date('Y-m-d H:i:s') . '] ' . $msg . PHP_EOL; + @file_put_contents($logFile, $line, FILE_APPEND); + + // 2) optional auch ins PHP error_log + @error_log('[i18n] ' . $msg); + + // 3) Bei ?debug_i18n=1 zusätzlich HTML-Kommentar ausgeben + if (isset($_GET['debug_i18n']) && $_GET['debug_i18n'] == '1') { + echo "\n"; + } +} + +// ----------------------------------------------------------- +// Browser-Sprache aus HTTP_ACCEPT_LANGUAGE bestimmen // ----------------------------------------------------------- function usb_detect_browser_lang(array $availableLangs): ?string { if (empty($availableLangs)) { - error_log('[i18n] Browser-Lang: keine availableLangs – abbrechen'); + usb_i18n_debug_log('Browser-Lang: keine availableLangs – abbrechen'); return null; } $header = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? ''; - error_log('[i18n] HTTP_ACCEPT_LANGUAGE: ' . $header); + usb_i18n_debug_log('HTTP_ACCEPT_LANGUAGE: ' . $header); if ($header === '') { return null; @@ -51,20 +70,18 @@ function usb_detect_browser_lang(array $availableLangs): ?string // Sprache vor dem ; nehmen (z.B. "de-DE", "en-US") $langTag = strtolower(explode(';', $part)[0]); - if ($langTag === '') { continue; } - // 2-Buchstaben-Code extrahieren (de, en, fr, …) + // 2-Buchstaben-Code extrahieren $code2 = substr($langTag, 0, 2); - if (!preg_match('/^[a-z]{2}$/', $code2)) { continue; } $exists = array_key_exists($code2, $availableLangs) ? 'yes' : 'no'; - error_log("[i18n] Browser-Lang-Kandidat: {$code2} (exists: {$exists})"); + usb_i18n_debug_log("Browser-Lang-Kandidat: {$code2} (exists: {$exists})"); if (isset($availableLangs[$code2])) { return $code2; @@ -88,7 +105,7 @@ if (is_string($requestedLang)) { $requestedLang = null; } -error_log('[i18n] requestedLang (GET): ' . var_export($requestedLang, true)); +usb_i18n_debug_log('requestedLang (GET): ' . var_export($requestedLang, true)); // ----------------------------------------------------------- // 2) Verfügbare JSON-Sprachen erkennen @@ -106,13 +123,13 @@ $availableLangs = []; foreach ($langFiles as $file) { $raw = @file_get_contents($file); if ($raw === false) { - error_log('[i18n] Konnte Datei nicht lesen: ' . $file); + usb_i18n_debug_log('Konnte Datei nicht lesen: ' . $file); continue; } $json = json_decode($raw, true); if (!is_array($json)) { - error_log('[i18n] Ungültiges JSON in ' . $file . ' :: ' . json_last_error_msg()); + usb_i18n_debug_log('Ungültiges JSON in ' . $file . ' :: ' . json_last_error_msg()); continue; } @@ -120,7 +137,7 @@ foreach ($langFiles as $file) { // Optional: nur Sprachen mit enabled=false ausblenden if (array_key_exists('enabled', $meta) && $meta['enabled'] === false) { - error_log('[i18n] Sprache deaktiviert (enabled=false) in ' . $file); + usb_i18n_debug_log('Sprache deaktiviert (enabled=false) in ' . $file); continue; } @@ -128,7 +145,7 @@ foreach ($langFiles as $file) { $code = strtolower($meta['code'] ?? basename($file, '.json')); if (!preg_match('/^[a-z]{2}$/', $code)) { // Sonderdateien (template.json etc.) ignorieren - error_log('[i18n] Ignoriere Datei mit unpassendem Code: ' . $file); + usb_i18n_debug_log('Ignoriere Datei mit unpassendem Code: ' . $file); continue; } @@ -142,11 +159,11 @@ foreach ($langFiles as $file) { ]; } -error_log('[i18n] availableLangs keys: ' . implode(', ', array_keys($availableLangs))); +usb_i18n_debug_log('availableLangs keys: ' . implode(', ', array_keys($availableLangs))); // Falls keine Sprachdateien gefunden wurden → Minimal-Fallback if (empty($availableLangs)) { - error_log('[i18n] WARN: keine Sprachdateien gefunden, fallback auf en'); + usb_i18n_debug_log('WARN: keine Sprachdateien gefunden, fallback auf en'); $availableLangs = [ 'en' => [ 'code' => 'en', @@ -164,7 +181,7 @@ $lang = null; // 1) ?lang=xx wird bevorzugt, wenn gültig + vorhanden if ($requestedLang && isset($availableLangs[$requestedLang])) { $lang = $requestedLang; - error_log('[i18n] Auswahl: requestedLang übernommen: ' . $lang); + usb_i18n_debug_log('Auswahl: requestedLang übernommen: ' . $lang); } // 2) Sonst HTTP_ACCEPT_LANGUAGE (Browser), erste passende Sprache @@ -172,24 +189,24 @@ if ($lang === null) { $browserLang = usb_detect_browser_lang($availableLangs); if ($browserLang !== null) { $lang = $browserLang; - error_log('[i18n] Auswahl: Browser-Lang übernommen: ' . $lang); + usb_i18n_debug_log('Auswahl: Browser-Lang übernommen: ' . $lang); } } // 3) Wenn Browser-Sprache nicht existiert → 'en', wenn vorhanden if ($lang === null && isset($availableLangs['en'])) { $lang = 'en'; - error_log('[i18n] Auswahl: Fallback auf en, da kein Match'); + usb_i18n_debug_log('Auswahl: Fallback auf en, da kein Match'); } // 4) Sonst: erste Sprache aus $availableLangs if ($lang === null) { $keys = array_keys($availableLangs); $lang = $keys[0] ?? 'en'; - error_log('[i18n] Auswahl: Fallback auf erste Sprache: ' . $lang); + usb_i18n_debug_log('Auswahl: Fallback auf erste Sprache: ' . $lang); } -error_log('[i18n] FINAL LANG: ' . $lang); +usb_i18n_debug_log('FINAL LANG: ' . $lang); // ----------------------------------------------------------- // 4) Aktive Sprachdatei laden @@ -202,10 +219,10 @@ if (is_readable($activeLangFile)) { if (is_array($json)) { $activeLangData = $json; } else { - error_log('[i18n] Aktive JSON nicht array: ' . $activeLangFile); + usb_i18n_debug_log('Aktive JSON nicht array: ' . $activeLangFile); } } else { - error_log('[i18n] Aktive Sprachdatei nicht lesbar: ' . $activeLangFile); + usb_i18n_debug_log('Aktive Sprachdatei nicht lesbar: ' . $activeLangFile); } // ----------------------------------------------------------- @@ -219,7 +236,7 @@ if ($lang !== 'en' && is_readable($fallbackFile)) { if (is_array($json)) { $fallbackLangData = $json; } else { - error_log('[i18n] Fallback-JSON (en) nicht array: ' . $fallbackFile); + usb_i18n_debug_log('Fallback-JSON (en) nicht array: ' . $fallbackFile); } }