This commit is contained in:
2025-11-26 22:33:37 +01:00
parent 6b4e99bf32
commit e5e32d20a1

View File

@@ -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; $lang = $_GET['lang'] ?? null;
@@ -38,6 +38,21 @@ if (is_string($lang)) {
$lang = null; $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 // 2) Verfügbare JSON-Sprachen erkennen
// ----------------------------------------------------------- // -----------------------------------------------------------
@@ -67,34 +82,26 @@ foreach ($langFiles as $file) {
// meta ist optional // meta ist optional
$meta = $json['meta'] ?? []; $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) { if (array_key_exists('enabled', $meta) && $meta['enabled'] === false) {
continue; continue;
} }
// Sprachcode bestimmen // Sprachcode bestimmen (meta.code oder Dateiname)
$code = strtolower($meta['code'] ?? basename($file, '.json')); $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)) { if (!preg_match('/^[a-z]{2}$/', $code)) {
// Sonderdatei (z.B. template.json) ignorieren // Sonderdatei (z.B. template.json) ignorieren
continue; continue;
} }
// Label // Label: aus meta.label oder Fallback = strtoupper(code)
$label = $meta['label'] ?? strtoupper($code); $label = $meta['label'] ?? strtoupper($code);
// Default-Flag nach Code // Flag: ausschließlich aus meta.flag oder neutrale Flagge,
$defaultFlag = '🏳️'; // KEINE festen Mappings mehr für de/en/fr/it
switch ($code) { $flag = $meta['flag'] ?? '🏳️';
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;
$availableLangs[$code] = [ $availableLangs[$code] = [
'code' => $code, 'code' => $code,
@@ -114,13 +121,20 @@ if (empty($availableLangs)) {
]; ];
} }
// Falls Sprache ungültig oder nicht in available: // -----------------------------------------------------------
// 1) Wenn 'de' existiert → nimm 'de' // 3) Endgültige Sprache bestimmen (ohne harte Standardsprachen)
// 2) sonst, wenn 'en' existiert → nimm 'en' //
// 3) sonst: erste verfügbare Sprache // Reihenfolge:
if (!$lang || !isset($availableLangs[$lang])) { // a) ?lang=xx → wenn gültig und in available
if (isset($availableLangs['de'])) { // b) Browser-Sprache → wenn in available
$lang = 'de'; // 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'])) { } elseif (isset($availableLangs['en'])) {
$lang = 'en'; $lang = 'en';
} else { } else {
@@ -129,9 +143,8 @@ if (!$lang || !isset($availableLangs[$lang])) {
} }
} }
// ----------------------------------------------------------- // -----------------------------------------------------------
// 3) Aktive Sprachdatei laden // 4) Aktive Sprachdatei laden
// ----------------------------------------------------------- // -----------------------------------------------------------
$activeLangFile = $i18nDir . '/' . $lang . '.json'; $activeLangFile = $i18nDir . '/' . $lang . '.json';
$activeLangData = []; $activeLangData = [];
@@ -144,7 +157,7 @@ if (is_readable($activeLangFile)) {
} }
// ----------------------------------------------------------- // -----------------------------------------------------------
// 4) Fallback-Sprache (EN) // 5) Fallback-Sprache (EN), falls vorhanden
// ----------------------------------------------------------- // -----------------------------------------------------------
$fallbackLangData = []; $fallbackLangData = [];
$fallbackFile = $i18nDir . '/en.json'; $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['lang'] = $lang;
$GLOBALS['availableLangs'] = $availableLangs; $GLOBALS['availableLangs'] = $availableLangs;
@@ -167,9 +180,8 @@ $GLOBALS['i18n'] = [
'fallback' => $fallbackLangData, 'fallback' => $fallbackLangData,
]; ];
$lang = $GLOBALS['lang'] ?? 'de';
// ----------------------------------------------------------- // -----------------------------------------------------------
// 6) Rest des Systems laden // 7) Rest des Systems laden
// ----------------------------------------------------------- // -----------------------------------------------------------
require_once __DIR__ . "/db.php"; require_once __DIR__ . "/db.php";
require_once __DIR__ . '/../src/functions.php'; require_once __DIR__ . '/../src/functions.php';