SSR control center: English UI strings throughout

Widgets, backend module template and flash messages now match the rest of the backend, which is English.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
orascheandClaude Fable 5 committed 2026-11-09 21:03:40 +01:00
1 parent 91c2ceb5b1
commit fa63871da7
5 files changed
+52 -52

No files matched your search

@@ -88,12 +88,12 @@ final class SsrController
}
if ($paths === []) {
$this->flash('Keine Pfade angegeben.', 'Purge', false);
$this->flash('No paths given.', 'Purge', false);
} else {
$result = $this->purgeService->purge($paths, 'module:' . $user);
$this->flash(
sprintf('HTTP %d — %s', $result['httpCode'], $result['message']),
$result['success'] ? 'Purge erfolgreich' : 'Purge fehlgeschlagen',
$result['success'] ? 'Purge successful' : 'Purge failed',
$result['success']
);
}
@@ -10,8 +10,8 @@ use TYPO3\CMS\Dashboard\Widgets\WidgetInterface;
/**
* Dashboard tile: purge and health statistics from the two protocol
* tables. History depth = what vitec:ssr-health sampling (scheduler)
* and the purge log hold (14 days).
* tables. History depth = what vitec:ssr-health sampling (cron, every
* 5 minutes) and the purge log hold (14 days).
*/
final class SsrStatsWidget implements WidgetInterface
{
@@ -38,15 +38,15 @@ final class SsrStatsWidget implements WidgetInterface
$maxCache = $this->scalar('SELECT MAX(cache_mb) FROM tx_vitec_ssrhealthlog WHERE crdate > ' . $d7);
$rows = [
['Purges (24 h / 7 Tage)', $purges24h . ' / ' . $purges7d],
['davon Komplett-Purges (7 T.)', (string)$full7d],
['Fehlgeschlagene Purges (7 T.)', $failed7d > 0
['Purges (24 h / 7 days)', $purges24h . ' / ' . $purges7d],
['of which full purges (7 d)', (string)$full7d],
['Failed purges (7 d)', $failed7d > 0
? '<span class="badge badge-danger">' . $failed7d . '</span>'
: '<span class="badge badge-success">0</span>'],
['Verfügbarkeit (24 h)', htmlspecialchars($uptime)
. ' <small>(' . $ok24h . '/' . $samples24h . ' Messungen)</small>'],
['&empty; Antwortzeit (24 h)', $avgMs !== null ? $avgMs . ' ms' : '-'],
['Max. Cache-Größe (7 T.)', $maxCache !== null ? $maxCache . ' MB' : '-'],
['Availability (24 h)', htmlspecialchars($uptime)
. ' <small>(' . $ok24h . '/' . $samples24h . ' samples)</small>'],
['Avg. response time (24 h)', $avgMs !== null ? $avgMs . ' ms' : '-'],
['Max. cache size (7 d)', $maxCache !== null ? $maxCache . ' MB' : '-'],
];
$html = '<table class="table table-striped table-sm"><tbody>';
@@ -55,7 +55,7 @@ final class SsrStatsWidget implements WidgetInterface
}
$html .= '</tbody></table>';
if ($samples24h === 0) {
$html .= '<p class="text-muted" style="font-size:11px">Noch keine Messwerte: Scheduler-Task für <code>vitec:ssr-health</code> einrichten (z. B. alle 5 Minuten).</p>';
$html .= '<p class="text-muted" style="font-size:11px">No samples yet: the cron job for <code>vitec:ssr-health</code> fills this every 5 minutes.</p>';
}
return $html;
}
@@ -37,24 +37,24 @@ final class SsrStatusWidget implements WidgetInterface
};
$rows = [];
$rows[] = ['SSR-Auslieferung', $badge($flagOn, 'AN - Seiten kommen vom VPS', 'AUS - SPA wie bisher')];
$rows[] = ['SSR delivery', $badge($flagOn, 'ON - pages served from the VPS', 'OFF - SPA as before')];
if ($health === null) {
$rows[] = ['SSR-Server', '<span class="badge badge-danger">NICHT ERREICHBAR</span>'];
$rows[] = ['SSR server', '<span class="badge badge-danger">NOT REACHABLE</span>'];
} else {
$rows[] = ['SSR-Server', $badge((bool)($health['ok'] ?? false), 'läuft (' . (int)$health['responseMs'] . ' ms)', 'meldet Fehler')];
$rows[] = ['SSR server', $badge((bool)($health['ok'] ?? false), 'running (' . (int)$health['responseMs'] . ' ms)', 'reports errors')];
$rows[] = ['Release', htmlspecialchars((string)($health['release']['release'] ?? '?'))
. ' <small>(Commit ' . htmlspecialchars((string)($health['release']['commit'] ?? '?'))
. ', gebaut ' . htmlspecialchars($this->fmtDate((string)($health['release']['builtAt'] ?? ''))) . ')</small>'];
$rows[] = ['Seiten-Cache', (int)($health['cachedPages'] ?? 0) . ' Seiten / ' . (int)($health['cacheMB'] ?? 0) . ' MB'];
. ' <small>(commit ' . htmlspecialchars((string)($health['release']['commit'] ?? '?'))
. ', built ' . htmlspecialchars($this->fmtDate((string)($health['release']['builtAt'] ?? ''))) . ')</small>'];
$rows[] = ['Page cache', (int)($health['cachedPages'] ?? 0) . ' pages / ' . (int)($health['cacheMB'] ?? 0) . ' MB'];
}
if ($lastPurge !== null) {
$rows[] = ['Letzter Purge', htmlspecialchars(date('d.m. H:i', (int)$lastPurge['crdate']))
$rows[] = ['Last purge', htmlspecialchars(date('m-d H:i', (int)$lastPurge['crdate']))
. ' <small>(' . htmlspecialchars((string)$lastPurge['trigger_source']) . ', '
. ($lastPurge['success'] ? 'ok' : 'FEHLER') . ', '
. ($lastPurge['success'] ? 'ok' : 'FAILED') . ', '
. htmlspecialchars(mb_strimwidth((string)$lastPurge['paths'], 0, 60, '…')) . ')</small>'];
}
if (!$this->purgeService->isConfigured()) {
$rows[] = ['Auto-Purge', '<span class="badge badge-warning">nicht konfiguriert (var/vitec-ssr-purge.env fehlt)</span>'];
$rows[] = ['Auto purge', '<span class="badge badge-warning">not configured (var/vitec-ssr-purge.env missing)</span>'];
}
$html = '<table class="table table-striped table-sm"><tbody>';
@@ -62,7 +62,7 @@ final class SsrStatusWidget implements WidgetInterface
$html .= '<tr><th style="width:38%">' . htmlspecialchars($label) . '</th><td>' . $value . '</td></tr>';
}
$html .= '</tbody></table>';
$html .= '<p class="text-muted" style="font-size:11px">Schalter: Site Management &rsaquo; Settings &rsaquo; VITEC. Modul "VITEC SSR" für Purge &amp; Protokoll.</p>';
$html .= '<p class="text-muted" style="font-size:11px">Switch: Site Management &rsaquo; Settings &rsaquo; VITEC. Module "VITEC SSR" for purge &amp; protocol.</p>';
return $html;
}
@@ -112,6 +112,6 @@ final class SsrStatusWidget implements WidgetInterface
private function fmtDate(string $iso): string
{
$ts = strtotime($iso);
return $ts ? date('d.m.Y H:i', $ts) : '?';
return $ts ? date('Y-m-d H:i', $ts) : '?';
}
}