diff --git a/public/dashboard/home.php b/public/dashboard/home.php index 868cbc0..d9cb044 100644 --- a/public/dashboard/home.php +++ b/public/dashboard/home.php @@ -3,14 +3,20 @@ ?> - + - <?= e(t('home.title')) ?> + <?= e(t('home.title')) ?> + diff --git a/public/database/logo/logo.png b/public/database/logo/logo.png new file mode 100644 index 0000000..c936f37 Binary files /dev/null and b/public/database/logo/logo.png differ diff --git a/public/language.php b/public/language.php index 791d016..8094b83 100644 --- a/public/language.php +++ b/public/language.php @@ -8,84 +8,123 @@ function supported_languages() { } if (!function_exists('normalize_language')) { - function normalize_language($lang) { - $lang = strtolower((string)$lang); - return in_array($lang, supported_languages(), true) ? $lang : ''; + function normalize_language($language) { + $language = strtolower((string)$language); + return in_array($language, supported_languages(), true) ? $language : ''; } } if (!function_exists('bootstrap_language')) { function bootstrap_language() { - $lang = ''; + $language = ''; - if (isset($_GET['lang'])) { - $lang = normalize_language($_GET['lang']); - if ($lang !== '') { - $_SESSION['lang'] = $lang; + if (isset($_GET['language'])) { + $language = normalize_language($_GET['language']); + if ($language !== '') { + $_SESSION['language'] = $language; } } - if ($lang === '' && isset($_SESSION['lang'])) { - $lang = normalize_language($_SESSION['lang']); + if ($language === '' && isset($_SESSION['language'])) { + $language = normalize_language($_SESSION['language']); + if ($language === '') { + unset($_SESSION['language']); + } } - if ($lang === '') { + if ($language === '') { $acceptLanguage = (string)($_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? ''); foreach (preg_split('/\s*,\s*/', $acceptLanguage) as $entry) { $candidate = normalize_language(substr($entry, 0, 2)); if ($candidate !== '') { - $lang = $candidate; + $language = $candidate; break; } } } - if ($lang === '') { - $lang = 'de'; + if ($language === '') { + $language = 'de'; } - $_SESSION['lang'] = $lang; - $GLOBALS['app_lang'] = $lang; + $_SESSION['language'] = $language; + $GLOBALS['app_language'] = $language; } } -if (!function_exists('current_lang')) { - function current_lang() { - return (string)($GLOBALS['app_lang'] ?? 'de'); +if (!function_exists('current_language')) { + function current_language() { + return (string)($GLOBALS['app_language'] ?? 'de'); + } +} + +if (!function_exists('with_language')) { + function with_language($url, $language = null) { + $language = normalize_language($language ?? current_language()); + if ($language === '') { + $language = current_language(); + } + + $parts = parse_url((string)$url); + $path = $parts['path'] ?? '/'; + $query = []; + if (!empty($parts['query'])) { + parse_str($parts['query'], $query); + } + + $query['language'] = $language; + $qs = http_build_query($query); + $result = $path . ($qs !== '' ? '?' . $qs : ''); + + if (!empty($parts['fragment'])) { + $result .= '#' . $parts['fragment']; + } + + return $result; + } +} + +if (!function_exists('current_url_with_language')) { + function current_url_with_language($language) { + $current = (string)($_SERVER['REQUEST_URI'] ?? '/dashboard/home.php'); + return with_language($current, $language); + } +} + +if (!function_exists('e')) { + function e($s) { + return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); } } if (!function_exists('t')) { function t($key) { - static $translations = [ + $language = current_language(); + $translations = [ 'de' => [ - 'home.title' => 'Startseite', + 'nav.home' => 'Startseite', + 'nav.github' => 'Github', + 'nav.contact' => 'Kontakt', + 'nav.language_switcher' => 'Sprachwechsel', + 'home.title' => 'Nexory.Org', ], 'en' => [ - 'home.title' => 'Home', - ], + 'nav.home' => 'Home', + 'nav.github' => 'Github', + 'nav.contact' => 'Contact', + 'nav.language_switcher' => 'Language Switcher', + 'home.title' => 'Nexory.Org', + ] ]; - $lang = current_lang(); - if (!isset($translations[$lang])) { - $lang = 'de'; + $language = current_language(); + if (isset($translations[$language][$key])) { + return $translations[$language][$key]; } - if (isset($translations[$lang][$key])) { - return $translations[$lang][$key]; + if (isset($translations['en'][$key])) { + return $translations['en'][$key]; } - - if (isset($translations['de'][$key])) { - return $translations['de'][$key]; - } - return (string)$key; } -} - -if (!function_exists('e')) { - function e($value) { - return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8'); - } -} - +} \ No newline at end of file diff --git a/public/navebar/navebar.php b/public/navebar/navebar.php index 812be1e..16ea8d5 100644 --- a/public/navebar/navebar.php +++ b/public/navebar/navebar.php @@ -1,17 +1,17 @@