fix: complete backup page translations and improve UI
Mirror to GitHub / mirror (push) Successful in 36s
Test and Lint / backend-test (push) Successful in 1m32s
continuous-integration/drone/push Build is passing
Test and Lint / frontend-test (push) Successful in 1m56s
Version and Release / version-bump (push) Successful in 40s
Version and Release / trigger-drone (push) Successful in 3s

- 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 <noreply@anthropic.com>
This commit is contained in:
2025-07-23 11:58:31 +02:00
parent 42c8ef1c0e
commit c536fe45ff
4 changed files with 85 additions and 7 deletions
@@ -12,7 +12,7 @@ import {
Info, Info,
Eye, Eye,
EyeOff, EyeOff,
TestTube, Wifi,
CheckCircle, CheckCircle,
XCircle, XCircle,
Loader2, Loader2,
@@ -386,7 +386,7 @@ export const BackupConfiguration = ({ config, onSave, isSaving }) => {
</> </>
) : ( ) : (
<> <>
<TestTube className="mr-2 h-4 w-4" /> <Wifi className="mr-2 h-4 w-4" />
{t('backup.actions.testConnection')} {t('backup.actions.testConnection')}
</> </>
)} )}
@@ -183,7 +183,7 @@ export const BackupDashboard = ({ status, config, onRunBackup, isBackupRunning }
label={t('backup.dashboard.stats.backupSize')} label={t('backup.dashboard.stats.backupSize')}
value={formatBytes(statistics.total_size || 0)} value={formatBytes(statistics.total_size || 0)}
color="green" color="green"
subtext={`${statistics.files_processed || 0} files`} subtext={`${statistics.files_processed || 0} ${t('backup.dashboard.stats.files')}`}
/> />
<StatCard <StatCard
@@ -294,7 +294,7 @@ export const BackupDashboard = ({ status, config, onRunBackup, isBackupRunning }
<div> <div>
<p className="font-medium text-gray-900"> <p className="font-medium text-gray-900">
{config?.backup_destination_type {config?.backup_destination_type
? config.backup_destination_type.toUpperCase() ? t(`backup.configuration.destinationTypes.${config.backup_destination_type}.name`)
: t('backup.dashboard.notConfigured.title')} : t('backup.dashboard.notConfigured.title')}
</p> </p>
<p className="text-sm text-gray-500"> <p className="text-sm text-gray-500">
+41 -2
View File
@@ -978,7 +978,7 @@
"storageDestination": "Speicherziel", "storageDestination": "Speicherziel",
"nextScheduledBackup": "Nächstes geplantes Backup", "nextScheduledBackup": "Nächstes geplantes Backup",
"backupType": "{{type}} Backup", "backupType": "{{type}} Backup",
"noBackupsYet": "Noch keine Backups" "noDestinationSet": "Kein Ziel festgelegt"
}, },
"configuration": { "configuration": {
"enableBackup": "Automatisierte Backups aktivieren", "enableBackup": "Automatisierte Backups aktivieren",
@@ -1000,24 +1000,34 @@
"fields": { "fields": {
"destinationPath": "Zielpfad", "destinationPath": "Zielpfad",
"destinationPathHelp": "Lokaler Verzeichnispfad für Backup-Speicherung", "destinationPathHelp": "Lokaler Verzeichnispfad für Backup-Speicherung",
"destinationPathPlaceholder": "/pfad/zum/backup/verzeichnis",
"rsyncHost": "Remote-Host", "rsyncHost": "Remote-Host",
"rsyncHostHelp": "SSH-Hostname oder IP-Adresse", "rsyncHostHelp": "SSH-Hostname oder IP-Adresse",
"rsyncHostPlaceholder": "backup.beispiel.de",
"rsyncUser": "SSH-Benutzer", "rsyncUser": "SSH-Benutzer",
"rsyncUserHelp": "Benutzername für SSH-Verbindung", "rsyncUserHelp": "Benutzername für SSH-Verbindung",
"rsyncUserPlaceholder": "backup-benutzer",
"rsyncPath": "Remote-Pfad", "rsyncPath": "Remote-Pfad",
"rsyncPathHelp": "Verzeichnispfad auf Remote-Server", "rsyncPathHelp": "Verzeichnispfad auf Remote-Server",
"rsyncPathPlaceholder": "/home/backup/foto-sharing",
"rsyncSshKey": "SSH Private Key", "rsyncSshKey": "SSH Private Key",
"rsyncSshKeyHelp": "SSH Private Key für Authentifizierung (optional)", "rsyncSshKeyHelp": "SSH Private Key für Authentifizierung (optional)",
"rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----",
"s3Endpoint": "S3-Endpunkt", "s3Endpoint": "S3-Endpunkt",
"s3EndpointHelp": "S3 API-Endpunkt (z.B. s3.amazonaws.com)", "s3EndpointHelp": "S3 API-Endpunkt (z.B. s3.amazonaws.com)",
"s3EndpointPlaceholder": "https://s3.amazonaws.com",
"s3Bucket": "Bucket-Name", "s3Bucket": "Bucket-Name",
"s3BucketHelp": "S3-Bucket für Backup-Speicherung", "s3BucketHelp": "S3-Bucket für Backup-Speicherung",
"s3BucketPlaceholder": "mein-backup-bucket",
"s3AccessKey": "Zugriffsschlüssel-ID", "s3AccessKey": "Zugriffsschlüssel-ID",
"s3AccessKeyHelp": "AWS/S3 Zugriffsschlüssel-ID", "s3AccessKeyHelp": "AWS/S3 Zugriffsschlüssel-ID",
"s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
"s3SecretKey": "Geheimer Zugriffsschlüssel", "s3SecretKey": "Geheimer Zugriffsschlüssel",
"s3SecretKeyHelp": "AWS/S3 geheimer Zugriffsschlüssel", "s3SecretKeyHelp": "AWS/S3 geheimer Zugriffsschlüssel",
"s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"s3Region": "Region", "s3Region": "Region",
"s3RegionHelp": "S3-Region (z.B. eu-central-1)" "s3RegionHelp": "S3-Region (z.B. eu-central-1)",
"s3RegionPlaceholder": "eu-central-1"
}, },
"schedule": { "schedule": {
"title": "Backup-Zeitplan", "title": "Backup-Zeitplan",
@@ -1098,6 +1108,14 @@
"duration": "Dauer", "duration": "Dauer",
"actions": "Aktionen" "actions": "Aktionen"
}, },
"columns": {
"status": "Status",
"dateTime": "Datum & Zeit",
"type": "Typ",
"size": "Größe",
"duration": "Dauer",
"actions": "Aktionen"
},
"details": "Details", "details": "Details",
"statistics": "Statistiken", "statistics": "Statistiken",
"errors": "Fehler", "errors": "Fehler",
@@ -1116,6 +1134,27 @@
"showing": "Zeige {{from}}-{{to}} von {{total}} Backups", "showing": "Zeige {{from}}-{{to}} von {{total}} Backups",
"previous": "Zurück", "previous": "Zurück",
"next": "Weiter" "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": { "restore": {
+40 -1
View File
@@ -1056,24 +1056,34 @@
"fields": { "fields": {
"destinationPath": "Destination Path", "destinationPath": "Destination Path",
"destinationPathHelp": "Local directory path for storing backups", "destinationPathHelp": "Local directory path for storing backups",
"destinationPathPlaceholder": "/path/to/backup/directory",
"rsyncHost": "Remote Host", "rsyncHost": "Remote Host",
"rsyncHostHelp": "SSH hostname or IP address", "rsyncHostHelp": "SSH hostname or IP address",
"rsyncHostPlaceholder": "backup.example.com",
"rsyncUser": "SSH User", "rsyncUser": "SSH User",
"rsyncUserHelp": "Username for SSH connection", "rsyncUserHelp": "Username for SSH connection",
"rsyncUserPlaceholder": "backup-user",
"rsyncPath": "Remote Path", "rsyncPath": "Remote Path",
"rsyncPathHelp": "Directory path on remote server", "rsyncPathHelp": "Directory path on remote server",
"rsyncPathPlaceholder": "/home/backup/photo-sharing",
"rsyncSshKey": "SSH Private Key", "rsyncSshKey": "SSH Private Key",
"rsyncSshKeyHelp": "SSH private key for authentication (optional)", "rsyncSshKeyHelp": "SSH private key for authentication (optional)",
"rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----",
"s3Endpoint": "S3 Endpoint", "s3Endpoint": "S3 Endpoint",
"s3EndpointHelp": "S3 API endpoint (e.g., s3.amazonaws.com)", "s3EndpointHelp": "S3 API endpoint (e.g., s3.amazonaws.com)",
"s3EndpointPlaceholder": "https://s3.amazonaws.com",
"s3Bucket": "Bucket Name", "s3Bucket": "Bucket Name",
"s3BucketHelp": "S3 bucket for storing backups", "s3BucketHelp": "S3 bucket for storing backups",
"s3BucketPlaceholder": "my-backup-bucket",
"s3AccessKey": "Access Key ID", "s3AccessKey": "Access Key ID",
"s3AccessKeyHelp": "AWS/S3 access key ID", "s3AccessKeyHelp": "AWS/S3 access key ID",
"s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
"s3SecretKey": "Secret Access Key", "s3SecretKey": "Secret Access Key",
"s3SecretKeyHelp": "AWS/S3 secret access key", "s3SecretKeyHelp": "AWS/S3 secret access key",
"s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"s3Region": "Region", "s3Region": "Region",
"s3RegionHelp": "S3 region (e.g., us-east-1)" "s3RegionHelp": "S3 region (e.g., us-east-1)",
"s3RegionPlaceholder": "us-east-1"
}, },
"schedule": { "schedule": {
"title": "Backup Schedule", "title": "Backup Schedule",
@@ -1154,6 +1164,14 @@
"duration": "Duration", "duration": "Duration",
"actions": "Actions" "actions": "Actions"
}, },
"columns": {
"status": "Status",
"dateTime": "Date & Time",
"type": "Type",
"size": "Size",
"duration": "Duration",
"actions": "Actions"
},
"details": "Details", "details": "Details",
"statistics": "Statistics", "statistics": "Statistics",
"errors": "Errors", "errors": "Errors",
@@ -1172,6 +1190,27 @@
"showing": "Showing {{from}}-{{to}} of {{total}} backups", "showing": "Showing {{from}}-{{to}} of {{total}} backups",
"previous": "Previous", "previous": "Previous",
"next": "Next" "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": { "restore": {