fallback = [ 'common' => [ 'title' => 'Papa-Kind-Treff', 'intro' => 'Väter vernetzen sich für Treffen mit und ohne Kinder.', ], 'cta' => [ 'primary' => 'Weiter', ], ]; $this->current = $this->fallback; } private function traverse(array $data, string $key): mixed { $node = $data; foreach (explode('.', $key) as $seg) { if (!is_array($node) || !array_key_exists($seg, $node)) { return null; } $node = $node[$seg]; } return $node; } public function get(string $key, $default = '', array $vars = []): string { $val = $this->traverse($this->current, $key); if ($val === null) { $val = $this->traverse($this->fallback, $key); } if (!is_string($val)) { $val = (string)($default ?? ''); } // Built-ins $val = str_replace('{year}', date('Y'), $val); $val = str_replace('{{primary_url}}', $this->config->primaryUrl, $val); foreach ($vars as $k => $v) { $val = str_replace('{' . $k . '}', (string)$v, $val); $val = str_replace('{{' . $k . '}}', (string)$v, $val); } return $val; } }