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'; ?>
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.
Noch kein Sprachpaket aktiv. Installieren Sie zum Beispiel „English“ unter Plugins; dann erscheinen die Flaggen.
Jedes Plugin kann seine Texte selbst übersetzen: Es legt dazu im Plugin-Ordner lang/<Sprachcode>.json ab (zum Beispiel lang/en.json). Wird eine Sprache gewählt, nutzt DeskHub diese Dateien aller aktiven Plugins zusätzlich zum Sprachpaket; steht ein Text in beiden, gilt der aus dem Sprachpaket. Eine neue Sprache braucht deshalb nur ein Sprachpaket und je Plugin eine Datei.
Noch kein Sprachpaket aktiv. Installieren Sie zum Beispiel „English“ unter Plugins.
Es ist kein Plugin aktiv.
| Plugin | = e($langs[$c]['name']) ?> (= e($c) ?>) |
|---|---|
| = e((string) $sl) ?> | keine Datei (Texte aus dem Sprachpaket oder deutsch)✓ = (int) $n ?> Texte |
Das sind deutsche Texte, die der Sammelmodus gesehen hat. Sie bilden die Vorlage für ein neues Sprachpaket.
strings.json die Werte übersetzen. Der Schlüssel ist der deutsche Text, {} steht für wechselnde Teile („Willkommen, {}“ → „Welcome, {}“).plugin.json, plugin.php (kann leer sein), flag.svg (Flagge, höchstens 40 KB), strings.json.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"}}