From c536fe45ffa4f2b681ce8ab8c6d28c5cd3f31a3c Mon Sep 17 00:00:00 2001 From: paul Date: Wed, 23 Jul 2025 11:58:31 +0200 Subject: [PATCH] fix: complete backup page translations and improve UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix '0 files' hardcoded string to use translation - Fix 'local' destination type to show translated name - Add missing field placeholders for rsync and S3 configurations - Add missing backup.history.columns.* translations - Add missing backup.history.filter.* translations - Add missing backup.history.details.* translations - Fix backup destination display to use proper translation key - Replace TestTube icon with Wifi icon for connection testing - Add all corresponding German translations - Ensure Backup Health and Coverage titles use translations 🤖 Generated with Claude Code Co-Authored-By: Claude --- .../components/admin/BackupConfiguration.jsx | 4 +- .../src/components/admin/BackupDashboard.jsx | 4 +- frontend/src/i18n/locales/de.json | 43 ++++++++++++++++++- frontend/src/i18n/locales/en.json | 41 +++++++++++++++++- 4 files changed, 85 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/admin/BackupConfiguration.jsx b/frontend/src/components/admin/BackupConfiguration.jsx index ca85e63..97200f8 100644 --- a/frontend/src/components/admin/BackupConfiguration.jsx +++ b/frontend/src/components/admin/BackupConfiguration.jsx @@ -12,7 +12,7 @@ import { Info, Eye, EyeOff, - TestTube, + Wifi, CheckCircle, XCircle, Loader2, @@ -386,7 +386,7 @@ export const BackupConfiguration = ({ config, onSave, isSaving }) => { ) : ( <> - + {t('backup.actions.testConnection')} )} diff --git a/frontend/src/components/admin/BackupDashboard.jsx b/frontend/src/components/admin/BackupDashboard.jsx index acfdcbd..8e600b1 100644 --- a/frontend/src/components/admin/BackupDashboard.jsx +++ b/frontend/src/components/admin/BackupDashboard.jsx @@ -183,7 +183,7 @@ export const BackupDashboard = ({ status, config, onRunBackup, isBackupRunning } label={t('backup.dashboard.stats.backupSize')} value={formatBytes(statistics.total_size || 0)} color="green" - subtext={`${statistics.files_processed || 0} files`} + subtext={`${statistics.files_processed || 0} ${t('backup.dashboard.stats.files')}`} />

{config?.backup_destination_type - ? config.backup_destination_type.toUpperCase() + ? t(`backup.configuration.destinationTypes.${config.backup_destination_type}.name`) : t('backup.dashboard.notConfigured.title')}

diff --git a/frontend/src/i18n/locales/de.json b/frontend/src/i18n/locales/de.json index 799cde8..a535952 100644 --- a/frontend/src/i18n/locales/de.json +++ b/frontend/src/i18n/locales/de.json @@ -978,7 +978,7 @@ "storageDestination": "Speicherziel", "nextScheduledBackup": "Nächstes geplantes Backup", "backupType": "{{type}} Backup", - "noBackupsYet": "Noch keine Backups" + "noDestinationSet": "Kein Ziel festgelegt" }, "configuration": { "enableBackup": "Automatisierte Backups aktivieren", @@ -1000,24 +1000,34 @@ "fields": { "destinationPath": "Zielpfad", "destinationPathHelp": "Lokaler Verzeichnispfad für Backup-Speicherung", + "destinationPathPlaceholder": "/pfad/zum/backup/verzeichnis", "rsyncHost": "Remote-Host", "rsyncHostHelp": "SSH-Hostname oder IP-Adresse", + "rsyncHostPlaceholder": "backup.beispiel.de", "rsyncUser": "SSH-Benutzer", "rsyncUserHelp": "Benutzername für SSH-Verbindung", + "rsyncUserPlaceholder": "backup-benutzer", "rsyncPath": "Remote-Pfad", "rsyncPathHelp": "Verzeichnispfad auf Remote-Server", + "rsyncPathPlaceholder": "/home/backup/foto-sharing", "rsyncSshKey": "SSH Private Key", "rsyncSshKeyHelp": "SSH Private Key für Authentifizierung (optional)", + "rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----", "s3Endpoint": "S3-Endpunkt", "s3EndpointHelp": "S3 API-Endpunkt (z.B. s3.amazonaws.com)", + "s3EndpointPlaceholder": "https://s3.amazonaws.com", "s3Bucket": "Bucket-Name", "s3BucketHelp": "S3-Bucket für Backup-Speicherung", + "s3BucketPlaceholder": "mein-backup-bucket", "s3AccessKey": "Zugriffsschlüssel-ID", "s3AccessKeyHelp": "AWS/S3 Zugriffsschlüssel-ID", + "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE", "s3SecretKey": "Geheimer Zugriffsschlüssel", "s3SecretKeyHelp": "AWS/S3 geheimer Zugriffsschlüssel", + "s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "s3Region": "Region", - "s3RegionHelp": "S3-Region (z.B. eu-central-1)" + "s3RegionHelp": "S3-Region (z.B. eu-central-1)", + "s3RegionPlaceholder": "eu-central-1" }, "schedule": { "title": "Backup-Zeitplan", @@ -1098,6 +1108,14 @@ "duration": "Dauer", "actions": "Aktionen" }, + "columns": { + "status": "Status", + "dateTime": "Datum & Zeit", + "type": "Typ", + "size": "Größe", + "duration": "Dauer", + "actions": "Aktionen" + }, "details": "Details", "statistics": "Statistiken", "errors": "Fehler", @@ -1116,6 +1134,27 @@ "showing": "Zeige {{from}}-{{to}} von {{total}} Backups", "previous": "Zurück", "next": "Weiter" + }, + "filter": { + "allStatus": "Alle Status", + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen", + "running": "Läuft", + "partial": "Teilweise" + }, + "noBackupsFound": "Keine Backups gefunden", + "backupsWillAppear": "Backups werden hier angezeigt, sobald sie erstellt wurden", + "messages": { + "deleteSuccess": "Backup erfolgreich gelöscht" + }, + "details": { + "backupDetails": "Backup-Details", + "destination": "Ziel", + "started": "Gestartet", + "completed": "Abgeschlossen", + "contentBackedUp": "Gesicherter Inhalt", + "errorDetails": "Fehlerdetails", + "manifest": "Manifest" } }, "restore": { diff --git a/frontend/src/i18n/locales/en.json b/frontend/src/i18n/locales/en.json index 572cf20..6d4bcc2 100644 --- a/frontend/src/i18n/locales/en.json +++ b/frontend/src/i18n/locales/en.json @@ -1056,24 +1056,34 @@ "fields": { "destinationPath": "Destination Path", "destinationPathHelp": "Local directory path for storing backups", + "destinationPathPlaceholder": "/path/to/backup/directory", "rsyncHost": "Remote Host", "rsyncHostHelp": "SSH hostname or IP address", + "rsyncHostPlaceholder": "backup.example.com", "rsyncUser": "SSH User", "rsyncUserHelp": "Username for SSH connection", + "rsyncUserPlaceholder": "backup-user", "rsyncPath": "Remote Path", "rsyncPathHelp": "Directory path on remote server", + "rsyncPathPlaceholder": "/home/backup/photo-sharing", "rsyncSshKey": "SSH Private Key", "rsyncSshKeyHelp": "SSH private key for authentication (optional)", + "rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----", "s3Endpoint": "S3 Endpoint", "s3EndpointHelp": "S3 API endpoint (e.g., s3.amazonaws.com)", + "s3EndpointPlaceholder": "https://s3.amazonaws.com", "s3Bucket": "Bucket Name", "s3BucketHelp": "S3 bucket for storing backups", + "s3BucketPlaceholder": "my-backup-bucket", "s3AccessKey": "Access Key ID", "s3AccessKeyHelp": "AWS/S3 access key ID", + "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE", "s3SecretKey": "Secret Access Key", "s3SecretKeyHelp": "AWS/S3 secret access key", + "s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "s3Region": "Region", - "s3RegionHelp": "S3 region (e.g., us-east-1)" + "s3RegionHelp": "S3 region (e.g., us-east-1)", + "s3RegionPlaceholder": "us-east-1" }, "schedule": { "title": "Backup Schedule", @@ -1154,6 +1164,14 @@ "duration": "Duration", "actions": "Actions" }, + "columns": { + "status": "Status", + "dateTime": "Date & Time", + "type": "Type", + "size": "Size", + "duration": "Duration", + "actions": "Actions" + }, "details": "Details", "statistics": "Statistics", "errors": "Errors", @@ -1172,6 +1190,27 @@ "showing": "Showing {{from}}-{{to}} of {{total}} backups", "previous": "Previous", "next": "Next" + }, + "filter": { + "allStatus": "All Status", + "completed": "Completed", + "failed": "Failed", + "running": "Running", + "partial": "Partial" + }, + "noBackupsFound": "No backups found", + "backupsWillAppear": "Backups will appear here once created", + "messages": { + "deleteSuccess": "Backup deleted successfully" + }, + "details": { + "backupDetails": "Backup Details", + "destination": "Destination", + "started": "Started", + "completed": "Completed", + "contentBackedUp": "Content Backed Up", + "errorDetails": "Error Details", + "manifest": "Manifest" } }, "restore": {