query('SELECT text FROM i18n_missing ORDER BY hits DESC, text')->fetchAll(PDO::FETCH_COLUMN) as $t) $out[$t] = ''; foreach ($existing as $k => $v) if (is_string($v) && ($k === '' || $k[0] !== '_')) $out[$k] = $v; $out = ['_info' => 'Schlüssel = deutscher Text, Wert = Übersetzung. {} steht für wechselnde Teile. Leere Werte werden ignoriert.'] + $out; header('Content-Type: application/json; charset=utf-8'); header('Content-Disposition: attachment; filename="strings-' . preg_replace('/[^a-z\-]/', '', $code) . '.json"'); echo json_encode($out, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); exit; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { verify_csrf(); $action = $_POST['action'] ?? ''; if ($action === 'save') { $def = strtolower((string) ($_POST['default_language'] ?? 'de')); set_setting('default_language', isset($langs[$def]) ? $def : 'de'); set_setting('i18n_collect', !empty($_POST['i18n_collect']) ? '1' : '0'); audit_log($admin['id'], 'Sprach-Einstellungen geändert'); flash('success', 'Gespeichert.'); } elseif ($action === 'clear') { $pdo->exec('DELETE FROM i18n_missing'); flash('success', 'Gesammelte Texte gelöscht.'); } redirect('/staff/languages.php'); } $collected = (int) $pdo->query('SELECT COUNT(*) FROM i18n_missing')->fetchColumn(); $collect = get_setting('i18n_collect', '0') === '1'; $pageTitle = 'Sprachen'; $activePage = 'languages'; require __DIR__ . '/_header.php'; ?>

Sprachen

Jede Sprache ist ein Plugin („Sprachpaket“): Deutsch ist eingebaut, weitere Sprachen installieren Sie unter Plugins. Besucher und Mitarbeiter wechseln die Sprache über die Flaggen. Texte ohne Übersetzung bleiben deutsch.

Installierte Sprachen

$l): $n = $code === 'de' ? null : i18n_dictionary($code)['count']; ?>

Noch kein Sprachpaket aktiv. Installieren Sie zum Beispiel „English“ unter Plugins; dann erscheinen die Flaggen.

Einstellungen

Gesammelte Texte:

Das sind deutsche Texte, die der Sammelmodus gesehen hat. Sie bilden die Vorlage für ein neues Sprachpaket.

Eigene Sprache als Plugin erstellen

  1. Sammelmodus einschalten, die Seiten durchklicken, dann bei Deutsch „Leere Vorlage laden“ (alle gesammelten Texte, noch ohne Übersetzung). Für Ergänzungen zu einer vorhandenen Sprache bei dieser „Vorlage laden“: bereits Übersetztes ist eingetragen.
  2. In der Datei strings.json die Werte übersetzen. Der Schlüssel ist der deutsche Text, {} steht für wechselnde Teile („Willkommen, {}“ → „Welcome, {}“).
  3. Ordner mit diesen Dateien packen: plugin.json, plugin.php (kann leer sein), flag.svg (Flagge, höchstens 40 KB), strings.json.
  4. Die plugin.json sieht so aus: {"name":"Français","version":"1.0.0","entry":"plugin.php","language":{"code":"fr","name":"Français","flag":"flag.svg","strings":"strings.json"}}
  5. ZIP unter Plugins hochladen und aktivieren (das Sprachpaket braucht keine Berechtigungen). Die Flagge erscheint sofort.