oh gott was mach ich nur
This commit is contained in:
@@ -133,8 +133,9 @@ function tpl(string $file, string $type = 'structure', string $site = 'main'): v
|
||||
/**
|
||||
* Flash-Meldung setzen (wird genau einmal nach Redirect angezeigt).
|
||||
*
|
||||
* @param string $type z.B. 'success', 'error', 'info', 'warning'
|
||||
* @param string $message Die Meldung für den Nutzer
|
||||
* @param string $type z.B. 'success', 'error', 'info', 'warning'
|
||||
* @param string $message Die Meldung für den Nutzer
|
||||
* @param string|null $context Optionaler Kontext (z.B. 'login', 'register')
|
||||
*/
|
||||
function flash_set(string $type, string $message, ?string $context = null): void
|
||||
{
|
||||
@@ -152,7 +153,7 @@ function flash_set(string $type, string $message, ?string $context = null): void
|
||||
/**
|
||||
* Flash-Meldung holen und direkt löschen (Einmal-Anzeige).
|
||||
*
|
||||
* @return array|null ['type' => 'success|error|info|warning', 'message' => '...']
|
||||
* @return array|null ['type' => 'success|error|info|warning', 'message' => '...', 'context' => '...']
|
||||
*/
|
||||
function flash_get(): ?array
|
||||
{
|
||||
@@ -173,3 +174,103 @@ function flash_get(): ?array
|
||||
|
||||
return $flash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Interne Helper-Funktion: traversiert ein Array mit "dot notation"-Segmenten.
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $key z.B. 'pages.landing.meta.title'
|
||||
* @return mixed|null
|
||||
*/
|
||||
function _i18n_traverse_array(array $data, string $key)
|
||||
{
|
||||
$segments = explode('.', $key);
|
||||
$node = $data;
|
||||
|
||||
foreach ($segments as $seg) {
|
||||
if (!is_array($node) || !array_key_exists($seg, $node)) {
|
||||
return null;
|
||||
}
|
||||
$node = $node[$seg];
|
||||
}
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Zentrale Funktion zum Laden eines i18n-Strings mit Fallback.
|
||||
*
|
||||
* - greift zuerst auf $GLOBALS['i18n']['current'] zu
|
||||
* - dann auf $GLOBALS['i18n']['fallback']
|
||||
* - unterstützt Platzhalter {key} und {{key}}
|
||||
* - eingebaute Platzhalter:
|
||||
* {year}
|
||||
* {{primary_domain}}
|
||||
* {{primary_url}}
|
||||
*
|
||||
* @param string $path z.B. 'pages.login.meta.title'
|
||||
* @param mixed $default Fallback, falls nichts gefunden wird
|
||||
* @param array $replacements ['name' => 'Lars']
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function i18n_get(string $path, $default = null, array $replacements = []): string
|
||||
{
|
||||
if (!isset($GLOBALS['i18n']) || !is_array($GLOBALS['i18n'])) {
|
||||
return $default !== null ? (string)$default : '';
|
||||
}
|
||||
|
||||
$current = $GLOBALS['i18n']['current'] ?? [];
|
||||
$fallback = $GLOBALS['i18n']['fallback'] ?? [];
|
||||
|
||||
// zuerst in der aktiven Sprache suchen
|
||||
$value = _i18n_traverse_array($current, $path);
|
||||
|
||||
// wenn dort nichts → Fallback-Sprache
|
||||
if ($value === null && !empty($fallback)) {
|
||||
$value = _i18n_traverse_array($fallback, $path);
|
||||
}
|
||||
|
||||
if (!is_string($value)) {
|
||||
return $default !== null ? (string)$default : '';
|
||||
}
|
||||
|
||||
$text = $value;
|
||||
|
||||
// eingebaute Platzhalter
|
||||
$builtIn = [
|
||||
'{year}' => date('Y'),
|
||||
'{{primary_domain}}' => function_exists('app_primary_domain') ? app_primary_domain() : '',
|
||||
'{{primary_url}}' => function_exists('app_primary_url') ? app_primary_url() : '',
|
||||
];
|
||||
|
||||
foreach ($builtIn as $ph => $val) {
|
||||
$text = str_replace($ph, $val, $text);
|
||||
}
|
||||
|
||||
// zusätzliche Platzhalter aus $replacements
|
||||
foreach ($replacements as $key => $val) {
|
||||
$val = (string)$val;
|
||||
// Variante {key}
|
||||
$text = str_replace('{' . $key . '}', $val, $text);
|
||||
// Variante {{key}}
|
||||
$text = str_replace('{{' . $key . '}}', $val, $text);
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience-Wrapper für i18n_get, etwas "kürzer" zu tippen
|
||||
* und vom bisherigen Code kompatibel genutzt.
|
||||
*
|
||||
* Beispiel:
|
||||
* i18n_get_fmt('fake_ui.log_capacity_probe_result', 'Fallback', ['size' => '2 GB']);
|
||||
*/
|
||||
function i18n_get_fmt(string $path, $default = '', array $vars = []): string
|
||||
{
|
||||
// Falls $default explizit null ist → leere String als Basis
|
||||
$def = $default ?? '';
|
||||
|
||||
return i18n_get($path, $def, $vars);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user