diff --git a/frontend/src/components/common/LanguageSelector.tsx b/frontend/src/components/common/LanguageSelector.tsx index 41a926e1..a354d930 100644 --- a/frontend/src/components/common/LanguageSelector.tsx +++ b/frontend/src/components/common/LanguageSelector.tsx @@ -38,11 +38,20 @@ const PTBRFlag: React.FC<{ className?: string }> = ({ className = "w-5 h-5" }) = ); +const NLFlag: React.FC<{ className?: string }> = ({ className = "w-5 h-5" }) => ( + + + + + +); + const languages = [ { code: 'en', name: 'English', Flag: GBFlag }, { code: 'de', name: 'Deutsch', Flag: DEFlag }, { code: 'ru', name: 'Русский', Flag: RUFlag }, { code: 'pt', name: 'Português', Flag: PTBRFlag }, + { code: 'nl', name: 'Nederlands', Flag: NLFlag }, ]; export const LanguageSelector: React.FC = () => { diff --git a/frontend/src/i18n/config.ts b/frontend/src/i18n/config.ts index 86d2862e..343b1581 100644 --- a/frontend/src/i18n/config.ts +++ b/frontend/src/i18n/config.ts @@ -7,6 +7,7 @@ import enTranslations from './locales/en.json'; import deTranslations from './locales/de.json'; import ruTranslations from './locales/ru.json'; import ptTranslations from './locales/pt.json'; +import nlTranslations from './locales/nl.json'; i18n .use(HttpBackend) @@ -15,7 +16,7 @@ i18n .init({ fallbackLng: 'en', debug: false, - + resources: { en: { translation: enTranslations, @@ -29,6 +30,9 @@ i18n pt: { translation: ptTranslations, }, + nl: { + translation: nlTranslations, + }, }, interpolation: { diff --git a/frontend/src/i18n/locales/de.json b/frontend/src/i18n/locales/de.json index 311a0979..8011a34c 100644 --- a/frontend/src/i18n/locales/de.json +++ b/frontend/src/i18n/locales/de.json @@ -211,22 +211,16 @@ } }, "backup": { - "external": { - "warning": { - "title": "Externe Medien ausgeschlossen", - "body": "Diese Installation referenziert Fotos aus /external-media. Diese Originale sind von Backups ausgeschlossen. Thumbnails und Datenbank werden weiterhin gesichert." - } - }, "title": "Backup-Verwaltung", - "subtitle": "System-Backups verwalten, automatische Backups konfigurieren und aus früheren Backups wiederherstellen.", + "subtitle": "Verwalten Sie System-Backups, konfigurieren Sie automatisierte Backups und stellen Sie vorherige Backups wieder her.", "tabs": { "dashboard": "Dashboard", "configuration": "Konfiguration", "history": "Backup-Verlauf", - "restore": "Wiederherstellen" + "restore": "Wiederherstellung" }, "status": { - "inProgress": "Backup wird ausgeführt...", + "inProgress": "Backup läuft...", "lastBackup": "Letztes Backup", "noBackups": "Keine Backups gefunden", "nextBackup": "Nächstes Backup", @@ -246,17 +240,22 @@ "refresh": "Aktualisieren" }, "dashboard": { - "backupHealth": "Backup-Gesundheit", - "health": { - "title": "Backup-Gesundheit" + "backupHealth": "Backup-Status", + "healthStatus": { + "excellent": "Ausgezeichnet", + "good": "Gut", + "warning": "Warnung", + "critical": "Kritisch" }, "healthMessages": { "noBackups": "Keine Backups gefunden", - "lastBackupFailed": "Letztes Backup fehlgeschlagen", + "failed": "Letztes Backup fehlgeschlagen", "upToDate": "Backup ist aktuell", - "recent": "Backup ist kürzlich", - "gettingOld": "Backup wird alt", - "outdated": "Backup ist veraltet" + "recent": "Backup ist aktuell", + "old": "Backup wird alt", + "outdated": "Backup ist veraltet", + "lastBackupFailed": "Letztes Backup fehlgeschlagen", + "gettingOld": "Backup wird alt" }, "stats": { "totalBackups": "Gesamt-Backups", @@ -275,106 +274,176 @@ }, "notConfigured": { "title": "Backup nicht konfiguriert", - "message": "Bitte konfigurieren Sie die Backup-Einstellungen im Tab \"Konfiguration\", bevor Sie Backups ausführen." - }, - "actions": { - "runBackupNow": "Backup jetzt starten", - "running": "Läuft..." + "message": "Bitte konfigurieren Sie die Backup-Einstellungen im Konfiguration-Tab, bevor Sie Backups ausführen." }, "coverage": { - "title": "Backup-Abdeckung", "database": "Datenbank", "photos": "Fotos", "archives": "Archive", "systemFiles": "Systemdateien", "included": "Enthalten", "excluded": "Ausgeschlossen", - "optional": "Optional" + "optional": "Optional", + "title": "Backup-Abdeckung" }, "storageDestination": "Speicherziel", "nextScheduledBackup": "Nächstes geplantes Backup", - "backupType": "{{type}}-Backup", - "noDestinationSet": "Kein Ziel gesetzt" + "backupType": "{{type}} Backup", + "noDestinationSet": "Kein Ziel festgelegt", + "health": { + "title": "Backup-Gesundheit" + }, + "actions": { + "runBackupNow": "Backup jetzt ausführen", + "running": "Wird ausgeführt..." + } }, "configuration": { - "enableBackup": "Automatische Backups aktivieren", - "enableBackupHelp": "Backups automatisch gemäß Zeitplan erstellen", + "enableBackup": "Automatisierte Backups aktivieren", "destinationType": "Backup-Ziel", "destinationTypes": { "local": { "name": "Lokaler Speicher", - "description": "Backups auf dem lokalen Dateisystem speichern" + "description": "Backups auf dem lokalen Server-Dateisystem speichern" }, "rsync": { "name": "Remote-Server (Rsync)", - "description": "Backups per SSH/Rsync auf einen entfernten Server synchronisieren" + "description": "Backups über SSH/Rsync auf einen Remote-Server synchronisieren" }, "s3": { "name": "S3-kompatibler Speicher", - "description": "Backups in Amazon S3 oder kompatiblen Objektspeicher ablegen" + "description": "Backups in Amazon S3 oder kompatiblem Objektspeicher speichern" } }, "fields": { "destinationPath": "Zielpfad", - "destinationPathHelp": "Lokaler Verzeichnispfad für Backups", + "destinationPathHelp": "Lokaler Verzeichnispfad für Backup-Speicherung", "destinationPathPlaceholder": "/pfad/zum/backup/verzeichnis", - "rsyncHost": "Remote Host", - "rsyncHostPlaceholder": "backup.example.com", - "rsyncUser": "Benutzer", - "rsyncUserPlaceholder": "backupuser", + "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", - "rsyncPathPlaceholder": "/pfad/auf/server", - "rsyncSshKey": "SSH-Schlüssel", - "rsyncSshKeyPlaceholder": "Privater SSH-Schlüssel (PEM)", - "rsyncSshKeyHelp": "Fügen Sie den privaten SSH-Schlüssel im PEM-Format ein.", - "s3Endpoint": "S3-Endpunkt-URL", - "s3EndpointHelp": "z. B. https://s3.amazonaws.com oder Ihr MinIO-Endpunkt", + "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", - "s3AccessKey": "Access Key ID", - "s3SecretKey": "Secret Access Key" + "s3RegionHelp": "S3-Region (z.B. eu-central-1)", + "s3RegionPlaceholder": "eu-central-1" }, "schedule": { - "title": "Zeitplan", - "scheduleType": "Zeitplantyp", - "customCron": "Eigener Cron-Ausdruck", - "customCronHelp": "Cron-Ausdruck für benutzerdefinierten Zeitplan", - "retention": "Aufbewahrung (Tage)", - "retentionHelp": "Anzahl der Tage, nach denen alte Backups automatisch gelöscht werden" + "title": "Backup-Zeitplan", + "scheduleType": "Zeitplan-Typ", + "scheduleOptions": { + "hourly": "Jede Stunde", + "daily": "Täglich", + "weekly": "Wöchentlich", + "custom": "Benutzerdefinierter Cron-Ausdruck" + }, + "options": { + "hourly": "Jede Stunde", + "daily": "Täglich", + "weekly": "Wöchentlich", + "custom": "Benutzerdefinierter Cron-Ausdruck" + }, + "customCron": "Cron-Ausdruck", + "customCronHelp": "Geben Sie einen gültigen Cron-Ausdruck ein (z.B. 0 3 * * *)", + "retention": "Aufbewahrungszeitraum", + "retentionDays": "Backups aufbewahren für", + "retentionHelp": "Tage (ältere Backups werden automatisch gelöscht)" }, "whatToBackup": { "title": "Was soll gesichert werden", "database": "Datenbank", - "databaseHelp": "Datenbank (Einstellungen, Events, Benutzer)", + "databaseHelp": "Alle Veranstaltungsdaten, Einstellungen und Konfigurationen", "photos": "Fotos", - "photosHelp": "Aktive Galeriefotos sichern", + "photosHelp": "Alle hochgeladenen Fotos in aktiven Galerien", "archives": "Archive", - "archivesHelp": "Archivierte ZIP-Dateien", - "thumbnails": "Thumbnails", - "thumbnailsHelp": "Generierte Vorschaubilder" + "archivesHelp": "Archivierte Veranstaltungs-ZIP-Dateien", + "thumbnails": "Miniaturbilder", + "thumbnailsHelp": "Generierte Miniaturbilder (können neu erstellt werden)", + "tempFiles": "Temporäre Dateien", + "tempFilesHelp": "Temporäre Upload- und Verarbeitungsdateien" }, "advancedOptions": { "title": "Erweiterte Optionen", - "compression": "Kompression", - "compressionHelp": "Backups komprimieren, um Speicherplatz zu sparen", - "encryption": "Verschlüsselung", - "encryptionHelp": "Backups mit einer Passphrase verschlüsseln", + "compression": "Komprimierung aktivieren", + "compressionHelp": "Backup-Dateien komprimieren, um Speicherplatz zu sparen", + "encryption": "Verschlüsselung aktivieren", + "encryptionHelp": "Backups für zusätzliche Sicherheit verschlüsseln", "encryptionPassphrase": "Verschlüsselungs-Passphrase", - "encryptionPassphraseHelp": "Passphrase zum Verschlüsseln/Entschlüsseln der Backups" + "encryptionPassphraseHelp": "Starke Passphrase für Backup-Verschlüsselung", + "confirmPassphrase": "Passphrase bestätigen", + "passphrasesDontMatch": "Passphrasen stimmen nicht überein" }, - "savingSettings": "Einstellungen werden gespeichert...", - "saveSettings": "Einstellungen speichern" + "validation": { + "requiredFields": "Bitte füllen Sie alle erforderlichen Felder aus", + "invalidCron": "Ungültiger Cron-Ausdruck", + "connectionTestFailed": "Verbindungstest fehlgeschlagen", + "connectionTestSuccess": "Verbindungstest erfolgreich!" + }, + "messages": { + "requiredFields": "Bitte füllen Sie alle erforderlichen Felder aus", + "connectionSuccess": "Verbindungstest erfolgreich!", + "connectionFailed": "Verbindungstest fehlgeschlagen" + }, + "testingConnection": "Teste Verbindung...", + "saveSettings": "Konfiguration speichern", + "savingSettings": "Speichern...", + "enableBackupHelp": "Automatisch Backups nach dem konfigurierten Zeitplan erstellen" }, "history": { + "searchPlaceholder": "Backups suchen...", + "allStatus": "Alle Status", + "status": { + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen", + "running": "Läuft", + "partial": "Teilweise" + }, + "deleteConfirm": "Sind Sie sicher, dass Sie dieses Backup vom {{date}} löschen möchten?", + "noBackups": "Keine Backups gefunden", + "tableHeaders": { + "date": "Datum", + "type": "Typ", + "status": "Status", + "size": "Größe", + "duration": "Dauer", + "actions": "Aktionen" + }, "columns": { "status": "Status", - "dateTime": "Datum & Uhrzeit", + "dateTime": "Datum & Zeit", "type": "Typ", "size": "Größe", "duration": "Dauer", "actions": "Aktionen" }, - "details": "Details", + "details": { + "backupDetails": "Backup-Details", + "destination": "Ziel", + "started": "Gestartet", + "completed": "Abgeschlossen", + "contentBackedUp": "Gesicherter Inhalt", + "errorDetails": "Fehlerdetails", + "manifest": "Manifest" + }, "statistics": "Statistiken", "errors": "Fehler", "backupDetails": { @@ -384,12 +453,12 @@ "destination": "Ziel", "filesProcessed": "Verarbeitete Dateien", "totalSize": "Gesamtgröße", - "compressionRatio": "Kompressionsrate", + "compressionRatio": "Komprimierungsverhältnis", "errorLog": "Fehlerprotokoll", "noErrors": "Keine Fehler aufgetreten" }, "pagination": { - "showing": "Zeige {{from}}–{{to}} von {{total}} Backups", + "showing": "Zeige {{from}}-{{to}} von {{total}} Backups", "previous": "Zurück", "next": "Weiter" }, @@ -401,7 +470,7 @@ "partial": "Teilweise" }, "noBackupsFound": "Keine Backups gefunden", - "backupsWillAppear": "Backups erscheinen hier, sobald sie erstellt wurden", + "backupsWillAppear": "Backups werden hier angezeigt, sobald sie erstellt wurden", "messages": { "deleteSuccess": "Backup erfolgreich gelöscht" } @@ -409,10 +478,10 @@ "restore": { "steps": { "selectSource": "Quelle auswählen", - "chooseBackup": "Backup wählen", + "chooseBackup": "Backup auswählen", "restoreOptions": "Wiederherstellungsoptionen", - "reviewConfirm": "Prüfen & Bestätigen", - "progress": "Fortschritt" + "reviewConfirm": "Überprüfen & Bestätigen", + "progress": "Wiederherstellungsfortschritt" }, "source": { "title": "Backup-Quelle auswählen", @@ -428,34 +497,34 @@ "upload": { "name": "Backup hochladen", "description": "Eine Backup-Datei hochladen", - "comingSoon": "Upload-Funktion folgt in Kürze" + "comingSoon": "Upload-Funktion kommt bald" }, "configuration": { "s3": "S3-Konfiguration", "endpoint": "S3-Endpunkt-URL", "bucket": "Bucket-Name", - "accessKey": "Access Key ID", - "secretKey": "Secret Access Key" + "accessKey": "Zugriffsschlüssel-ID", + "secretKey": "Geheimer Zugriffsschlüssel" } }, "backup": { - "title": "Backup zum Wiederherstellen wählen", + "title": "Backup für Wiederherstellung auswählen", "subtitle": "Aus verfügbaren Backups auswählen", - "noBackupsFound": "Keine Backups in der gewählten Quelle gefunden", + "noBackupsFound": "Keine Backups in ausgewählter Quelle gefunden", "encrypted": "Verschlüsseltes Backup", - "encryptedMessage": "Zum Wiederherstellen dieses Backups wird die Verschlüsselungs-Passphrase benötigt.", + "encryptedMessage": "Sie müssen die Verschlüsselungs-Passphrase angeben, um dieses Backup wiederherzustellen.", "enterPassphrase": "Verschlüsselungs-Passphrase eingeben", "at": "um" }, "restoreTypes": { "full": { "name": "Vollständige Wiederherstellung", - "description": "Alles wiederherstellen (Datenbank, Fotos und Archive)", + "description": "Alles wiederherstellen, einschließlich Datenbank, Fotos und Archive", "warning": "Dies ersetzt alle aktuellen Daten" }, "database": { "name": "Nur Datenbank", - "description": "Nur die Datenbank wiederherstellen (Einstellungen, Events, Benutzer)", + "description": "Nur die Datenbank wiederherstellen (Einstellungen, Veranstaltungen, Benutzer)", "warning": "Aktuelle Datenbank wird ersetzt" }, "files": { @@ -466,56 +535,56 @@ "selective": { "name": "Selektive Wiederherstellung", "description": "Bestimmte Elemente zur Wiederherstellung auswählen", - "warning": "Es werden nur ausgewählte Elemente wiederhergestellt" + "warning": "Nur ausgewählte Elemente werden wiederhergestellt" } }, "options": { "title": "Wiederherstellungsoptionen", - "subtitle": "Auswählen, was wiederhergestellt werden soll", + "subtitle": "Wählen Sie, was wiederhergestellt werden soll", "additionalOptions": { "title": "Zusätzliche Optionen", - "skipPreBackup": "Vorab-Backup überspringen", - "skipPreBackupHelp": "Standardmäßig wird vor der Wiederherstellung ein Backup erstellt. Aktivieren, um dies zu überspringen.", + "skipPreBackup": "Vor-Wiederherstellungs-Backup überspringen", + "skipPreBackupHelp": "Standardmäßig wird vor der Wiederherstellung ein Backup erstellt. Aktivieren Sie dies, um es zu überspringen.", "force": "Wiederherstellung erzwingen", "forceHelp": "Sicherheitsprüfungen und Warnungen überschreiben (mit Vorsicht verwenden)" } }, "confirmation": { - "title": "Prüfen & Bestätigen", - "subtitle": "Bitte prüfen Sie Ihre Wiederherstellungskonfiguration", + "title": "Überprüfen & Bestätigen", + "subtitle": "Bitte überprüfen Sie Ihre Wiederherstellungskonfiguration", "validation": { "passed": "Validierung bestanden", "failed": "Validierung fehlgeschlagen", - "checking": "Wiederherstellungskonfiguration wird geprüft..." + "checking": "Validiere Wiederherstellungskonfiguration..." }, "spaceCheck": { "title": "Speicherplatz", "required": "Erforderlich", "available": "Verfügbar", - "insufficient": "Nicht genügend Speicherplatz" + "insufficient": "Unzureichender Speicherplatz" }, "summary": { - "title": "Zusammenfassung", + "title": "Wiederherstellungszusammenfassung", "source": "Quelle", "backupDate": "Backup-Datum", - "restoreType": "Art der Wiederherstellung", - "preBackup": "Vorab-Backup", + "restoreType": "Wiederherstellungstyp", + "preBackup": "Vor-Backup", "enabled": "Aktiviert", "skipped": "Übersprungen" }, "warning": { "title": "Wichtiger Hinweis", - "message": "Diese Wiederherstellung ersetzt bestehende Daten. Stellen Sie sicher, dass Sie ein aktuelles Backup haben. Dieser Vorgang kann nicht rückgängig gemacht werden." + "message": "Diese Wiederherstellungsoperation ersetzt vorhandene Daten. Stellen Sie sicher, dass Sie ein aktuelles Backup haben, bevor Sie fortfahren. Diese Aktion kann nicht rückgängig gemacht werden." } }, "progress": { - "title": "Fortschritt der Wiederherstellung", + "title": "Wiederherstellungsfortschritt", "inProgress": "Wiederherstellung läuft...", "completed": "Wiederherstellung abgeschlossen", "overallProgress": "Gesamtfortschritt", "current": "Aktuell", - "statusDetails": "Statusdetails", - "restoreLogs": "Wiederherstellungs-Logs", + "statusDetails": "Status-Details", + "restoreLogs": "Wiederherstellungsprotokolle", "steps": { "completed": "Abgeschlossen", "running": "Läuft", @@ -524,7 +593,7 @@ }, "success": { "title": "Wiederherstellung erfolgreich abgeschlossen", - "message": "Ihre Daten wurden wiederhergestellt. Bitte prüfen Sie, ob alles korrekt funktioniert." + "message": "Ihre Daten wurden wiederhergestellt. Bitte überprüfen Sie, ob alles korrekt funktioniert." } }, "actions": { @@ -546,8 +615,14 @@ "configUpdateFailed": "Konfiguration konnte nicht aktualisiert werden", "backupDeleted": "Backup erfolgreich gelöscht", "deleteFailed": "Backup konnte nicht gelöscht werden", - "testEmailSent": "Verbindung erfolgreich getestet!", + "testEmailSent": "Verbindungstest erfolgreich!", "testEmailFailed": "Verbindungstest fehlgeschlagen" + }, + "external": { + "warning": { + "title": "Externe Medien ausgeschlossen", + "body": "Diese Installation verweist auf Fotos aus /external-media. Diese Originale werden von Backups ausgeschlossen. Thumbnails und Datenbank werden weiterhin gesichert." + } } }, "archives": { @@ -612,26 +687,25 @@ "dayRemaining": "1 Tag verbleibend", "hoursRemaining": "{{hours}} Stunden verbleibend", "expiredMessage": "Diese Galerie ist am {{date}} abgelaufen", - "contactOrganizer": "Bitte kontaktieren Sie den Veranstalter, wenn Sie Zugriff auf diese Fotos benötigen", + "contactOrganizer": "Bitte kontaktieren Sie den Veranstalter, wenn Sie Zugriff auf diese Fotos benötigen.", "searchPhotos": "Fotos nach Dateiname suchen...", "sortByDate": "Nach Datum sortieren", "sortByName": "Nach Name sortieren", "sortBySize": "Nach Größe sortieren", - "allPhotos": "Alle Fotos", - "feedbackFilter": "Feedback-Filter", - "all": "Alle", - "liked": "Gefallen", - "favorited": "Favorisiert", - "rated": "Bewertet", - "commented": "Kommentiert", - "shareGallery": "Galerie teilen", + "allPhotos": "Alle Fotos", + "feedbackFilter": "Feedback-Filter", + "all": "Alle", + "liked": "Gefallen", + "favorited": "Favorisiert", + "rated": "Bewertet", + "commented": "Kommentiert", + "shareGallery": "Galerie teilen", "needHelp": "Hilfe benötigt? Kontaktieren Sie uns unter", "noPhotosFound": "Keine Fotos gefunden", "failedToLoad": "Fotos konnten nicht geladen werden", "tryAgain": "Erneut versuchen", "loading": "Galerie wird geladen...", "expiredOn": "Diese Galerie ist am {{date}} abgelaufen.", - "contactOrganizer": "Bitte kontaktieren Sie den Veranstalter, wenn Sie Zugriff auf diese Fotos benötigen.", "expiresIn": "Galerie läuft in {{count}} Tag ab", "expiresIn_plural": "Galerie läuft in {{count}} Tagen ab", "downloadBefore": "Laden Sie Ihre Fotos herunter, bevor sie nicht mehr verfügbar sind.", @@ -673,10 +747,7 @@ "noMedia": "Noch keine Medien hochgeladen", "searchPlaceholder": "Fotos suchen...", "sortBy": "Sortieren nach", - "sortByDate": "Nach Datum sortieren", "sortByCaptureDate": "Nach Aufnahmedatum sortieren", - "sortByName": "Nach Name sortieren", - "sortBySize": "Nach Größe sortieren", "sortByRating": "Nach Bewertung sortieren", "photoGallery": "Fotogalerie", "photos": "Fotos", @@ -695,7 +766,9 @@ "writeLovelyNote": "Schreiben Sie eine nette Nachricht...", "postComment": "Kommentar posten", "anonymous": "Anonym" - } + }, + "filter": "Filter", + "favorites": "Favoriten" }, "categories": { "title": "Fotokategorien", @@ -802,7 +875,6 @@ "statistics": "Statistiken", "views": "Aufrufe", "downloads": "Downloads", - "uniqueVisitors": "Eindeutige Besucher", "noStatistics": "Noch keine Statistiken verfügbar", "archiveStatus": "Archivstatus", "archivedOn": "Archiviert am", @@ -997,7 +1069,20 @@ "activeEvents": "Aktive Veranstaltungen", "totalPhotos": "Gesamtfotos", "expiringEvents": "Bald ablaufend" - } + }, + "clear": "Zurücksetzen", + "archiveSelected": "Auswahl archivieren", + "noEventsFound": "Keine Veranstaltungen gefunden", + "downloadArchiveSoon": "Archiv-Download bald verfügbar", + "welcomeMessageLabel": "Willkommensnachricht", + "createdOn": "Erstellt", + "organizingPhotosInfo": "Organisieren Sie Ihre Fotos in Kategorien. Kategorien helfen Gästen, bestimmte Fototypen zu finden.", + "archiveStatusTitle": "Archivstatus", + "downloadingArchive": "{{name}}-Archiv wird heruntergeladen...", + "downloadStarted": "Download gestartet", + "failedToDownloadArchive": "Archiv-Download fehlgeschlagen", + "statisticsNotAvailable": "Noch keine Statistiken verfügbar", + "photoFilters": "Fotofilter" }, "settings": { "title": "Systemeinstellungen", @@ -1312,6 +1397,62 @@ "checkSuccess": "Benachrichtigung für neue Version gesendet", "checkNoAction": "Keine Benachrichtigung erforderlich: {{reason}}", "checkError": "Fehler beim Prüfen auf Updates" + }, + "moderation": { + "title": "Moderation", + "wordFilters": "Wortfilter", + "description": "Verwalten Sie Wörter, die in Kommentaren gefiltert oder blockiert werden sollen", + "addFilter": "Neuen Filter hinzufügen", + "enterWord": "Wort zum Filtern eingeben", + "searchFilters": "Filter durchsuchen...", + "filterAdded": "Wortfilter erfolgreich hinzugefügt", + "filterExists": "Dieser Wortfilter existiert bereits", + "addError": "Wortfilter konnte nicht hinzugefügt werden", + "filterUpdated": "Wortfilter erfolgreich aktualisiert", + "updateError": "Wortfilter konnte nicht aktualisiert werden", + "filterDeleted": "Wortfilter erfolgreich gelöscht", + "deleteError": "Wortfilter konnte nicht gelöscht werden", + "wordRequired": "Bitte geben Sie ein Wort zum Filtern ein", + "confirmDelete": "Möchten Sie diesen Wortfilter wirklich löschen?", + "loading": "Wortfilter werden geladen...", + "noMatchingFilters": "Keine passenden Filter gefunden", + "noFilters": "Noch keine Wortfilter konfiguriert", + "severityLow": "Niedrig", + "severityModerate": "Mittel", + "severityHigh": "Hoch", + "severityBlock": "Blockieren", + "severityLevels": "Schweregrade", + "lowDescription": "Wort wird zur Überprüfung markiert, aber nicht automatisch blockiert", + "moderateDescription": "Kommentar erfordert manuelle Freigabe, bevor er sichtbar wird", + "highDescription": "Kommentar wird automatisch ausgeblendet und erfordert Admin-Überprüfung", + "blockDescription": "Kommentar wird sofort abgelehnt und kann nicht eingereicht werden" + }, + "styling": { + "title": "Benutzerdefiniertes CSS" + }, + "analytics": { + "title": "Analyse", + "umamiIntegration": "Umami Analytics Integration", + "enableUmami": "Umami Analytics aktivieren", + "umamiUrl": "Umami URL", + "umamiUrlHelp": "Die URL Ihrer Umami-Instanz (z.B. https://analytics.ihredomain.de)", + "websiteId": "Website-ID", + "websiteIdHelp": "Ihre Umami Website-ID (im Umami-Dashboard zu finden)", + "shareUrl": "Freigabe-URL (Optional)", + "shareUrlHelp": "Öffentliche Freigabe-URL zum Einbetten des vollständigen Dashboards (in Umami erstellen)", + "umamiInfo": "Über Umami Analytics", + "umamiInfoText": "Umami ist eine datenschutzfreundliche, quelloffene Analyseplattform. Sie erfasst Seitenaufrufe, eindeutige Besucher und benutzerdefinierte Ereignisse ohne Cookies.", + "learnMore": "Mehr über Umami erfahren", + "saveAnalyticsSettings": "Analyse-Einstellungen speichern", + "backendAnalytics": "Backend-Analyse", + "backendAnalyticsText": "Das System erfasst auch grundlegende serverseitige Analysen für Sicherheits- und Leistungsüberwachung.", + "tracked": "Erfasste Metriken", + "galleryViews": "Galerie-Seitenaufrufe", + "photoDownloads": "Einzel- und Massendownloads", + "uniqueVisitors": "Eindeutige Besucher nach IP", + "deviceTypes": "Gerätetypen aus User-Agents", + "privacy": "Datenschutz", + "privacyText": "IP-Adressen werden aus Datenschutzgründen gehasht. Es werden keine persönlichen Daten gespeichert. Analysedaten werden 90 Tage aufbewahrt." } }, "branding": { @@ -1336,7 +1477,7 @@ "logoHelp": "Empfohlene Größe: 200x60px, PNG oder JPEG", "favicon": "Favicon", "currentFavicon": "Aktuelles Favicon", - "uploadFavicon": "Favicon hochladen", + "uploadFavicon": "Favicon hochladen", "removeFavicon": "Favicon entfernen", "faviconHelp": "PNG- oder ICO-Format, empfohlene Größe: 32x32px", "watermark": "Wasserzeichen", @@ -1659,8 +1800,6 @@ "clearedAll": "{{count}} Benachrichtigungen gelöscht", "profileUpdated": "Admin-Profil aktualisiert" }, - "viewAllNotifications": "Alle Benachrichtigungen anzeigen", - "noNotifications": "Keine neuen Benachrichtigungen", "markAsRead": "Als gelesen markieren", "markAllAsRead": "Alle als gelesen markieren", "notificationSettings": "Benachrichtigungseinstellungen", @@ -1849,13 +1988,17 @@ "serverError": "Serverfehler", "somethingWentWrong": "Etwas ist schiefgelaufen", "tryAgainLater": "Bitte versuchen Sie es später erneut", - "refreshPage": "Seite neu laden", - "oopsSomethingWentWrong": "Ups! Etwas ist schiefgelaufen", - "unexpectedError": "Es ist ein unerwarteter Fehler aufgetreten. Keine Sorge, Ihre Daten sind sicher.", + "refreshPage": "Seite aktualisieren", + "oopsSomethingWentWrong": "Hoppla! Etwas ist schiefgelaufen", + "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten. Keine Sorge, Ihre Daten sind sicher.", "goToHomepage": "Zur Startseite", "errorDetails": "Fehlerdetails", - "failedToCreateEvent": "Fehler beim Erstellen der Veranstaltung", - "eventCreationFailed": "Fehler beim Erstellen der Veranstaltung" + "requiredFields": "Bitte füllen Sie alle Pflichtfelder aus", + "enterTestEmail": "Bitte geben Sie eine Test-E-Mail-Adresse ein", + "failedToCreateEvent": "Veranstaltung konnte nicht erstellt werden", + "networkError": "Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "sessionExpired": "Sitzung abgelaufen. Bitte melden Sie sich erneut an.", + "eventCreationFailed": "Veranstaltung konnte nicht erstellt werden" }, "legal": { "impressum": "Impressum", @@ -1899,7 +2042,7 @@ "fullDashboard": "Vollständiges Dashboard", "refresh": "Aktualisieren", "last7Days": "Letzte 7 Tage", - "last30Days": "Letzte 30 Tage", + "last30Days": "Letzte 30 Tage", "last90Days": "Letzte 90 Tage", "pageViews": "Seitenaufrufe", "uniqueVisitors": "Eindeutige Besucher", @@ -2026,28 +2169,6 @@ "datenschutz": "Datenschutzerklärung", "pageUpdated": "Seite erfolgreich aktualisiert" }, - "errors": { - "notFound": "Nicht gefunden", - "galleryNotFound": "Galerie nicht gefunden", - "galleryNotFoundMessage": "Diese Galerie existiert nicht oder wurde entfernt.", - "galleryArchived": "Galerie archiviert", - "galleryArchivedMessage": "Diese Galerie wurde archiviert und ist nicht mehr zugänglich. Bitte kontaktieren Sie den Veranstalter, wenn Sie Zugriff auf diese Fotos benötigen.", - "unauthorized": "Nicht autorisiert", - "forbidden": "Verboten", - "serverError": "Serverfehler", - "somethingWentWrong": "Etwas ist schiefgelaufen", - "tryAgainLater": "Bitte versuchen Sie es später erneut", - "refreshPage": "Seite aktualisieren", - "oopsSomethingWentWrong": "Hoppla! Etwas ist schiefgelaufen", - "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten. Keine Sorge, Ihre Daten sind sicher.", - "goToHomepage": "Zur Startseite", - "errorDetails": "Fehlerdetails", - "requiredFields": "Bitte füllen Sie alle Pflichtfelder aus", - "enterTestEmail": "Bitte geben Sie eine Test-E-Mail-Adresse ein", - "failedToCreateEvent": "Veranstaltung konnte nicht erstellt werden", - "networkError": "Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", - "sessionExpired": "Sitzung abgelaufen. Bitte melden Sie sich erneut an." - }, "validation": { "eventNameRequired": "Veranstaltungsname ist erforderlich", "hostEmailRequired": "Die E-Mail des Kunden ist erforderlich", @@ -2060,404 +2181,6 @@ "passwordSecurityRequirements": "Passwort erfüllt nicht die Sicherheitsanforderungen", "expirationRange": "Ablauf muss zwischen 1 und 365 Tagen liegen" }, - "backup": { - "title": "Backup-Verwaltung", - "subtitle": "Verwalten Sie System-Backups, konfigurieren Sie automatisierte Backups und stellen Sie vorherige Backups wieder her.", - "tabs": { - "dashboard": "Dashboard", - "configuration": "Konfiguration", - "history": "Backup-Verlauf", - "restore": "Wiederherstellung" - }, - "status": { - "inProgress": "Backup läuft...", - "lastBackup": "Letztes Backup", - "noBackups": "Keine Backups gefunden", - "nextBackup": "Nächstes Backup", - "notScheduled": "Nicht geplant", - "enabled": "Aktiviert", - "disabled": "Deaktiviert" - }, - "actions": { - "runBackupNow": "Backup jetzt starten", - "starting": "Starte...", - "running": "Läuft...", - "testConnection": "Verbindung testen", - "save": "Konfiguration speichern", - "delete": "Löschen", - "view": "Details anzeigen", - "download": "Herunterladen", - "refresh": "Aktualisieren" - }, - "dashboard": { - "backupHealth": "Backup-Status", - "healthStatus": { - "excellent": "Ausgezeichnet", - "good": "Gut", - "warning": "Warnung", - "critical": "Kritisch" - }, - "healthMessages": { - "noBackups": "Keine Backups gefunden", - "failed": "Letztes Backup fehlgeschlagen", - "upToDate": "Backup ist aktuell", - "recent": "Backup ist aktuell", - "old": "Backup wird alt", - "outdated": "Backup ist veraltet" - }, - "stats": { - "totalBackups": "Gesamt-Backups", - "backupSize": "Backup-Größe", - "lastDuration": "Letzte Dauer", - "backupStatus": "Backup-Status", - "last": "Letztes", - "files": "Dateien", - "minutes": "{{count}}m", - "active": "Aktiv", - "inactive": "Inaktiv" - }, - "recentActivity": { - "title": "Letzte Backup-Aktivitäten" - }, - "notConfigured": { - "title": "Backup nicht konfiguriert", - "message": "Bitte konfigurieren Sie die Backup-Einstellungen im Konfiguration-Tab, bevor Sie Backups ausführen." - }, - "coverage": { - "database": "Datenbank", - "photos": "Fotos", - "archives": "Archive", - "systemFiles": "Systemdateien", - "included": "Enthalten", - "excluded": "Ausgeschlossen", - "optional": "Optional" - }, - "storageDestination": "Speicherziel", - "nextScheduledBackup": "Nächstes geplantes Backup", - "backupType": "{{type}} Backup", - "noDestinationSet": "Kein Ziel festgelegt" - }, - "configuration": { - "enableBackup": "Automatisierte Backups aktivieren", - "destinationType": "Backup-Ziel", - "destinationTypes": { - "local": { - "name": "Lokaler Speicher", - "description": "Backups auf dem lokalen Server-Dateisystem speichern" - }, - "rsync": { - "name": "Remote-Server (Rsync)", - "description": "Backups über SSH/Rsync auf einen Remote-Server synchronisieren" - }, - "s3": { - "name": "S3-kompatibler Speicher", - "description": "Backups in Amazon S3 oder kompatiblem Objektspeicher speichern" - } - }, - "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)", - "s3RegionPlaceholder": "eu-central-1" - }, - "schedule": { - "title": "Backup-Zeitplan", - "scheduleType": "Zeitplan-Typ", - "scheduleOptions": { - "hourly": "Jede Stunde", - "daily": "Täglich", - "weekly": "Wöchentlich", - "custom": "Benutzerdefinierter Cron-Ausdruck" - }, - "options": { - "hourly": "Jede Stunde", - "daily": "Täglich", - "weekly": "Wöchentlich", - "custom": "Benutzerdefinierter Cron-Ausdruck" - }, - "customCron": "Cron-Ausdruck", - "customCronHelp": "Geben Sie einen gültigen Cron-Ausdruck ein (z.B. 0 3 * * *)", - "retention": "Aufbewahrungszeitraum", - "retentionDays": "Backups aufbewahren für", - "retentionHelp": "Tage (ältere Backups werden automatisch gelöscht)" - }, - "whatToBackup": { - "title": "Was soll gesichert werden", - "database": "Datenbank", - "databaseHelp": "Alle Veranstaltungsdaten, Einstellungen und Konfigurationen", - "photos": "Fotos", - "photosHelp": "Alle hochgeladenen Fotos in aktiven Galerien", - "archives": "Archive", - "archivesHelp": "Archivierte Veranstaltungs-ZIP-Dateien", - "thumbnails": "Miniaturbilder", - "thumbnailsHelp": "Generierte Miniaturbilder (können neu erstellt werden)", - "tempFiles": "Temporäre Dateien", - "tempFilesHelp": "Temporäre Upload- und Verarbeitungsdateien" - }, - "advancedOptions": { - "title": "Erweiterte Optionen", - "compression": "Komprimierung aktivieren", - "compressionHelp": "Backup-Dateien komprimieren, um Speicherplatz zu sparen", - "encryption": "Verschlüsselung aktivieren", - "encryptionHelp": "Backups für zusätzliche Sicherheit verschlüsseln", - "encryptionPassphrase": "Verschlüsselungs-Passphrase", - "encryptionPassphraseHelp": "Starke Passphrase für Backup-Verschlüsselung", - "confirmPassphrase": "Passphrase bestätigen", - "passphrasesDontMatch": "Passphrasen stimmen nicht überein" - }, - "validation": { - "requiredFields": "Bitte füllen Sie alle erforderlichen Felder aus", - "invalidCron": "Ungültiger Cron-Ausdruck", - "connectionTestFailed": "Verbindungstest fehlgeschlagen", - "connectionTestSuccess": "Verbindungstest erfolgreich!" - }, - "messages": { - "requiredFields": "Bitte füllen Sie alle erforderlichen Felder aus", - "connectionSuccess": "Verbindungstest erfolgreich!", - "connectionFailed": "Verbindungstest fehlgeschlagen" - }, - "testingConnection": "Teste Verbindung...", - "saveSettings": "Konfiguration speichern", - "savingSettings": "Speichern..." - }, - "history": { - "searchPlaceholder": "Backups suchen...", - "allStatus": "Alle Status", - "status": { - "completed": "Abgeschlossen", - "failed": "Fehlgeschlagen", - "running": "Läuft", - "partial": "Teilweise" - }, - "deleteConfirm": "Sind Sie sicher, dass Sie dieses Backup vom {{date}} löschen möchten?", - "noBackups": "Keine Backups gefunden", - "tableHeaders": { - "date": "Datum", - "type": "Typ", - "status": "Status", - "size": "Größe", - "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", - "backupDetails": { - "backupId": "Backup-ID", - "startTime": "Startzeit", - "endTime": "Endzeit", - "destination": "Ziel", - "filesProcessed": "Verarbeitete Dateien", - "totalSize": "Gesamtgröße", - "compressionRatio": "Komprimierungsverhältnis", - "errorLog": "Fehlerprotokoll", - "noErrors": "Keine Fehler aufgetreten" - }, - "pagination": { - "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": { - "steps": { - "selectSource": "Quelle auswählen", - "chooseBackup": "Backup auswählen", - "restoreOptions": "Wiederherstellungsoptionen", - "reviewConfirm": "Überprüfen & Bestätigen", - "progress": "Wiederherstellungsfortschritt" - }, - "source": { - "title": "Backup-Quelle auswählen", - "subtitle": "Wählen Sie, woher das Backup wiederhergestellt werden soll", - "local": { - "name": "Lokales Backup", - "description": "Vom lokalen Dateisystem wiederherstellen" - }, - "s3": { - "name": "S3-Speicher", - "description": "Aus S3-Bucket wiederherstellen" - }, - "upload": { - "name": "Backup hochladen", - "description": "Eine Backup-Datei hochladen", - "comingSoon": "Upload-Funktion kommt bald" - }, - "configuration": { - "s3": "S3-Konfiguration", - "endpoint": "S3-Endpunkt-URL", - "bucket": "Bucket-Name", - "accessKey": "Zugriffsschlüssel-ID", - "secretKey": "Geheimer Zugriffsschlüssel" - } - }, - "backup": { - "title": "Backup für Wiederherstellung auswählen", - "subtitle": "Aus verfügbaren Backups auswählen", - "noBackupsFound": "Keine Backups in ausgewählter Quelle gefunden", - "encrypted": "Verschlüsseltes Backup", - "encryptedMessage": "Sie müssen die Verschlüsselungs-Passphrase angeben, um dieses Backup wiederherzustellen.", - "enterPassphrase": "Verschlüsselungs-Passphrase eingeben", - "at": "um" - }, - "restoreTypes": { - "full": { - "name": "Vollständige Wiederherstellung", - "description": "Alles wiederherstellen, einschließlich Datenbank, Fotos und Archive", - "warning": "Dies ersetzt alle aktuellen Daten" - }, - "database": { - "name": "Nur Datenbank", - "description": "Nur die Datenbank wiederherstellen (Einstellungen, Veranstaltungen, Benutzer)", - "warning": "Aktuelle Datenbank wird ersetzt" - }, - "files": { - "name": "Nur Dateien", - "description": "Nur Fotos und Archive wiederherstellen", - "warning": "Vorhandene Dateien können überschrieben werden" - }, - "selective": { - "name": "Selektive Wiederherstellung", - "description": "Bestimmte Elemente zur Wiederherstellung auswählen", - "warning": "Nur ausgewählte Elemente werden wiederhergestellt" - } - }, - "options": { - "title": "Wiederherstellungsoptionen", - "subtitle": "Wählen Sie, was wiederhergestellt werden soll", - "additionalOptions": { - "title": "Zusätzliche Optionen", - "skipPreBackup": "Vor-Wiederherstellungs-Backup überspringen", - "skipPreBackupHelp": "Standardmäßig wird vor der Wiederherstellung ein Backup erstellt. Aktivieren Sie dies, um es zu überspringen.", - "force": "Wiederherstellung erzwingen", - "forceHelp": "Sicherheitsprüfungen und Warnungen überschreiben (mit Vorsicht verwenden)" - } - }, - "confirmation": { - "title": "Überprüfen & Bestätigen", - "subtitle": "Bitte überprüfen Sie Ihre Wiederherstellungskonfiguration", - "validation": { - "passed": "Validierung bestanden", - "failed": "Validierung fehlgeschlagen", - "checking": "Validiere Wiederherstellungskonfiguration..." - }, - "spaceCheck": { - "title": "Speicherplatz", - "required": "Erforderlich", - "available": "Verfügbar", - "insufficient": "Unzureichender Speicherplatz" - }, - "summary": { - "title": "Wiederherstellungszusammenfassung", - "source": "Quelle", - "backupDate": "Backup-Datum", - "restoreType": "Wiederherstellungstyp", - "preBackup": "Vor-Backup", - "enabled": "Aktiviert", - "skipped": "Übersprungen" - }, - "warning": { - "title": "Wichtiger Hinweis", - "message": "Diese Wiederherstellungsoperation ersetzt vorhandene Daten. Stellen Sie sicher, dass Sie ein aktuelles Backup haben, bevor Sie fortfahren. Diese Aktion kann nicht rückgängig gemacht werden." - } - }, - "progress": { - "title": "Wiederherstellungsfortschritt", - "inProgress": "Wiederherstellung läuft...", - "completed": "Wiederherstellung abgeschlossen", - "overallProgress": "Gesamtfortschritt", - "current": "Aktuell", - "statusDetails": "Status-Details", - "restoreLogs": "Wiederherstellungsprotokolle", - "steps": { - "completed": "Abgeschlossen", - "running": "Läuft", - "failed": "Fehlgeschlagen", - "pending": "Ausstehend" - }, - "success": { - "title": "Wiederherstellung erfolgreich abgeschlossen", - "message": "Ihre Daten wurden wiederhergestellt. Bitte überprüfen Sie, ob alles korrekt funktioniert." - } - }, - "actions": { - "back": "Zurück", - "next": "Weiter", - "startRestore": "Wiederherstellung starten", - "starting": "Starte...", - "validating": "Validiere...", - "startNewRestore": "Neue Wiederherstellung starten" - }, - "messages": { - "restoreStarted": "Wiederherstellung erfolgreich gestartet" - } - }, - "messages": { - "backupStarted": "Backup erfolgreich gestartet", - "backupFailed": "Backup konnte nicht gestartet werden", - "configUpdated": "Backup-Konfiguration aktualisiert", - "configUpdateFailed": "Konfiguration konnte nicht aktualisiert werden", - "backupDeleted": "Backup erfolgreich gelöscht", - "deleteFailed": "Backup konnte nicht gelöscht werden", - "testEmailSent": "Verbindungstest erfolgreich!", - "testEmailFailed": "Verbindungstest fehlgeschlagen" - } - }, "maintenance": { "title": "Systemwartung", "message": "Wir führen derzeit geplante Wartungsarbeiten durch, um unseren Service zu verbessern. Wir sind in Kürze wieder online.", @@ -2640,5 +2363,26 @@ "needHelp": "Hilfe benötigt? Kontakt", "poweredBy": "Bereitgestellt von PicPeak", "devModeHint": "Entwicklungsmodus: E-Mail: admin@example.com, Passwort: admin123" + }, + "cssTemplates": { + "title": "Benutzerdefinierte CSS-Vorlagen", + "template": "Vorlage", + "templateName": "Vorlagenname", + "enableTemplate": "Diese Vorlage aktivieren", + "enableHint": "Aktivierte Vorlagen können beim Erstellen von Veranstaltungen ausgewählt werden", + "cssContent": "CSS-Inhalt", + "cssHint": "Verwenden Sie .gallery-page, um Stile auf die Galerie zu beschränken. Verfügbare Variablen: --gallery-bg, --gallery-text, --gallery-accent", + "securityNotice": "Sicherheitshinweis", + "securityText": "CSS wird bereinigt, um schädlichen Code zu verhindern. Externe URLs, @import und JavaScript-Ausdrücke werden blockiert.", + "resetToDefault": "Auf Standard zurücksetzen", + "resetConfirm": "Diese Vorlage auf Standard zurücksetzen? Ihre Änderungen gehen verloren.", + "unsavedChanges": "Ungespeicherte Änderungen", + "saveTemplate": "Vorlage speichern", + "lastUpdated": "Zuletzt aktualisiert", + "saved": "Vorlage erfolgreich gespeichert", + "saveFailed": "Vorlage konnte nicht gespeichert werden", + "sanitizationWarning": "Einige CSS-Muster wurden aus Sicherheitsgründen blockiert", + "reset": "Vorlage auf Standard zurückgesetzt", + "resetFailed": "Vorlage konnte nicht zurückgesetzt werden" } } diff --git a/frontend/src/i18n/locales/en.json b/frontend/src/i18n/locales/en.json index b49b62cc..4d596f13 100644 --- a/frontend/src/i18n/locales/en.json +++ b/frontend/src/i18n/locales/en.json @@ -224,10 +224,10 @@ "dayRemaining": "1 day remaining", "hoursRemaining": "{{hours}} hours remaining", "expiredMessage": "This gallery expired on {{date}}", - "contactOrganizer": "Please contact the event organizer if you need access to these photos", + "contactOrganizer": "Please contact the event organizer if you need access to these photos.", "searchPhotos": "Search photos by filename...", "sortByDate": "Sort by Date", - "sortByName": "Sort by Name", + "sortByName": "Sort by Name", "sortBySize": "Sort by Size", "allPhotos": "All Photos", "filter": "Filter", @@ -236,7 +236,7 @@ "liked": "Liked", "favorited": "Favorited", "favorites": "Favorites", - "downloadSelected": "Download Selected", + "downloadSelected": "Download {{count}} Selected", "shareGallery": "Share Gallery", "needHelp": "Need help? Contact us at", "noPhotosFound": "No photos found", @@ -244,7 +244,6 @@ "tryAgain": "Try Again", "loading": "Loading gallery...", "expiredOn": "This gallery expired on {{date}}.", - "contactOrganizer": "Please contact the event organizer if you need access to these photos.", "expiresIn": "Gallery expires in {{count}} day", "expiresIn_plural": "Gallery expires in {{count}} days", "downloadBefore": "Download your photos before they're no longer available.", @@ -262,7 +261,6 @@ "photosSelected": "{{count}} selected", "selectAll": "Select All", "deselectAll": "Deselect All", - "downloadSelected": "Download {{count}} Selected", "deleteSelected": "Delete Selected", "photosCount": "{{count}} photo", "photosCount_plural": "{{count}} photos", @@ -286,10 +284,7 @@ "noMedia": "No media uploaded yet", "searchPlaceholder": "Search photos...", "sortBy": "Sort By", - "sortByDate": "Sort by Date", "sortByCaptureDate": "Sort by Capture Date", - "sortByName": "Sort by Name", - "sortBySize": "Sort by Size", "sortByRating": "Sort by Rating", "photoGallery": "Photo Gallery", "photos": "Photos", @@ -308,7 +303,9 @@ "writeLovelyNote": "Write a lovely note...", "postComment": "Post Comment", "anonymous": "Anonymous" - } + }, + "rated": "Rated", + "commented": "Commented" }, "categories": { "title": "Photo Categories", @@ -429,7 +426,6 @@ "statistics": "Statistics", "views": "Views", "downloads": "Downloads", - "uniqueVisitors": "Unique Visitors", "noStatistics": "No statistics available yet", "archiveStatus": "Archive Status", "archivedOn": "Archived On", @@ -437,7 +433,7 @@ "loadingPhotos": "Loading photos...", "photoCategories": "Photo Categories", "organizeCategoriesInfo": "Organize your photos into categories. Categories help guests navigate and find specific types of photos.", - "categoriesTip": "Tip: Categories are specific to each event. You can also create global categories in Settings.", + "categoriesTip": "Tip: Categories are specific to each event. You can create custom categories like \"Ceremony\", \"Reception\", \"Portraits\", etc.", "contactInformation": "Contact Information", "hostEmailHelp": "Customer will receive gallery creation and expiration notifications", "adminEmailHelp": "Will receive system notifications and archive confirmations", @@ -534,8 +530,8 @@ "days365": "1 year", "inactive": "Inactive", "expired": "Expired", - "daysLeft": "{{count}}d left", - "daysLeft_plural": "{{count}}d left", + "daysLeft": "({{count}} day left)", + "daysLeft_plural": "({{count}} days left)", "subtitle": "Manage your photo galleries and events", "loadingEvents": "Loading events...", "failedToLoadEvents": "Failed to load events", @@ -556,8 +552,6 @@ "type": "Type", "date": "Date", "status": "Status", - "expires": "Expires", - "actions": "Actions", "noEventsFound": "No events found", "stats": { "totalEvents": "Total Events", @@ -571,31 +565,17 @@ "deleteEvent": "Delete Event", "deleteEventConfirm": "Are you sure you want to delete this event?", "downloadArchiveSoon": "Download archive coming soon", - "failedToLoadEvents": "Failed to load events", - "tryAgain": "Try Again", "eventExpiredMessage": "This event has expired", "guestsCannotAccessGallery": "Guests can no longer access the gallery. Consider archiving this event.", "warningEmailsHaveBeenSent": "Warning emails have been sent to the customer.", "extendSevenDays": "Extend 7 Days", - "overview": "Overview", - "eventInformation": "Event Information", "welcomeMessageLabel": "Welcome Message", "noWelcomeMessageSet": "No welcome message set", - "hostEmail": "Customer Email", - "adminEmail": "Admin Email", "createdOn": "Created", - "expires": "Expires", - "daysLeft": "({{count}} day left)", - "daysLeft_plural": "({{count}} days left)", - "shareLink": "Share Link", "copy": "Copy", "copied": "Copied!", - "uploadPhotos": "Upload Photos", - "photoCategories": "Photo Categories", "organizingPhotosInfo": "Organize your photos into categories. Categories help guests navigate and find specific types of photos.", - "categoriesTip": "Tip: Categories are specific to each event. You can create custom categories like \"Ceremony\", \"Reception\", \"Portraits\", etc.", "archiveStatusTitle": "Archive Status", - "archivedOn": "Archived On", "downloadingArchive": "Downloading {{name}} archive...", "downloadStarted": "Download started", "failedToDownloadArchive": "Failed to download archive", @@ -622,7 +602,24 @@ "failed": "Rename failed", "filesRenamed": "{{count}} files updated", "confirm": "Rename Event" - } + }, + "activeFilter": "Active", + "archivedFilter": "Archived", + "sortByName": "By Name", + "sortByDate": "By Date", + "sortByExpiration": "By Expiration", + "photosCount": "Photos", + "moreActions": "More Actions", + "copyLinkTooltip": "Copy Link", + "viewGalleryTooltip": "View Gallery", + "uploadPhotosTooltip": "Upload Photos", + "editTooltip": "Edit", + "archiveTooltip": "Archive", + "noEvents": "No events found", + "noEventsDescription": "Create your first event to get started.", + "bulkArchive": "Archive", + "confirmBulkArchive": "Are you sure you want to archive {{count}} event(s)?", + "confirmBulkArchiveDescription": "This action cannot be undone. Archived events will no longer be publicly accessible." }, "settings": { "title": "System Settings", @@ -1005,7 +1002,7 @@ "fullDashboard": "Full Dashboard", "refresh": "Refresh", "last7Days": "Last 7 days", - "last30Days": "Last 30 days", + "last30Days": "Last 30 days", "last90Days": "Last 90 days", "pageViews": "Page Views", "uniqueVisitors": "Unique Visitors", @@ -1049,7 +1046,7 @@ "uploadLogo": "Upload Logo", "removeLogo": "Remove Logo", "logoHelp": "Recommended size: 200x60px, PNG or JPEG", - "favicon": "Favicon", + "favicon": "Favicon", "currentFavicon": "Current favicon", "uploadFavicon": "Upload Favicon", "removeFavicon": "Remove Favicon", @@ -1671,8 +1668,6 @@ "username": "Username", "password": "Password", "enterPassword": "Enter password", - "fromEmail": "From Email", - "fromName": "From Name", "required": "required", "ignoreSslErrors": "Ignore SSL/TLS certificate errors", "ignoreSslWarning": "Warning: Disabling certificate verification makes the connection vulnerable to man-in-the-middle attacks. Only enable this if you trust the SMTP server and understand the security implications.", @@ -1823,7 +1818,9 @@ "upToDate": "Backup is up to date", "recent": "Backup is recent", "gettingOld": "Backup is getting old", - "outdated": "Backup is outdated" + "outdated": "Backup is outdated", + "failed": "Last backup failed", + "old": "Backup is getting old" }, "stats": { "totalBackups": "Total Backups", @@ -2000,7 +1997,15 @@ "duration": "Duration", "actions": "Actions" }, - "details": "Details", + "details": { + "backupDetails": "Backup Details", + "destination": "Destination", + "started": "Started", + "completed": "Completed", + "contentBackedUp": "Content Backed Up", + "errorDetails": "Error Details", + "manifest": "Manifest" + }, "statistics": "Statistics", "errors": "Errors", "backupDetails": { @@ -2030,15 +2035,6 @@ "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": { @@ -2083,26 +2079,26 @@ "at": "at" }, "restoreTypes": { - "full": { - "name": "Full Restore", - "description": "Restore everything including database, photos, and archives", - "warning": "This will replace all current data" - }, - "database": { - "name": "Database Only", - "description": "Restore only the database (settings, events, users)", - "warning": "Current database will be replaced" - }, - "files": { - "name": "Files Only", - "description": "Restore only photos and archives", - "warning": "Existing files may be overwritten" - }, - "selective": { - "name": "Selective Restore", - "description": "Choose specific items to restore", - "warning": "Only selected items will be restored" - } + "full": { + "name": "Full Restore", + "description": "Restore everything including database, photos, and archives", + "warning": "This will replace all current data" + }, + "database": { + "name": "Database Only", + "description": "Restore only the database (settings, events, users)", + "warning": "Current database will be replaced" + }, + "files": { + "name": "Files Only", + "description": "Restore only photos and archives", + "warning": "Existing files may be overwritten" + }, + "selective": { + "name": "Selective Restore", + "description": "Choose specific items to restore", + "warning": "Only selected items will be restored" + } }, "options": { "title": "Restore Options", @@ -2328,7 +2324,9 @@ "fiveStarsOnly": "5 Stars Only", "hasLikes": "Has likes", "hasFavorites": "Has favorites", - "hasComments": "Has comments" + "hasComments": "Has comments", + "showingPhotos": "Total photos", + "withRatings": "With ratings" }, "adminLogin": { "title": "Admin Login", @@ -2378,5 +2376,13 @@ "linkLabel": "Client Access Link", "regenerateToken": "Regenerate link", "tokenRegenerated": "Client access link regenerated" + }, + "export": { + "button": "Export", + "success": "Export downloaded successfully", + "error": "Export failed: ", + "exportSelected": "Export {{count}} selected", + "exportFiltered": "Export filtered photos", + "hint": "Select photos or apply filters to export" } } diff --git a/frontend/src/i18n/locales/nl.json b/frontend/src/i18n/locales/nl.json new file mode 100644 index 00000000..d7a925be --- /dev/null +++ b/frontend/src/i18n/locales/nl.json @@ -0,0 +1,2395 @@ +{ + "userManagement": { + "title": "Gebruikersbeheer", + "subtitle": "Beheer beheerders en uitnodigingen", + "loading": "Gebruikers laden...", + "loadError": "Kan gebruikers niet laden. Probeer het opnieuw.", + "inviteUser": "Gebruiker uitnodigen", + "createInvitation": "Uitnodiging aanmaken", + "email": "E-mailadres", + "emailPlaceholder": "gebruiker@voorbeeld.nl", + "role": "Rol", + "selectRole": "Selecteer een rol", + "sendInvitation": "Uitnodiging verzenden", + "editUser": "Gebruiker bewerken", + "editingUser": "Gebruiker bewerken", + "saveChanges": "Wijzigingen opslaan", + "deactivateUser": "Gebruiker deactiveren", + "cancelInvitation": "Uitnodiging annuleren", + "invitationSent": "Uitnodiging succesvol verzonden", + "invitationError": "Kan uitnodiging niet verzenden", + "invitationCancelled": "Uitnodiging geannuleerd", + "cancelInvitationError": "Kan uitnodiging niet annuleren", + "userUpdated": "Gebruiker succesvol bijgewerkt", + "updateUserError": "Kan gebruiker niet bijwerken", + "userDeactivated": "Gebruiker succesvol gedeactiveerd", + "deactivateUserError": "Kan gebruiker niet deactiveren", + "noRole": "Geen rol", + "neverLoggedIn": "Nooit ingelogd", + "expired": "Verlopen", + "deactivate": "Deactiveren", + "cancel": "Annuleren", + "tabs": { + "users": "Gebruikers", + "invitations": "Uitnodigingen" + }, + "stats": { + "totalUsers": "Totaal gebruikers", + "activeUsers": "Actieve gebruikers", + "pendingInvitations": "Openstaande uitnodigingen", + "inactiveUsers": "Inactieve gebruikers" + }, + "status": { + "active": "Actief", + "inactive": "Inactief" + }, + "table": { + "user": "Gebruiker", + "email": "E-mail", + "role": "Rol", + "status": "Status", + "lastLogin": "Laatste login", + "actions": "Acties", + "invitedBy": "Uitgenodigd door", + "expires": "Verloopt" + }, + "validation": { + "emailRequired": "E-mail is verplicht", + "emailInvalid": "Ongeldig e-mailformaat", + "roleRequired": "Rol is verplicht" + }, + "searchUsersPlaceholder": "Gebruikers zoeken...", + "searchInvitationsPlaceholder": "Uitnodigingen zoeken...", + "noUsers": "Geen gebruikers gevonden", + "noUsersFound": "Geen gebruikers komen overeen met uw zoekopdracht", + "noInvitations": "Geen openstaande uitnodigingen", + "noInvitationsFound": "Geen uitnodigingen komen overeen met uw zoekopdracht", + "confirmDeactivate": { + "title": "Gebruiker deactiveren", + "message": "Weet u zeker dat u {{name}} wilt deactiveren? Deze gebruiker kan dan niet meer inloggen." + }, + "confirmCancelInvitation": { + "title": "Uitnodiging annuleren", + "message": "Weet u zeker dat u de uitnodiging voor {{email}} wilt annuleren?" + } + }, + "common": { + "loading": "Laden...", + "error": "Fout", + "save": "Opslaan", + "cancel": "Annuleren", + "delete": "Verwijderen", + "edit": "Bewerken", + "add": "Toevoegen", + "search": "Zoeken", + "filter": "Filteren", + "sortBy": "Sorteren op", + "yes": "Ja", + "no": "Nee", + "back": "Terug", + "next": "Volgende", + "previous": "Vorige", + "close": "Sluiten", + "logout": "Uitloggen", + "menu": "Menu", + "change": "Wijzigen", + "remove": "Verwijderen", + "download": "Downloaden", + "downloadAll": "Alles downloaden", + "uploading": "Uploaden...", + "uploaded": "Geupload", + "photo": "foto", + "photos": "foto's", + "video": "video", + "videos": "video's", + "media": "media", + "restore": "Herstellen", + "actions": "Acties", + "refresh": "Vernieuwen", + "preview": "Voorbeeld", + "processing": "Verwerken...", + "upload": "Uploaden", + "days": "dagen", + "customize": "Aanpassen", + "hide": "Verbergen", + "unknown": "Onbekend", + "notSet": "Niet ingesteld", + "of": "van", + "up": "Omhoog", + "select": "Selecteren", + "selected": "Geselecteerd", + "chunk": "Deel", + "optional": "optioneel" + }, + "upload": { + "photoCategory": "Fotocategorie", + "noCategory": "Geen categorie", + "eventSpecific": "(Evenement-specifiek)", + "clickToUpload": "Klik om te uploaden of sleep bestanden hierheen", + "fileRequirements": "JPEG, PNG of WebP (max. 50 MB per bestand, {{limit}} bestanden per upload)", + "fileRequirementsMedia": "JPEG, PNG of WebP afbeeldingen, plus MP4/MOV/WEBM video's (max. 50 MB per bestand, {{limit}} bestanden per upload)", + "unsupportedFiles": "Sommige bestanden zijn overgeslagen omdat het formaat niet wordt ondersteund (gebruik JPEG/PNG/WebP/MP4/MOV/WEBM).", + "selectedFiles": "Geselecteerde bestanden", + "uploading": "Uploaden...", + "uploadComplete": "Upload voltooid!", + "uploadFailed": "Upload mislukt", + "someFilesFailed": "Sommige bestanden konden niet worden geupload", + "uploadPhotos": "Foto's uploaden", + "uploadMedia": "Foto's & video's uploaden", + "importExternal": "Importeren uit externe map", + "externalImportInfo": "Alle afbeeldingen uit de geselecteerde map worden geimporteerd.", + "selectExternalFolder": "Selecteer externe map onder /external-media", + "importFromSelectedFolder": "Importeren uit geselecteerde map", + "maxFilesReached": "Maximaal {{limit}} bestanden toegestaan", + "someFilesSkipped": "Er kunnen nog maar {{allowed}} bestanden worden toegevoegd (limiet {{limit}})", + "tooManyFiles": "Maximaal {{limit}} bestanden kunnen tegelijk worden geupload", + "limitInfo": "{{selected}} van {{limit}} bestanden geselecteerd ({{remaining}} resterend)", + "limitReached": "Uploadlimiet bereikt ({{limit}} bestanden per batch)", + "uploadingChunks": "{{count}} bestanden uploaden in {{total}} batches...", + "mediaCategory": "Mediacategorie", + "uploadAction": "{{count}} bestanden uploaden" + }, + "navigation": { + "dashboard": "Dashboard", + "events": "Evenementen", + "archives": "Archieven", + "settings": "Instellingen", + "eventTypes": "Evenementtypes", + "branding": "Huisstijl", + "analytics": "Statistieken", + "emailSettings": "E-mailinstellingen", + "backup": "Back-up & Herstel", + "cmsPages": "CMS-pagina's", + "users": "Gebruikers" + }, + "archives": { + "title": "Archieven", + "subtitle": "Beheer gearchiveerde fotogalerijen", + "loadingArchives": "Archieven laden...", + "totalArchives": "Totaal archieven", + "storageUsed": "Gebruikte opslag", + "totalPhotos": "Totaal foto's", + "avgArchiveSize": "Gem. archiefgrootte", + "searchPlaceholder": "Archieven zoeken...", + "allTypes": "Alle types", + "wedding": "Bruiloft", + "birthday": "Verjaardag", + "corporate": "Zakelijk", + "other": "Overig", + "sortByDate": "Sorteren op datum", + "sortByName": "Sorteren op naam", + "sortBySize": "Sorteren op grootte", + "tableHeaders": { + "event": "Evenement", + "type": "Type", + "archivedDate": "Archiefdatum", + "size": "Grootte", + "photos": "Foto's", + "actions": "Acties" + }, + "noArchivesFound": "Geen archieven gevonden", + "eventDateNA": "Evenementdatum: n.v.t.", + "processing": "Verwerken...", + "download": "Downloaden", + "restore": "Herstellen", + "delete": "Verwijderen", + "showing": "{{from}} tot {{to}} van {{total}} archieven", + "page": "Pagina {{current}} van {{total}}", + "storageManagement": "Opslagbeheer", + "storageInfo": "Archieven worden permanent bewaard tenzij handmatig verwijderd. Overweeg een bewaarbeleid om opslagkosten te beheren.", + "confirmRestore": "Weet u zeker dat u dit archief wilt herstellen? Het evenement wordt weer actief.", + "confirmDelete": "Weet u zeker dat u dit archief permanent wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", + "restoreSuccess": "Archief succesvol hersteld", + "deleteSuccess": "Archief permanent verwijderd" + }, + "auth": { + "login": "Inloggen", + "password": "Wachtwoord", + "enterPassword": "Voer het galerij-wachtwoord in", + "passwordPlaceholder": "Voer het galerij-wachtwoord in", + "invalidPassword": "Ongeldig wachtwoord", + "wrongPassword": "Onjuist wachtwoord. Controleer uw wachtwoord en probeer het opnieuw.", + "tooManyAttempts": "Te veel mislukte inlogpogingen. Probeer het later opnieuw.", + "sessionExpired": "Sessie verlopen", + "pleaseEnterPassword": "Voer een wachtwoord in", + "passwordHint": "Het wachtwoord is verstrekt door de organisator van het evenement. Neem contact op als u het niet heeft." + }, + "gallery": { + "title": "Fotogalerij", + "welcomeMessage": "Welkomstbericht", + "expiresOn": "Verloopt op", + "expires": "Verloopt", + "expired": "Verlopen", + "daysRemaining": "{{days}} dagen resterend", + "dayRemaining": "1 dag resterend", + "hoursRemaining": "{{hours}} uur resterend", + "expiredMessage": "Deze galerij is verlopen op {{date}}", + "contactOrganizer": "Neem contact op met de organisator als u toegang tot deze foto's nodig heeft.", + "searchPhotos": "Zoek foto's op bestandsnaam...", + "sortByDate": "Sorteren op datum", + "sortByName": "Sorteren op naam", + "sortBySize": "Sorteren op grootte", + "allPhotos": "Alle foto's", + "filter": "Filteren", + "feedbackFilter": "Feedbackfilter", + "all": "Alle", + "liked": "Geliked", + "favorited": "Favoriet", + "favorites": "Favorieten", + "downloadSelected": "Download {{count}} geselecteerde", + "shareGallery": "Galerij delen", + "needHelp": "Hulp nodig? Neem contact op via", + "noPhotosFound": "Geen foto's gevonden", + "failedToLoad": "Kan foto's niet laden", + "tryAgain": "Opnieuw proberen", + "loading": "Galerij laden...", + "expiredOn": "Deze galerij is verlopen op {{date}}.", + "expiresIn": "Galerij verloopt over {{count}} dag", + "expiresIn_plural": "Galerij verloopt over {{count}} dagen", + "downloadBefore": "Download uw foto's voordat ze niet meer beschikbaar zijn.", + "publicGalleryTitle": "Deze galerij is openbaar toegankelijk", + "publicGallerySubtitle": "Foto's worden nu geladen...", + "viewGallery": "Galerij bekijken", + "downloadAll": "Alles downloaden", + "downloading": "{{count}} foto downloaden...", + "downloading_plural": "{{count}} foto's downloaden...", + "downloadedPhotos": "{{count}} foto gedownload!", + "downloadedPhotos_plural": "{{count}} foto's gedownload!", + "downloadError": "Sommige foto's konden niet worden gedownload", + "selectPhotos": "Foto's selecteren", + "cancelSelection": "Selectie annuleren", + "photosSelected": "{{count}} geselecteerd", + "selectAll": "Alles selecteren", + "deselectAll": "Alles deselecteren", + "deleteSelected": "Geselecteerde verwijderen", + "photosCount": "{{count}} foto", + "photosCount_plural": "{{count}} foto's", + "searchByFilename": "Zoeken op bestandsnaam...", + "uncategorized": "Niet gecategoriseerd", + "sortAscending": "Oplopend sorteren", + "sortDescending": "Aflopend sorteren", + "remaining": "resterend", + "selectPhotosHint": "Tip: Gebruik Ctrl+klik (Cmd+klik op Mac) om snel meerdere foto's te selecteren", + "filters": "Filters", + "openFilters": "Filters openen", + "toggleSidebar": "Zijbalk in-/uitschakelen", + "toggleMenu": "Menu in-/uitschakelen", + "allCategories": "Alle categorieen", + "categories": "Categorieen", + "mediaType": "Media", + "allMedia": "Alle media", + "photosOnly": "Foto's", + "videosOnly": "Video's", + "download": "Downloaden", + "noMedia": "Nog geen media geupload", + "searchPlaceholder": "Foto's zoeken...", + "sortBy": "Sorteren op", + "sortByCaptureDate": "Sorteren op opnamedatum", + "sortByRating": "Sorteren op beoordeling", + "photoGallery": "Fotogalerij", + "photos": "Foto's", + "allRightsReserved": "Alle rechten voorbehouden", + "searchMemories": "Herinneringen zoeken...", + "thankYou": "Bedankt", + "thankYouMessage": "Dat u deel uitmaakte van ons verhaal en onze bijzondere dag onvergetelijk maakte.", + "rated": "Beoordeeld", + "commented": "Becommentarieerd", + "feedback": { + "title": "Feedback", + "shareThoughts": "Deel uw gedachten over \"{{name}}\"", + "rateThisMoment": "Beoordeel dit moment", + "comments": "Opmerkingen", + "noComments": "Nog geen opmerkingen. Wees de eerste!", + "yourName": "Uw naam", + "yourEmail": "Uw e-mail", + "writeLovelyNote": "Schrijf een mooi bericht...", + "postComment": "Opmerking plaatsen", + "anonymous": "Anoniem" + } + }, + "categories": { + "title": "Fotocategorieen", + "global": "Globale categorieen", + "eventSpecific": "Evenement-specifieke categorieen", + "addCategory": "Categorie toevoegen", + "organizationInfo": "Organiseer uw foto's in categorieen. Categorieen helpen gasten om specifieke soorten foto's te vinden.", + "eventSpecificCategories": "Evenement-specifieke categorieen", + "noEventSpecificCategories": "Geen evenement-specifieke categorieen. Globale categorieen zijn standaard beschikbaar.", + "globalCategoriesAlwaysAvailable": "Globale categorieen (altijd beschikbaar):", + "deleteCategoryTitle": "Categorie verwijderen", + "categoryCreatedSuccess": "Categorie succesvol aangemaakt", + "categoryDeletedSuccess": "Categorie succesvol verwijderd", + "failedToCreateCategory": "Kan categorie niet aanmaken", + "failedToDeleteCategory": "Kan categorie niet verwijderen", + "categoryName": "Categorienaam", + "noCategory": "Geen categorie", + "noCategoriesYet": "Nog geen categorieen. Maak uw eerste categorie aan om foto's te organiseren.", + "deleteConfirm": "Weet u zeker dat u \"{{name}}\" wilt verwijderen?", + "cannotDelete": "Kan categorie met foto's niet verwijderen. Wijs eerst de foto's opnieuw toe.", + "setCoverPhoto": "Omslagfoto instellen", + "removeCoverPhoto": "Omslagfoto verwijderen", + "coverPhotoSet": "Omslagfoto succesvol ingesteld", + "coverPhotoRemoved": "Omslagfoto verwijderd", + "failedToSetCoverPhoto": "Kan omslagfoto niet instellen", + "categoryHeroHint": "Als er geen omslagfoto is ingesteld voor een categorie, wordt de standaard hero-foto gebruikt." + }, + "events": { + "title": "Evenementen", + "create": "Aanmaken", + "createEvent": "Evenement aanmaken", + "totalViews": "Totaal weergaven", + "totalDownloads": "Totaal downloads", + "uniqueVisitors": "Unieke bezoekers", + "createNewEvent": "Nieuw evenement aanmaken", + "setupNewGallery": "Stel een nieuwe fotogalerij in voor uw evenement", + "createNewEventSubtitle": "Stel een nieuwe fotogalerij in voor uw evenement", + "eventNamePlaceholder": "bijv. Bruiloft Jan & Marie", + "welcomeMessageOptional": "Welkomstbericht (optioneel)", + "welcomeMessagePlaceholder": "Welkom bij onze bijzondere dag! Voel u vrij om deze herinneringen te downloaden en te delen...", + "hostEmailPlaceholder": "klant@voorbeeld.nl", + "adminEmailPlaceholder": "admin@voorbeeld.nl", + "securityAndAccess": "Beveiliging & Toegang", + "accessAndSecurity": "Toegang & Beveiliging", + "enterPassword": "Voer wachtwoord in", + "passwordPlaceholder": "Voer een veilig wachtwoord in", + "confirmPasswordPlaceholder": "Bevestig wachtwoord", + "galleryExpiresOn": "Galerij verloopt op {{date}}", + "guestsWillReceiveWarning": "Gasten ontvangen 7 dagen voor het verlopen een waarschuwingsmail.", + "types": { + "wedding": "Bruiloft", + "birthday": "Verjaardag", + "corporate": "Zakelijk", + "other": "Overig" + }, + "themes": { + "default": "Standaard", + "oceanBlue": "Oceaanblauw", + "royalPurple": "Koninklijk paars", + "roseGold": "Rozegoud", + "sunsetAmber": "Zonsondergang amber" + }, + "eventDetails": "Evenementdetails", + "eventName": "Evenementnaam", + "eventType": "Evenementtype", + "eventDate": "Evenementdatum", + "hostEmail": "E-mail klant", + "hostName": "Naam klant", + "hostNamePlaceholder": "Jan Jansen", + "adminEmail": "E-mail beheerder", + "adminNotificationEmail": "E-mail voor beheerdersmeldingen", + "expirationDate": "Vervaldatum", + "active": "Actief", + "archived": "Gearchiveerd", + "photoCount": "{{count}} foto's", + "totalSize": "Totale grootte", + "shareLink": "Deellink", + "copyLink": "Link kopieren", + "linkCopied": "Link gekopieerd!", + "viewGallery": "Galerij bekijken", + "uploadPhotos": "Foto's uploaden", + "archiveEvent": "Evenement archiveren", + "archiveConfirm": "Weet u zeker dat u dit evenement wilt archiveren? Deze actie kan niet ongedaan worden gemaakt.", + "extendExpiration": "{{days}} dagen verlengen", + "backToEvents": "Terug naar evenementen", + "loadingEventDetails": "Evenementdetails laden...", + "saveChanges": "Wijzigingen opslaan", + "eventExpired": "Dit evenement is verlopen", + "eventExpiresIn": "Dit evenement verloopt over {{days}} dagen", + "guestsNoAccess": "Gasten hebben geen toegang meer tot de galerij. Overweeg dit evenement te archiveren.", + "warningEmailsSent": "Waarschuwingsmails zijn naar de klant verzonden.", + "overview": "Overzicht", + "photos": "Foto's", + "categories": "Categorieen", + "eventInformation": "Evenementinformatie", + "sourceMode": "Bronmodus", + "sourceModeManaged": "Beheerd (uploaden naar PicPeak)", + "sourceModeReference": "Verwijzen naar externe map", + "sourceModeHelp": "Gebruik de beheerde modus voor directe uploads of verwijs naar een gekoppelde /external-media map bij gebruik van lokale opslag.", + "externalFolder": "Externe map", + "externalFolderHint": "Deze mappen worden gelezen vanuit de /external-media mount in uw container of host.", + "externalFolderRequired": "Selecteer een externe map voordat u opslaat.", + "welcomeMessage": "Welkomstbericht", + "noWelcomeMessage": "Geen welkomstbericht ingesteld", + "created": "Aangemaakt", + "expires": "Verloopt", + "shareWithGuests": "Deel deze link met gasten. Ze hebben het wachtwoord nodig om de galerij te openen.", + "shareWithGuestsPublic": "Deel deze link met gasten. Er is geen wachtwoord nodig voor deze galerij.", + "resetGalleryPassword": "Galerijwachtwoord resetten", + "resendCreationEmail": "Aanmaakmail opnieuw verzenden", + "creationEmailResent": "Aanmaakmail is in de wachtrij geplaatst", + "failedToResendEmail": "Kan aanmaakmail niet opnieuw verzenden", + "photoStatistics": "Fotostatistieken", + "totalPhotos": "Totaal foto's", + "managePhotos": "Foto's beheren", + "actions": "Acties", + "archivingInfo": "Archiveren maakt een ZIP-bestand van alle foto's en verwijdert de galerij uit openbare toegang.", + "statistics": "Statistieken", + "views": "Weergaven", + "downloads": "Downloads", + "noStatistics": "Nog geen statistieken beschikbaar", + "archiveStatus": "Archiefstatus", + "archivedOn": "Gearchiveerd op", + "downloadArchive": "Archief downloaden", + "loadingPhotos": "Foto's laden...", + "photoCategories": "Fotocategorieen", + "organizeCategoriesInfo": "Organiseer uw foto's in categorieen. Categorieen helpen gasten om specifieke soorten foto's te vinden.", + "categoriesTip": "Tip: Categorieen zijn specifiek per evenement. U kunt ook globale categorieen aanmaken in Instellingen.", + "contactInformation": "Contactgegevens", + "hostEmailHelp": "Klant ontvangt meldingen over aanmaak en verloop van de galerij", + "adminEmailHelp": "Ontvangt systeemmeldingen en archiefbevestigingen", + "securityAccess": "Beveiliging & Toegang", + "galleryPassword": "Galerijwachtwoord", + "requirePasswordToggle": "Wachtwoord vereisen voor deze galerij", + "requirePasswordToggleHelp": "Schakel dit uit als u de galerij zonder wachtwoord wilt delen. Iedereen met de link kan de foto's bekijken.", + "publicGalleryWarning": "Openbare galerijen zijn toegankelijk voor iedereen met de link. Overweeg download-watermerken in te schakelen en activiteit te monitoren.", + "passwordHelperText": "U kunt datums gebruiken zoals \"04-07-2025\" of willekeurige tekst met 6+ tekens", + "confirmPassword": "Bevestig wachtwoord", + "showPasswords": "Wachtwoorden tonen", + "newPasswordLabel": "Nieuw galerijwachtwoord", + "gallerySettings": "Galerijinstellingen", + "themeAndStyle": "Thema & Stijl", + "colorTheme": "Kleurthema", + "galleryExpiration": "Galerij vervaldatum", + "galleryExpiresIn": "Galerij verloopt over", + "daysAfterEvent": "dagen na evenementdatum", + "expiresOn": "Verloopt op", + "galleryWillExpireOn": "Galerij verloopt op {{date}}", + "expirationWarning": "Gasten ontvangen 7 dagen voor het verlopen een waarschuwingsmail.", + "noExpiration": "Geen vervaldatum", + "noExpirationHelp": "Deze galerij blijft actief totdat deze handmatig wordt gearchiveerd.", + "photoCap": "Fotolimiet", + "photoCapHelp": "Maximaal aantal toegestane foto's. 0 = onbeperkt", + "userUploads": "Instellingen gastuploads", + "allowUserUploads": "Gasten toestaan foto's te uploaden", + "allowUserUploadsHelp": "Sta gasten toe hun eigen foto's naar deze galerij te uploaden", + "allowUserUploadsDescription": "Sta gasten toe hun eigen foto's naar deze galerij te uploaden", + "uploadCategory": "Uploadcategorie", + "selectCategory": "Selecteer een categorie voor gastuploads", + "uploadCategoryHelp": "Alle door gasten geuploade foto's worden aan deze categorie toegevoegd", + "userUploadWarning": "Gastuploads worden gemodereerd en kunnen op elk moment door beheerders worden verwijderd.", + "allowDownloads": "Foto-downloads toestaan", + "allowDownloadsHelp": "Gasten toestaan foto's uit deze galerij te downloaden", + "downloadPermissions": "Downloadrechten", + "downloadsEnabled": "Downloads ingeschakeld", + "downloadsDisabled": "Downloads uitgeschakeld", + "downloadProtection": "Downloadbeveiliging", + "disableRightClick": "Rechtermuisknop blokkeren", + "watermarkDownloads": "Watermerk toevoegen aan downloads", + "enableDevtoolsProtection": "Ontwikkelaarstools detecteren", + "useCanvasRendering": "Canvas-rendering (geavanceerde beveiliging)", + "protectionInfo": "Beveiligingsfuncties helpen ongeautoriseerde downloads te voorkomen, maar kunnen niet alle methoden blokkeren.", + "protectionLevelBasic": "Basis - Alleen rechtermuisknop blokkeren", + "protectionLevelStandard": "Standaard - Sneltoetsen geblokkeerd", + "protectionLevelEnhanced": "Uitgebreid - Schermafbeelding detectie", + "protectionLevelMaximum": "Maximaal - DevTools-detectie & canvas-rendering", + "heroLogoSettings": "Hero logo-instellingen", + "heroLogoVisible": "Logo weergeven in hero-sectie", + "heroLogoSize": "Logogrootte", + "heroLogoSizeSmall": "Klein", + "heroLogoSizeMedium": "Medium", + "heroLogoSizeLarge": "Groot", + "heroLogoSizeXLarge": "Extra groot", + "heroLogoPosition": "Logopositie", + "heroLogoPositionTop": "Bovenaan (boven titel)", + "heroLogoPositionCenter": "Midden (tussen titel en datums)", + "heroLogoPositionBottom": "Onderaan (onder datums)", + "heroLogoInfo": "Deze instellingen zijn van toepassing wanneer de galerij de Hero-layout gebruikt. U kunt het logo verbergen of de grootte en positie aanpassen.", + "eventCustomLogo": "Aangepast evenementlogo", + "eventCustomLogoDescription": "Upload een aangepast logo voor dit evenement. Dit overschrijft het globale huisstijllogo alleen voor deze galerij.", + "uploadEventLogo": "Logo uploaden", + "replaceLogo": "Vervangen", + "removeLogo": "Verwijderen", + "eventLogoUploaded": "Evenementlogo succesvol geupload", + "eventLogoUploadFailed": "Kan evenementlogo niet uploaden", + "eventLogoRemoved": "Evenementlogo succesvol verwijderd", + "eventLogoRemoveFailed": "Kan evenementlogo niet verwijderen", + "heroLogoVisibleLabel": "Logo zichtbaar", + "heroLogoSizeLabel": "Grootte", + "heroLogoPositionLabel": "Positie", + "heroLogoHidden": "Logo verborgen", + "heroPhoto": "Hero-foto", + "heroPhotoHelp": "Selecteer een standaard hero-foto voor de galerij. U kunt dit per categorie overschrijven.", + "selectHeroPhoto": "Hero-foto selecteren", + "noHeroPhotoSelected": "Geen hero-foto geselecteerd", + "heroPhotoSelected": "Hero-foto geselecteerd", + "heroImageAnchor": "Hero-afbeelding bijsnijdpositie", + "heroImageAnchorDescription": "Klik op de afbeelding om het focuspunt voor bijsnijden in te stellen.", + "heroImageAnchorTop": "Boven", + "heroImageAnchorCenter": "Midden", + "heroImageAnchorBottom": "Onder", + "heroPreview": "Hero-voorbeeld", + "noPhotosAvailable": "Geen foto's beschikbaar", + "processingRequest": "Uw verzoek wordt verwerkt...", + "eventTypeWedding": "Bruiloft", + "eventTypeBirthday": "Verjaardag", + "eventTypeCorporate": "Zakelijk", + "eventTypeOther": "Overig", + "days30": "30 dagen", + "days60": "60 dagen", + "days90": "90 dagen", + "days365": "1 jaar", + "inactive": "Inactief", + "expired": "Verlopen", + "daysLeft": "{{count}}d resterend", + "daysLeft_plural": "{{count}}d resterend", + "subtitle": "Beheer uw fotogalerijen en evenementen", + "loadingEvents": "Evenementen laden...", + "failedToLoadEvents": "Kan evenementen niet laden", + "tryAgain": "Opnieuw proberen", + "bulkArchiveSuccess": "{{count}} evenementen succesvol gearchiveerd", + "bulkArchivePartial": "{{success}} evenementen gearchiveerd, {{failed}} mislukt", + "searchEventsPlaceholder": "Evenementen zoeken...", + "all": "Alle", + "expiring": "Verloopt binnenkort", + "eventsSelected": "{{count}} evenement geselecteerd", + "eventsSelected_plural": "{{count}} evenementen geselecteerd", + "clear": "Wissen", + "archiveSelected": "Geselecteerde archiveren", + "publicAccess": "Openbare toegang", + "passwordProtected": "Wachtwoordbeveiligd", + "newPasswordRequired": "Stel een wachtwoord in voordat u beveiliging inschakelt.", + "event": "Evenement", + "type": "Type", + "date": "Datum", + "status": "Status", + "noEventsFound": "Geen evenementen gevonden", + "stats": { + "totalEvents": "Totaal evenementen", + "activeEvents": "Actieve evenementen", + "totalPhotos": "Totaal foto's", + "expiringEvents": "Binnenkort verlopend" + }, + "viewDetails": "Details bekijken", + "archiveEventAction": "Evenement archiveren", + "downloadArchiveAction": "Archief downloaden", + "deleteEvent": "Evenement verwijderen", + "deleteEventConfirm": "Weet u zeker dat u dit evenement wilt verwijderen?", + "downloadArchiveSoon": "Archief downloaden binnenkort beschikbaar", + "eventExpiredMessage": "Dit evenement is verlopen", + "guestsCannotAccessGallery": "Gasten hebben geen toegang meer tot de galerij. Overweeg dit evenement te archiveren.", + "warningEmailsHaveBeenSent": "Waarschuwingsmails zijn naar de klant verzonden.", + "extendSevenDays": "7 dagen verlengen", + "eventInformation": "Evenementinformatie", + "welcomeMessageLabel": "Welkomstbericht", + "noWelcomeMessageSet": "Geen welkomstbericht ingesteld", + "hostEmail": "E-mail klant", + "adminEmail": "E-mail beheerder", + "createdOn": "Aangemaakt", + "shareLink": "Deellink", + "copy": "Kopieren", + "copied": "Gekopieerd!", + "organizingPhotosInfo": "Organiseer uw foto's in categorieen. Categorieen helpen gasten om specifieke soorten foto's te vinden.", + "categoriesTip": "Tip: Categorieen zijn specifiek per evenement. U kunt aangepaste categorieen aanmaken zoals \"Ceremonie\", \"Receptie\", \"Portretten\", etc.", + "archiveStatusTitle": "Archiefstatus", + "archivedOn": "Gearchiveerd op", + "downloadingArchive": "Archief {{name}} downloaden...", + "downloadStarted": "Download gestart", + "failedToDownloadArchive": "Kan archief niet downloaden", + "statisticsNotAvailable": "Nog geen statistieken beschikbaar", + "photoFilters": "Fotofilters", + "noStatisticsAvailableYet": "Nog geen statistieken beschikbaar", + "addPlus": "Toevoegen+", + "galleryTheme": "Galerijthema", + "customizeTheme": "Thema aanpassen", + "noThemeSet": "Geen thema ingesteld", + "customizingTheme": "Galerijthema aanpassen", + "customizingThemeFor": "Thema aanpassen voor {{event}}", + "customCssTemplate": "Aangepast CSS-sjabloon", + "customCssTemplateDesc": "Pas een aangepast CSS-sjabloon toe om de galerij met unieke visuele effecten te stylen.", + "noTemplate": "Geen sjabloon", + "useThemeOnly": "Alleen themapreset gebruiken", + "customTemplate": "Aangepast sjabloon", + "activeFilter": "Actief", + "archivedFilter": "Gearchiveerd", + "sortByName": "Op naam", + "sortByDate": "Op datum", + "sortByExpiration": "Op vervaldatum", + "photosCount": "Foto's", + "moreActions": "Meer acties", + "copyLinkTooltip": "Link kopieren", + "viewGalleryTooltip": "Galerij bekijken", + "uploadPhotosTooltip": "Foto's uploaden", + "editTooltip": "Bewerken", + "archiveTooltip": "Archiveren", + "noEvents": "Geen evenementen gevonden", + "noEventsDescription": "Maak uw eerste evenement aan om te beginnen.", + "bulkArchive": "Archiveren", + "confirmBulkArchive": "Weet u zeker dat u {{count}} evenement(en) wilt archiveren?", + "confirmBulkArchiveDescription": "Deze actie kan niet ongedaan worden gemaakt. Gearchiveerde evenementen zijn niet meer openbaar toegankelijk.", + "rename": { + "button": "Hernoemen", + "title": "Evenement hernoemen", + "validating": "Nieuwe naam valideren...", + "renamingFiles": "Bestanden hernoemen...", + "complete": "Voltooid!", + "failed": "Hernoemen mislukt", + "filesRenamed": "{{count}} bestanden bijgewerkt", + "confirm": "Evenement hernoemen" + } + }, + "settings": { + "title": "Systeeminstellingen", + "subtitle": "Configureer systeembrede instellingen en voorkeuren", + "loadingSettings": "Instellingen laden...", + "general": { + "title": "Algemeen", + "siteConfiguration": "Siteconfiguratie", + "siteUrl": "Site-URL", + "siteUrlHelp": "Wordt gebruikt voor het genereren van galerijlinks in e-mails", + "defaultExpiration": "Standaard vervaltijd (dagen)", + "defaultExpirationHelp": "Hoe lang galerijen standaard actief blijven", + "maxFileSize": "Max. bestandsgrootte (MB)", + "maxFileSizeHelp": "Maximale grootte per geuploade foto", + "maxFilesPerUpload": "Max. bestanden per upload", + "maxFilesPerUploadHelp": "Maximaal aantal foto's per uploadbatch (1-{{max}}).", + "allowedFileTypes": "Toegestane bestandstypen", + "allowedFileTypesHelp": "Kommagescheiden lijst van bestandsextensies", + "featureToggles": "Functieschakelaars", + "enableAnalytics": "Statistieken bijhouden inschakelen", + "enableRegistration": "Zelfregistratie voor beheerders toestaan", + "enableShortGalleryUrls": "Korte galerij-URL's gebruiken", + "enableShortGalleryUrlsHelp": "Verwijdert de evenement-slug uit nieuwe deellinks terwijl bestaande links blijven werken.", + "maintenanceMode": "Onderhoudsmodus inschakelen", + "language": "Taal", + "defaultLanguage": "Standaardtaal", + "defaultLanguageHelp": "Taal die aan gasten wordt getoond voor het inloggen", + "defaultWelcomeMessage": "Standaard welkomstbericht", + "welcomeMessage": "Welkomstbericht", + "welcomeMessagePlaceholder": "Voer een standaard welkomstbericht in dat wordt opgenomen in e-mails bij het aanmaken van galerijen", + "welcomeMessageHelp": "Dit bericht wordt opgenomen in alle e-mails bij het aanmaken van galerijen, tenzij overschreven bij het aanmaken van een evenement", + "saveSettings": "Algemene instellingen opslaan", + "saveGeneralSettings": "Algemene instellingen opslaan", + "dateTimeFormat": "Datum- & Tijdnotatie", + "dateFormat": "Datumnotatie", + "dateFormatHelp": "Hoe datums worden weergegeven in e-mails en door de hele applicatie", + "accountSection": "Beheerdersaccount", + "accountUsername": "Gebruikersnaam beheerder", + "accountUsernameHelp": "Wordt weergegeven in de beheerinterface en gebruikt in activiteitenlogs.", + "accountUsernameRequired": "Gebruikersnaam is verplicht", + "accountUsernameLength": "Gebruikersnaam moet minimaal 3 tekens bevatten", + "accountEmail": "E-mail beheerder", + "accountEmailHelp": "Wordt gebruikt voor inloggen en het ontvangen van beveiligingsmeldingen.", + "accountEmailRequired": "E-mailadres is verplicht", + "accountEmailInvalid": "Voer een geldig e-mailadres in", + "accountSaveButton": "Accountgegevens opslaan", + "accountSaveSuccess": "Accountgegevens bijgewerkt" + }, + "publicSite": { + "tabLabel": "Openbare site", + "badge": "Openbare landingspagina", + "title": "Openbare landingspagina", + "subtitle": "Publiceer een aangepaste landingspagina voor gasten wanneer ze uw domein bezoeken.", + "loading": "Instellingen openbare site laden...", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "htmlLabel": "HTML landingspagina", + "htmlPlaceholder": "Geef de HTML-markup op voor uw landingspagina hero, secties en calls to action.", + "htmlHelp": "Ruwe HTML wordt bij het opslaan opgeschoond. Onveilige tags, inline scripts en niet-toegestane attributen worden automatisch verwijderd. Tokens zoals {{company_name}}, {{company_tagline}} en {{support_email}} worden vervangen door waarden uit de Huisstijl-instellingen.", + "cssLabel": "Aangepaste CSS", + "cssPlaceholder": "Optionele CSS-overschrijvingen om lay-out, kleuren of typografie aan te passen.", + "cssHelp": "Imports en JavaScript-URL's worden verwijderd. Gebruik standaard CSS-selectors om de standaard styling te overschrijven.", + "saveCta": "Openbare site opslaan", + "saving": "Opslaan...", + "saveSuccess": "Instellingen openbare site opgeslagen.", + "saveError": "Kan instellingen openbare site niet opslaan.", + "resetCta": "Standaardwaarden herstellen", + "resetting": "Herstellen...", + "resetSuccess": "Sjabloon openbare site hersteld naar standaardwaarden.", + "resetError": "Kan sjabloon openbare site niet herstellen.", + "previewTitle": "Live voorbeeld", + "previewSandboxed": "Voorbeeld in sandbox", + "previewDisabled": "Schakel de openbare site in om het live voorbeeld te zien.", + "sanitizationNotice": "Scripts, ingesloten frames en onveilige attributen worden verwijderd voor publicatie. Alleen veilige HTML, links en afbeeldingen zijn toegestaan.", + "htmlRequired": "Geef HTML-inhoud op voordat u de openbare site inschakelt." + }, + "storage": { + "title": "Opslag", + "overview": "Opslagoverzicht", + "totalUsed": "Totaal gebruikt", + "archiveStorage": "Archiefopslag", + "storageLimit": "Opslaglimiet", + "storageLimitHelper": "Stel een limiet in voor het opslaggebruik van foto's. Deze limiet is adviserend en wordt gemarkeerd wanneer bereikt.", + "softLimitInputLabel": "Limiet (GB)", + "softLimitHelper": "Voer het gewenste maximale opslaggebruik in gigabytes in.", + "recommendedSoftLimit": "Aanbevolen limiet", + "diskCapacity": "Schijfcapaciteit", + "diskCapacityReported": "Schijfcapaciteit (gerapporteerd)", + "diskAvailable": "Beschikbaar", + "diskAvailableReported": "Beschikbaar (gerapporteerd)", + "diskFree": "Vrij", + "diskFreeReported": "Vrij (gerapporteerd)", + "diskMetricsUnavailable": "Schijfmetingen zijn niet beschikbaar in Docker Desktop of gevirtualiseerde omgevingen.", + "applyRecommended": "Aanbevolen gebruiken", + "applyAvailable": "Beschikbare ruimte gebruiken", + "invalidSoftLimit": "Voer een geldig getal in voor de limiet.", + "saveSoftLimit": "Limiet opslaan", + "limitNotEnforced": "Deze limiet is alleen adviserend en wordt niet automatisch afgedwongen.", + "overrideTitle": "Handmatige capaciteitsoverschrijving", + "diskOverrideEnvNote": "Schijfcapaciteit wordt beheerd door omgevingsvariabelen en kan hier niet worden bewerkt.", + "diskOverrideSettingsHelp": "Stel aangepaste capaciteitswaarden in wanneer Docker onrealistische cijfers rapporteert.", + "overrideCapacityLabel": "Totale capaciteit (GB)", + "overrideCapacityHelper": "Laat leeg om de automatische meting te gebruiken.", + "overrideAvailableLabel": "Beschikbare ruimte (GB)", + "overrideAvailableHelper": "Optioneel. Laat leeg om te berekenen op basis van totale capaciteit minus gebruikte opslag.", + "saveOverride": "Capaciteitsoverschrijving opslaan", + "capacityRequiredForAvailable": "Voer een totale capaciteit in voordat u beschikbare ruimte instelt.", + "availableExceedsCapacity": "Beschikbare ruimte kan de totale capaciteit niet overschrijden.", + "storageUsage": "Opslaggebruik", + "storageByEvent": "Opslag per evenement", + "storageManagement": "Opslagbeheer", + "storageManagementHelp": "Overweeg oude evenementen te archiveren of te verwijderen om opslagruimte vrij te maken. Gearchiveerde evenementen worden gecomprimeerd en gebruiken minder opslag dan actieve galerijen.", + "noEventsUsingStorage": "Geen evenementen gebruiken opslag", + "unlimited": "Onbeperkt" + }, + "security": { + "title": "Beveiliging", + "passwordSettings": "Wachtwoordinstellingen", + "minPasswordLength": "Minimale wachtwoordlengte", + "minPasswordLengthHelp": "Minimaal aantal tekens voor galerijwachtwoorden", + "passwordComplexity": "Wachtwoordcomplexiteit", + "passwordComplexityHelp": "Vereist beveiligingsniveau voor galerijwachtwoorden", + "complexitySimple": "Eenvoudig (6+ tekens, willekeurige tekst)", + "complexityModerate": "Gemiddeld (8+ tekens, hoofdletters/kleine letters/cijfers)", + "complexityStrong": "Sterk (12+ tekens, hoofdletters/kleine letters/cijfers)", + "complexityVeryStrong": "Zeer sterk (12+ tekens, alle tekentypen)", + "sessionAuth": "Sessie & Authenticatie", + "sessionTimeout": "Sessietime-out (minuten)", + "sessionTimeoutHelp": "Time-out voor beheerdersessie in minuten", + "maxLoginAttempts": "Max. inlogpogingen", + "maxLoginAttemptsHelp": "Maximum mislukte inlogpogingen per IP voor vergrendeling", + "attemptWindowMinutes": "Pogingenvenster (minuten)", + "attemptWindowMinutesHelp": "Hoe ver terug wordt gekeken bij het tellen van mislukte inlogpogingen", + "lockoutDurationMinutes": "Vergrendelingsduur (minuten)", + "lockoutDurationMinutesHelp": "Hoe lang de galerij of het account vergrendeld blijft na te veel mislukte pogingen", + "enable2FA": "Tweefactorauthenticatie inschakelen voor beheerders", + "recaptchaSettings": "reCAPTCHA-instellingen", + "enableRecaptcha": "reCAPTCHA inschakelen voor inlogformulieren", + "siteKey": "Sitesleutel", + "siteKeyHelp": "Uw reCAPTCHA v2-sitesleutel (openbaar)", + "secretKey": "Geheime sleutel", + "secretKeyHelp": "Uw reCAPTCHA v2-geheime sleutel (houd prive)", + "recaptchaHelp": "Haal uw reCAPTCHA-sleutels op bij", + "saveSettings": "Beveiligingsinstellingen opslaan", + "saveSecuritySettings": "Beveiligingsinstellingen opslaan" + }, + "categories": { + "title": "Categorieen", + "about": "Over fotocategorieen", + "aboutText": "Globale categorieen zijn beschikbaar voor alle evenementen. U kunt ook evenement-specifieke categorieen aanmaken bij het bewerken van individuele evenementen. Categorieen helpen foto's te organiseren en stellen gasten in staat om foto's op type te filteren in de galerijweergave." + }, + "systemStatus": { + "title": "Systeemstatus", + "storageOverview": "Opslagoverzicht", + "systemInfo": "Systeeminformatie", + "databaseInfo": "Database-informatie", + "platform": "Platform", + "nodeVersion": "Node-versie", + "uptime": "Uptime", + "cpuCores": "CPU-kernen", + "memoryUsage": "Geheugengebruik", + "memoryUsed": "Geheugen gebruikt", + "photos": "Foto's", + "admins": "Beheerders", + "dbSize": "Databasegrootte", + "services": "Achtergronddiensten", + "fileWatcher": "Bestandsbewaker", + "fileWatcherDesc": "Bewaakt nieuwe foto's", + "expirationChecker": "Vervalcontrole", + "expirationCheckerDesc": "Archiveert verlopen galerijen", + "emailProcessor": "E-mailverwerker", + "emailProcessorDesc": "Verstuurt e-mails uit de wachtrij", + "emailQueue": "Status e-mailwachtrij", + "pending": "In afwachting", + "sent": "Verzonden", + "failed": "Mislukt", + "lastUpdate": "Laatste update" + }, + "photoDimensions": { + "title": "Fotoafmetingen", + "totalPhotos": "Totaal foto's", + "withDimensions": "Met afmetingen", + "missingDimensions": "Ontbrekende afmetingen", + "repairButton": "Afmetingen repareren", + "repairing": "Repareren...", + "alreadyRunning": "Reparatie is al bezig", + "started": "Reparatie gestart voor {{count}} foto's", + "noneToRepair": "Alle foto's hebben al afmetingen", + "resultSuccess": "Laatste reparatie: {{success}} bijgewerkt, {{failed}} mislukt", + "description": "Vul ontbrekende breedte/hoogte aan voor foto's die zijn geupload voordat afmetingen werden bijgehouden. Vereist voor Masonry- en Mosaic-layouts." + }, + "updateNotifications": { + "title": "Updatemeldingen", + "description": "Ontvang e-mailmeldingen wanneer nieuwe versies van PicPeak beschikbaar zijn.", + "enableEmails": "E-mailmeldingen inschakelen", + "enableEmailsDesc": "Stuur e-mail naar beheerders wanneer een nieuwe versie beschikbaar is", + "recipients": "E-mailontvangers", + "recipientsPlaceholder": "admin@voorbeeld.nl, andere@voorbeeld.nl", + "recipientsHelper": "Kommagescheiden e-mailadressen. Laat leeg om naar alle beheerders te verzenden.", + "lastNotified": "Laatste melding verzonden voor versie: {{version}}", + "checkNow": "Controleren & Melden", + "sendTest": "Test-e-mail verzenden", + "saved": "Instellingen opgeslagen", + "saveError": "Kan instellingen niet opslaan", + "emailSent": "Meldingse-mail verzonden naar {{count}} ontvangers", + "emailFailed": "Kan melding niet verzenden", + "checkSuccess": "Melding verzonden voor nieuwe versie", + "checkNoAction": "Geen melding nodig: {{reason}}", + "checkError": "Kan niet controleren op updates" + }, + "events": { + "title": "Evenement aanmaken", + "requiredFields": "Verplichte velden", + "requiredFieldsDescription": "Configureer welke contactvelden verplicht zijn bij het aanmaken van nieuwe evenementen.", + "requireCustomerName": "Klantnaam verplicht", + "requireCustomerNameHelp": "Klantnaam moet worden opgegeven voor nieuwe evenementen", + "requireCustomerEmail": "E-mail klant verplicht", + "requireCustomerEmailHelp": "E-mail klant moet worden opgegeven voor nieuwe evenementen", + "customerEmailWarning": "Verplicht voor het verzenden van galerijuitnodigingen", + "requireAdminEmail": "E-mail beheerder verplicht", + "requireAdminEmailHelp": "E-mail beheerder moet worden opgegeven voor nieuwe evenementen", + "adminEmailWarning": "Verplicht voor het ontvangen van evenementmeldingen", + "requireEventDate": "Evenementdatum verplicht", + "requireEventDateHelp": "Evenementdatum moet worden opgegeven bij het aanmaken van evenementen", + "eventDateWarning": "Galerij-URL's gebruiken willekeurige identificatoren in plaats van datums", + "requireExpiration": "Vervaldatum verplicht", + "requireExpirationHelp": "Galerijen moeten een vervaldatum hebben", + "expirationWarning": "Galerijen zonder vervaldatum blijven actief totdat ze handmatig worden gearchiveerd", + "saveSettings": "Evenementinstellingen opslaan", + "noteTitle": "Opmerking", + "noteText": "Deze instellingen zijn alleen van toepassing op het aanmaken van nieuwe evenementen. Bestaande evenementen worden niet beinvloed. Standaard zijn alle velden verplicht." + }, + "imageSecurity": { + "title": "Afbeeldingsbeveiliging", + "saveSuccess": "Afbeeldingsbeveiligingsinstellingen opgeslagen", + "saveError": "Kan instellingen niet opslaan", + "loadError": "Kan afbeeldingsbeveiligingsinstellingen niet laden", + "defaultProtection": "Standaard beveiligingsinstellingen", + "defaultProtectionHelp": "Deze instellingen zijn van toepassing op alle nieuwe evenementen. Individuele evenementen kunnen deze standaardwaarden overschrijven.", + "protectionLevel": "Standaard beveiligingsniveau", + "imageQuality": "Standaard beeldkwaliteit", + "fragmentationLevel": "Fragmentatieniveau", + "enableDevtools": "Standaard DevTools-detectie inschakelen", + "enableCanvas": "Standaard canvas-rendering inschakelen (geavanceerde beveiliging)", + "rateLimiting": "Snelheidsbeperking", + "rateLimitingHelp": "Beperk het aantal beeldaanvragen om scraping te voorkomen.", + "requestsPerMinute": "Aanvragen per minuut", + "requestsPer5Minutes": "Aanvragen per 5 min", + "requestsPerHour": "Aanvragen per uur", + "securityMonitoring": "Beveiligingsmonitoring", + "suspiciousThreshold": "Drempel verdachte activiteit", + "autoBlockThreshold": "Drempel automatisch blokkeren", + "enableMonitoring": "Beveiligingsmonitoring inschakelen", + "blockSuspiciousIps": "Verdachte IP-adressen automatisch blokkeren", + "logEvents": "Beveiligingsgebeurtenissen loggen in database", + "infoTitle": "Over afbeeldingsbeveiliging", + "infoText": "Deze beveiligingsfuncties helpen bij het voorkomen van ongewenst downloaden en kopieren, maar kunnen niet alle methoden blokkeren. Vastberaden gebruikers kunnen mogelijk nog steeds manieren vinden om afbeeldingen vast te leggen. Overweeg watermerken en juridische overeenkomsten voor uitgebreide bescherming." + }, + "moderation": { + "title": "Moderatie", + "wordFilters": "Woordfilters", + "description": "Beheer woorden die gefilterd of geblokkeerd moeten worden in opmerkingen", + "addFilter": "Nieuw filter toevoegen", + "enterWord": "Voer woord in om te filteren", + "searchFilters": "Filters zoeken...", + "filterAdded": "Woordfilter succesvol toegevoegd", + "filterExists": "Dit woordfilter bestaat al", + "addError": "Kan woordfilter niet toevoegen", + "filterUpdated": "Woordfilter succesvol bijgewerkt", + "updateError": "Kan woordfilter niet bijwerken", + "filterDeleted": "Woordfilter succesvol verwijderd", + "deleteError": "Kan woordfilter niet verwijderen", + "wordRequired": "Voer een woord in om te filteren", + "confirmDelete": "Weet u zeker dat u dit woordfilter wilt verwijderen?", + "loading": "Woordfilters laden...", + "noMatchingFilters": "Geen overeenkomende filters gevonden", + "noFilters": "Nog geen woordfilters geconfigureerd", + "severityLow": "Laag", + "severityModerate": "Gemiddeld", + "severityHigh": "Hoog", + "severityBlock": "Blokkeren", + "severityLevels": "Ernstniveaus", + "lowDescription": "Woord wordt gemarkeerd voor beoordeling maar niet automatisch geblokkeerd", + "moderateDescription": "Opmerking vereist handmatige goedkeuring voordat deze zichtbaar is", + "highDescription": "Opmerking wordt automatisch verborgen en vereist beheerderbeoordeling", + "blockDescription": "Opmerking wordt direct geweigerd en kan niet worden ingediend" + }, + "styling": { + "title": "Aangepaste CSS" + }, + "thumbnails": { + "title": "Miniaturen", + "dimensionsTitle": "Miniatuurafmetingen & Kwaliteit", + "dimensionsHelp": "Configureer de grootte en kwaliteit van automatisch gegenereerde miniaturen. Hogere waarden geven mooiere voorbeelden maar vergroten opslag en laadtijden.", + "width": "Breedte (px)", + "widthHelp": "50-1000 pixels", + "height": "Hoogte (px)", + "heightHelp": "50-1000 pixels", + "quality": "Kwaliteit", + "qualityHelp": "1-100, hoger = betere kwaliteit maar grotere bestanden", + "format": "Formaat", + "fit": "Pasmodus", + "fitHelp": "Hoe afbeeldingen worden aangepast aan de miniatuurafmetingen. \"Cover\" snijdt bij om te vullen, \"Contain\" past binnen de grenzen.", + "fit_cover": "Cover (bijsnijden om te vullen)", + "fit_contain": "Contain (passend binnen)", + "fit_fill": "Vullen (uitrekken)", + "fit_inside": "Binnenkant (verkleinen om te passen)", + "fit_outside": "Buitenkant (vergroten om te bedekken)", + "regenerateTitle": "Miniaturen opnieuw genereren", + "regenerateHelp": "Na het wijzigen van miniatuurinstellingen kunt u alle bestaande miniaturen opnieuw genereren om de nieuwe configuratie toe te passen. Dit draait op de achtergrond en kan even duren bij grote galerijen.", + "regenerateButton": "Alle miniaturen opnieuw genereren", + "regenerateStarted": "Miniatuur-regeneratie gestart", + "regenerateError": "Kan miniatuur-regeneratie niet starten", + "saveSuccess": "Miniatuurinstellingen opgeslagen", + "saveError": "Kan miniatuurinstellingen niet opslaan", + "loadError": "Kan miniatuurinstellingen niet laden", + "infoTitle": "Over miniaturen", + "infoText": "Miniaturen zijn kleinere voorbeeldafbeeldingen die worden gegenereerd van uw originelen. Het vergroten van de afmetingen of kwaliteit verbetert hoe foto's er uitzien in het galerijraster, maar gebruikt meer opslag en bandbreedte. Na het wijzigen van instellingen, gebruik \"Alle miniaturen opnieuw genereren\" om bestaande foto's bij te werken." + }, + "seo": { + "title": "SEO & Robots", + "indexingTitle": "Zoekmachine-indexering", + "allowIndexing": "Zoekmachine-indexering toestaan", + "allowIndexingHelp": "Wanneer uitgeschakeld worden alle crawlers geblokkeerd via robots.txt. Aangeraden uit voor prive fotoplatforms.", + "sitemapUrl": "Sitemap-URL", + "sitemapUrlHelp": "Optioneel. Wordt toegevoegd aan robots.txt indien opgegeven.", + "aiBlockingTitle": "AI & Bot-blokkering", + "blockAiCrawlers": "AI/LLM-crawlers blokkeren", + "blockAiCrawlersHelp": "Voorkom dat AI-trainingsbots toegang krijgen tot uw inhoud.", + "blockedAgents": "Geblokkeerde AI-agents", + "addAgentPlaceholder": "Voer agentnaam in...", + "blockSocialBots": "Social media-voorbeeldbots blokkeren", + "blockSocialBotsHelp": "Voorkom linkvoorbeelden op Twitter, Facebook, LinkedIn, etc.", + "metaTagsTitle": "Metatags & Aangepaste regels", + "metaNoindex": "Noindex-metatag toevoegen", + "metaNoindexHelp": "Vertelt zoekmachines om pagina's niet te indexeren (HTML-niveau, aanvullend op robots.txt).", + "metaNofollow": "Nofollow-metatag toevoegen", + "metaNofollowHelp": "Vertelt zoekmachines om links op pagina's niet te volgen.", + "metaNoai": "Noai/noimageai-metatag toevoegen", + "metaNoaiHelp": "Geeft aan dat inhoud niet mag worden gebruikt voor AI-training.", + "customRules": "Aangepaste robots.txt-regels", + "ruleAgentPlaceholder": "User-agent", + "rulePathPlaceholder": "Disallow-pad", + "showPreview": "robots.txt-voorbeeld tonen", + "hidePreview": "robots.txt-voorbeeld verbergen", + "saveSettings": "SEO-instellingen opslaan" + }, + "analytics": { + "title": "Statistieken", + "umamiIntegration": "Umami Analytics-integratie", + "enableUmami": "Umami Analytics inschakelen", + "umamiUrl": "Umami-URL", + "umamiUrlHelp": "De URL van uw Umami-instantie (bijv. https://analytics.uwdomein.nl)", + "websiteId": "Website-ID", + "websiteIdHelp": "Uw Umami website-ID (te vinden in het Umami-dashboard)", + "shareUrl": "Deel-URL (optioneel)", + "shareUrlHelp": "Openbare deel-URL voor het insluiten van het volledige dashboard (aanmaken in Umami)", + "umamiInfo": "Over Umami Analytics", + "umamiInfoText": "Umami is een privacygericht, open-source analyticsplatform. Het houdt paginaweergaven, unieke bezoekers en aangepaste gebeurtenissen bij zonder cookies te gebruiken.", + "learnMore": "Meer informatie over Umami", + "saveAnalyticsSettings": "Statistiekinstellingen opslaan", + "backendAnalytics": "Backend-statistieken", + "backendAnalyticsText": "Het systeem houdt ook basisstatistieken bij op de server voor beveiligings- en prestatiemonitoring.", + "tracked": "Bijgehouden metrieken", + "galleryViews": "Galerij paginaweergaven", + "photoDownloads": "Individuele en bulk-downloads", + "uniqueVisitors": "Unieke bezoekers op basis van IP", + "deviceTypes": "Apparaattypen op basis van user agents", + "privacy": "Privacy", + "privacyText": "IP-adressen worden gehasht voor privacy. Er worden geen persoonsgegevens opgeslagen. Statistiekgegevens worden 90 dagen bewaard." + } + }, + "analytics": { + "title": "Statistiekendashboard", + "titleSimple": "Statistieken", + "subtitle": "Volg galerijprestaties en bezoekerbetrokkenheid", + "detailedSubtitle": "Gedetailleerde statistieken aangedreven door Umami", + "loadingAnalytics": "Statistieken laden...", + "showSummaryView": "Samenvatting tonen", + "fullDashboard": "Volledig dashboard", + "refresh": "Vernieuwen", + "last7Days": "Laatste 7 dagen", + "last30Days": "Laatste 30 dagen", + "last90Days": "Laatste 90 dagen", + "pageViews": "Paginaweergaven", + "uniqueVisitors": "Unieke bezoekers", + "totalDownloads": "Totaal downloads", + "topGallery": "Populairste galerij", + "topPages": "Populairste pagina's", + "views": "weergaven", + "visitors": "unieke bezoekers", + "topDownloadsByGallery": "Meeste downloads per galerij", + "deviceBreakdown": "Apparaatverdeling", + "desktop": "Desktop", + "mobile": "Mobiel", + "tablet": "Tablet", + "storageUsage": "Opslaggebruik", + "used": "Gebruikt", + "of": "van", + "totalPhotos": "Totaal foto's", + "activeEvents": "Actieve evenementen", + "notConfigured": "Umami Analytics niet geconfigureerd", + "configureInstructions": "Configureer Umami in uw omgevingsvariabelen en beheerdersinstellingen om echte statistieken te zien.", + "noData": "Geen gegevens beschikbaar", + "percentChange": "{{percent}}% ten opzichte van vorige periode" + }, + "branding": { + "title": "Huisstijl & Thema's", + "titleFull": "Huisstijl & Aanpassing", + "subtitle": "Pas het uiterlijk van uw galerijen aan", + "loadingBranding": "Huisstijlinstellingen laden...", + "themeAndStyle": "Thema & Stijl", + "companyInfo": "Bedrijfsinformatie", + "companyName": "Bedrijfsnaam", + "companyNameHelp": "Wordt weergegeven in galerijheaders en e-mails", + "companyTagline": "Bedrijfsslogan", + "companyTaglineHelp": "Een korte beschrijving van uw bedrijf", + "supportEmail": "Support-e-mail", + "supportEmailHelp": "Contact-e-mail voor gastsupport", + "footerText": "Voettekst", + "footerTextHelp": "Wordt onderaan galerijen weergegeven", + "logo": "Logo", + "currentLogo": "Huidig logo", + "uploadLogo": "Logo uploaden", + "removeLogo": "Logo verwijderen", + "logoHelp": "Aanbevolen grootte: 200x60px, PNG of JPEG", + "favicon": "Favicon", + "currentFavicon": "Huidig favicon", + "uploadFavicon": "Favicon uploaden", + "removeFavicon": "Favicon verwijderen", + "faviconHelp": "PNG- of ICO-formaat, aanbevolen grootte: 32x32px", + "watermark": "Watermerk", + "watermarkSettings": "Watermerkinstellingen", + "enableWatermarks": "Watermerken inschakelen", + "watermarkHelp": "Voeg uw bedrijfsnaam als watermerk toe aan gedownloade foto's", + "watermarkLogo": "Watermerklogo", + "currentWatermark": "Huidig watermerk", + "uploadWatermarkLogo": "Watermerklogo uploaden", + "watermarkPosition": "Watermerkpositie", + "topLeft": "Linksboven", + "topRight": "Rechtsboven", + "center": "Midden", + "bottomLeft": "Linksonder", + "bottomRight": "Rechtsonder", + "watermarkOpacity": "Watermerk-dekking", + "watermarkSize": "Watermerkgrootte", + "theme": "Thema", + "galleryTheme": "Galerijthema", + "themeCustomization": "Thema-aanpassing", + "selectPreset": "Selecteer een vooringesteld thema", + "colors": "Kleuren", + "primaryColor": "Primaire kleur", + "secondaryColor": "Secundaire kleur", + "accentColor": "Accentkleur", + "backgroundColor": "Achtergrondkleur", + "textColor": "Tekstkleur", + "colorMode": "Kleurmodus", + "colorModeLight": "Licht", + "colorModeDark": "Donker", + "colorModeAuto": "Automatisch", + "colorModeHelp": "Automatisch volgt de systeemvoorkeur van de bezoeker.", + "customCSS": "Aangepaste CSS", + "preview": "Voorbeeld", + "previewInNewTab": "Voorbeeld in nieuw tabblad", + "reset": "Herstellen", + "saveChanges": "Wijzigingen opslaan", + "applyLivePreview": "Wijzigingen direct toepassen (Live voorbeeld)", + "eventSpecificThemes": "Evenement-specifieke thema's", + "eventThemesInfo": "U kunt deze globale thema-instellingen overschrijven voor individuele evenementen bij het aanmaken of bewerken ervan.", + "themePresets": "Themapresets", + "galleryLayout": "Galerijlay-out", + "layoutDescriptions": { + "grid": "Klassieke rasterlay-out met gelijkmatige fotogroottes", + "masonry": "Pinterest-achtige lay-out met variabele hoogtes", + "carousel": "Diashow op volledig scherm met navigatie", + "timeline": "Foto's geordend op datum", + "hero": "Uitgelichte afbeelding met raster eronder", + "mosaic": "Artistieke lay-out met gemengde groottes", + "justified": "Rijgebaseerde lay-out met behoud van beeldverhoudingen", + "gallery-premium": "Elegante lichte thema met hero en masonry (Beta)", + "gallery-story": "Filmisch donker thema met scenesecties (Beta)" + }, + "layoutSettings": "Lay-outinstellingen", + "photoSpacing": "Foto-afstand", + "spacing": { + "tight": "Krap", + "normal": "Normaal", + "relaxed": "Ruim" + }, + "photoAnimation": "Fotoanimatie", + "animation": { + "none": "Geen", + "fade": "Vervagen", + "scale": "Schalen", + "slide": "Schuiven" + }, + "columns": "Kolommen", + "mobile": "Mobiel", + "tablet": "Tablet", + "desktop": "Desktop", + "enableAutoplay": "Autoplay inschakelen", + "autoplayInterval": "Autoplay-interval (seconden)", + "groupPhotosBy": "Foto's groeperen op", + "grouping": { + "day": "Dag", + "week": "Week", + "month": "Maand" + }, + "masonryMode": "Lay-outmodus", + "masonryModeOptions": { + "columns": "Kolommen (Pinterest-stijl)", + "rows": "Rijen (Aangepast gerechtvaardigd)", + "flickr": "Flickr (Beproefde justified lay-out)", + "justified": "Google Photos (Knuth-Plass-algoritme)" + }, + "masonryModeHint": { + "columns": "Pinterest-achtige verticale kolommen met variabele hoogtes", + "rows": "Aangepaste rijgebaseerde justified lay-out", + "flickr": "Flickrs open-source justified lay-outalgoritme", + "justified": "Google Photos-achtige rijen met Knuth-Plass-algoritme voor optimale onderbrekingen" + }, + "targetRowHeight": "Doelrijhoogte", + "targetRowHeightHint": "Hoogte in pixels (150-400). Foto's worden geschaald om in rijen te passen.", + "lastRowBehavior": "Laatste rij uitlijning", + "lastRowOptions": { + "left": "Links uitgelijnd", + "center": "Gecentreerd", + "justify": "Gerechtvaardigd (uitrekken)" + }, + "thumbnailScale": "Miniatuurschaal", + "thumbnailScaleOptions": { + "xs": "XS — Meeste foto's", + "sm": "SM — Meer foto's", + "md": "MD — Standaard", + "lg": "LG — Grotere foto's", + "xl": "XL — Grootste foto's" + }, + "thumbnailScaleHint": "Past het aantal kolommen aan ten opzichte van de basisrasterkolommen", + "showHeroSection": "Hero-sectie tonen", + "showHeroSectionHint": "Toon een uitgelichte hero-afbeelding boven de justified galerij", + "heroHeight": "Hero-sectiehoogte", + "heroHeightOptions": { + "small": "Klein (40-50%)", + "medium": "Medium (50-70%)", + "large": "Groot (60-80%)" + }, + "heroOverlayOpacity": "Hero-overlay dekking", + "heroOverlayHint": "Verdonker de hero-afbeelding om de leesbaarheid van tekst te verbeteren", + "typographyAndStyle": "Typografie & Stijl", + "bodyFont": "Bodytekst lettertype", + "headingFont": "Koptekst lettertype", + "sameAsBody": "Zelfde als bodytekst", + "fontSize": "Lettergrootte", + "fontSizes": { + "small": "Klein", + "normal": "Normaal", + "large": "Groot" + }, + "borderRadius": "Hoekafronding", + "borderRadiusOptions": { + "none": "Geen", + "small": "Klein", + "medium": "Medium", + "large": "Groot" + }, + "shadowStyle": "Schaduwstijl", + "shadowOptions": { + "none": "Geen", + "subtle": "Subtiel", + "normal": "Normaal", + "dramatic": "Dramatisch" + }, + "backgroundPattern": "Achtergrond", + "backgroundOptions": { + "none": "Geen", + "dots": "Stippen", + "grid": "Raster", + "waves": "Golven" + }, + "customCSSHelp": "Geavanceerd: Voeg aangepaste CSS toe om het uiterlijk verder aan te passen", + "cssInstructions": { + "title": "Aangepaste CSS gebruiken", + "variables": "Thema CSS-variabelen", + "variablesDesc": "Gebruik deze CSS-variabelen om bij uw themapresets te passen:", + "layouts": "Aangepaste galerijlay-outs", + "layoutsDesc": "Richt galerijonderdelen met deze selectors:", + "glassEffect": "Glasmorfisme-effect", + "glassEffectDesc": "Maak moderne glaseffecten:", + "tip": "Tip", + "tipText": "Gebruik CSS-sjablonen uit Instellingen > CSS-sjablonen voor kant-en-klare ontwerpen zoals Apple Liquid Glass." + }, + "resetToDefault": "Standaardwaarden herstellen", + "applyTheme": "Thema toepassen", + "customTheme": "Aangepast thema", + "customizeTheme": "Thema aanpassen", + "saveTheme": "Thema opslaan", + "previewLayout": "Lay-outvoorbeeld", + "livePreview": "Live voorbeeld", + "heroPlaceholderText": "De hero-foto van uw evenement verschijnt hier", + "whiteLabel": "White Label", + "hidePoweredBy": "\"Powered by PicPeak\"-vermelding verbergen", + "hidePoweredByHelp": "Verwijder de PicPeak-vermelding uit galerij-voetteksten voor een volledig white-label ervaring", + "logoCustomization": "Logo-aanpassing", + "changeLogo": "Logo wijzigen", + "logoSizeSmall": "Klein (32px)", + "logoSizeMedium": "Medium (48px)", + "logoSizeLarge": "Groot (64px)", + "logoSizeXLarge": "Extra groot (96px)", + "logoSizeCustom": "Aangepast", + "logoMaxHeight": "Maximale hoogte (pixels)", + "logoMaxHeightHelp": "Stel een aangepaste maximale hoogte in voor het logo (20-200 pixels)", + "logoPosition": "Logopositie in header", + "positionLeft": "Links", + "positionCenter": "Midden", + "positionRight": "Rechts", + "logoDisplayMode": "Weergavemodus", + "logoOnly": "Alleen logo", + "textOnly": "Alleen bedrijfsnaam", + "logoAndText": "Logo en bedrijfsnaam", + "showLogoInHeader": "Logo tonen in galerijheader", + "showLogoInHeaderHelp": "Toon het logo in de hoofdheaderbalk", + "showLogoInHero": "Logo tonen in hero-sectie", + "showLogoInHeroHelp": "Toon het logo in hero-secties (voor niet-raster lay-outs)", + "headerStyle": "Headerstijl", + "headerStyleDescription": "Kies hoe de galerijheader wordt weergegeven. De headerstijl is onafhankelijk van de fotolay-out.", + "headerStyleOptions": { + "hero": "Hero-afbeelding", + "standard": "Standaardbanner", + "minimal": "Minimaal", + "none": "Geen header" + }, + "headerStyleDescriptions": { + "hero": "Afbeelding op volledige hoogte met evenementinfo-overlay", + "standard": "Klassieke banner met evenementdetails", + "minimal": "Compacte header met essentiele info", + "none": "Header volledig verbergen" + }, + "heroDividerStyle": "Scheidingsstijl", + "heroDividerDescription": "Kies hoe de overgang tussen de hero-afbeelding en galerij-inhoud eruitziet.", + "dividerOptions": { + "wave": "Golf", + "straight": "Recht", + "angle": "Hoek", + "curve": "Boog", + "none": "Geen" + }, + "controlsStyle": "Bedieningsstijl", + "controlsStyleDescription": "Kies hoe galerijfilters en bedieningen worden weergegeven.", + "controlsStyleOptions": { + "classic": "Klassiek", + "sidebar": "Zijbalk" + }, + "controlsStyleDescriptions": { + "classic": "Inline filterbalk onder de header", + "sidebar": "Menuknop opent zijbalk met filters" + }, + "controlsStyleHeroWarning": "Zijbalk wordt aanbevolen voor hero-headers om te voorkomen dat bedieningen boven de hero-afbeelding verschijnen." + }, + "admin": { + "title": "Beheerpaneel", + "welcome": "Welkom terug, {{name}}", + "recentActivity": "Recente activiteit", + "systemStatus": "Systeemstatus", + "totalEvents": "Totaal evenementen", + "activeGalleries": "Actieve galerijen", + "storageUsed": "Gebruikte opslag", + "totalPhotos": "Totaal foto's", + "storagePercent": "{{percent}}% van limiet {{limit}}", + "storageSoftLimitConfigured": "Geconfigureerde limiet: {{limit}}", + "storageSoftLimitRecommended": "Aanbevolen limiet: {{limit}}", + "version": "Versie", + "archivedEvents": "Gearchiveerde evenementen", + "systemHealth": "Systeemgezondheid", + "health": { + "healthy": "Gezond", + "warning": "Waarschuwing", + "error": "Fout", + "checking": "Controleren..." + }, + "updates": { + "available": "Update beschikbaar", + "newVersion": "Versie {{version}} is beschikbaar", + "currentVersion": "Huidig: {{version}}", + "channel": "Kanaal: {{channel}}", + "channelStable": "Stabiel", + "channelBeta": "Beta", + "beta": "BETA", + "viewReleaseNotes": "Release-opmerkingen bekijken", + "updateAvailableShort": "v{{version}} beschikbaar", + "checkForUpdates": "Controleren op updates", + "upToDate": "U bent up-to-date", + "lastChecked": "Laatst gecontroleerd: {{time}}", + "updateNow": "Nu bijwerken", + "updateDialog": { + "title": "PicPeak bijwerken", + "detectedEnv": "Gedetecteerde omgeving", + "beforeUpdating": "Voor het bijwerken:", + "updateCommands": "Updateopdrachten:", + "afterUpdating": "Na het bijwerken:", + "copyAllCommands": "Alle opdrachten kopieren", + "completeChecklist": "Voltooi de checklist voor het bijwerken", + "error": "Kan update-instructies niet laden" + } + }, + "notifications": "Meldingen", + "viewAllNotifications": "Alle meldingen bekijken", + "noNotifications": "Geen nieuwe meldingen", + "markAllRead": "Alles als gelezen markeren", + "clearAll": "Alles wissen", + "close": "Sluiten", + "noNotificationsMessage": "Geen meldingen", + "notificationMessages": { + "eventCreated": "Nieuw evenement \"{{eventName}}\" is aangemaakt", + "eventArchived": "Evenement \"{{eventName}}\" is gearchiveerd", + "eventUpdated": "Evenement \"{{eventName}}\" is bijgewerkt", + "eventDeleted": "Evenement \"{{eventName}}\" is verwijderd", + "photosUploaded": "{{count}} foto's geupload naar \"{{eventName}}\"", + "photoDeleted": "Foto verwijderd uit \"{{eventName}}\"", + "photosBulkDeleted": "{{count}} foto's verwijderd uit \"{{eventName}}\"", + "eventExpiring": "Evenement \"{{eventName}}\" verloopt over {{days}} dagen", + "eventExpired": "Evenement \"{{eventName}}\" is verlopen", + "passwordChanged": "Wachtwoord gewijzigd door {{actorName}}", + "passwordReset": "Wachtwoord gereset voor \"{{eventName}}\"", + "settingsUpdated": "{{type}} instellingen bijgewerkt", + "emailTemplateUpdated": "E-mailsjabloon \"{{template}}\" bijgewerkt", + "bulkDownload": "{{count}} foto's gedownload uit \"{{eventName}}\"", + "storageWarning": "Opslaggebruik op {{percentage}}%", + "adminLogout": "Beheerder {{actorName}} uitgelogd", + "categoryCreated": "Categorie \"{{name}}\" aangemaakt voor \"{{eventName}}\"", + "categoryUpdated": "Categorie \"{{name}}\" bijgewerkt voor \"{{eventName}}\"", + "categoryDeleted": "Categorie \"{{name}}\" verwijderd uit \"{{eventName}}\"", + "cmsPageUpdated": "CMS-pagina \"{{slug}}\" bijgewerkt", + "emailConfigUpdated": "E-mailconfiguratie bijgewerkt", + "faviconUploaded": "Favicon geupload", + "brandingUpdated": "Huisstijlinstellingen bijgewerkt", + "generalSettingsUpdated": "Algemene instellingen bijgewerkt", + "securitySettingsUpdated": "Beveiligingsinstellingen bijgewerkt", + "themeUpdated": "Thema-instellingen bijgewerkt", + "archiveDownloaded": "Archief gedownload voor \"{{eventName}}\"", + "archiveDeleted": "Archief verwijderd voor \"{{eventName}}\"", + "archiveRestored": "Archief hersteld voor \"{{eventName}}\"", + "systemActivity": "Systeemactiviteit: {{type}}", + "adminProfileUpdated": "Beheerdersprofiel bijgewerkt door {{actorName}}" + }, + "notificationToasts": { + "markedAllRead": "Alle meldingen als gelezen gemarkeerd", + "clearedAll": "{{count}} meldingen gewist", + "profileUpdated": "Beheerdersprofiel bijgewerkt" + }, + "markAsRead": "Markeren als gelezen", + "markAllAsRead": "Alles als gelezen markeren", + "notificationSettings": "Meldingsinstellingen", + "changePassword": "Wachtwoord wijzigen", + "darkMode": "Overschakelen naar donkere modus", + "lightMode": "Overschakelen naar lichte modus", + "accountSettings": { + "title": "Beheerdersaccount", + "description": "Werk de inloggegevens bij die worden gebruikt om in te loggen bij PicPeak.", + "username": "Gebruikersnaam", + "usernamePlaceholder": "Beheerder", + "email": "E-mail", + "emailPlaceholder": "admin@voorbeeld.nl", + "updateButton": "Profiel bijwerken" + }, + "profileUpdateError": "Kan beheerdersprofiel niet bijwerken. Probeer het opnieuw.", + "loadingDashboard": "Dashboard laden...", + "activeEvents": "Actieve evenementen", + "expiringSoon": "Binnenkort verlopend", + "next7Days": "Komende 7 dagen", + "totalViews": "Totaal weergaven", + "downloads": "Downloads", + "percentFromLastWeek": "{{percent}}% ten opzichte van vorige week", + "dashboardSubtitle": "Welkom terug! Hier ziet u wat er met uw galerijen gebeurt.", + "eventsExpiringSoon": "Binnenkort verlopende evenementen", + "noEventsExpiring": "Geen evenementen verlopen in de komende 7 dagen", + "daysLeft": "{{count}} dag resterend", + "daysLeft_plural": "{{count}} dagen resterend", + "viewAllExpiringEvents": "Alle {{count}} verlopende evenementen bekijken", + "noRecentActivity": "Geen recente activiteit", + "viewAllActivity": "Alle activiteit bekijken", + "quickActions": "Snelle acties", + "viewArchives": "Archieven bekijken", + "analytics": "Statistieken", + "activities": { + "event_created": "Nieuw evenement aangemaakt: {{eventName}}", + "photos_uploaded": "{{count}} foto's geupload naar {{eventName}}", + "event_archived": "Evenement gearchiveerd: {{eventName}}", + "archive_restored": "Archief hersteld: {{eventName}}", + "archive_deleted": "Archief verwijderd: {{eventName}}", + "archive_downloaded": "Archief gedownload: {{eventName}}", + "email_config_updated": "E-mailconfiguratie bijgewerkt", + "email_template_updated": "E-mailsjabloon bijgewerkt: {{template}}", + "branding_updated": "Huisstijlinstellingen bijgewerkt", + "theme_updated": "Thema-instellingen bijgewerkt", + "bulk_download": "{{count}} foto's gedownload uit {{eventName}}", + "gallery_password_entry": "Wachtwoord ingevoerd voor {{eventName}}", + "expiration_warning_viewed": "Vervalwaarschuwing bekeken voor {{eventName}}", + "feedback_settings_updated": "Feedbackinstellingen bijgewerkt", + "feedback_moderated": "Feedback gemodereerd", + "feedback_deleted": "Feedback verwijderd", + "photo_like": "Foto geliked in {{eventName}}", + "photo_favorite": "Foto favoriet gemaakt in {{eventName}}", + "photo_rating": "Foto beoordeeld in {{eventName}}", + "photo_comment": "Opmerking geplaatst bij foto in {{eventName}}", + "guest_feedback_like": "Gast heeft een foto geliked in {{eventName}}", + "guest_feedback_favorite": "Gast heeft een foto favoriet gemaakt in {{eventName}}", + "guest_feedback_rating": "Gast heeft een foto beoordeeld in {{eventName}}", + "guest_feedback_comment": "Gast heeft een opmerking geplaatst bij een foto in {{eventName}}", + "word_filter_added": "Woordfilter toegevoegd", + "external_import_completed": "Import externe media voltooid ({{imported}} geimporteerd, {{skipped}} overgeslagen)", + "bulk_archive_completed": "Bulkarchivering voltooid", + "event_activated": "Evenement geactiveerd: {{eventName}}", + "event_deactivated": "Evenement gedeactiveerd: {{eventName}}", + "photo_deleted": "Foto verwijderd uit {{eventName}}", + "photos_bulk_deleted": "{{count}} foto's verwijderd uit {{eventName}}", + "settings_updated": "Instellingen bijgewerkt", + "event_updated": "Evenement bijgewerkt: {{eventName}}", + "event_renamed": "Evenement hernoemd: {{eventName}}", + "event_deleted": "Evenement verwijderd: {{eventName}}", + "password_changed": "Wachtwoord gewijzigd", + "email_resent": "Aanmaakmail opnieuw verzonden voor: {{eventName}}", + "category_created": "Categorie aangemaakt: {{categoryName}}", + "category_updated": "Categorie bijgewerkt: {{categoryName}}", + "category_deleted": "Categorie verwijderd: {{categoryName}}", + "general_settings_updated": "Algemene instellingen bijgewerkt", + "favicon_uploaded": "Favicon geupload", + "analytics_settings_updated": "Statistiekinstellingen bijgewerkt", + "cms_page_updated": "CMS-pagina bijgewerkt: {{page}}", + "security_settings_updated": "Beveiligingsinstellingen bijgewerkt", + "password_reset": "Wachtwoord gereset voor: {{eventName}}", + "admin_logout": "Beheerder {{actorName}} uitgelogd", + "system_activity": "Systeemactiviteit: {{type}}", + "unknown": "Onbekende activiteit" + }, + "userManagement": "Gebruikersbeheer", + "inviteUser": "Gebruiker uitnodigen", + "pendingInvitations": "Openstaande uitnodigingen", + "roles": { + "super_admin": "Superbeheerder", + "admin": "Beheerder", + "editor": "Redacteur", + "viewer": "Kijker" + }, + "userStatus": { + "active": "Actief", + "inactive": "Inactief" + }, + "inviteForm": { + "email": "E-mailadres", + "role": "Rol", + "send": "Uitnodiging verzenden" + }, + "acceptInvite": { + "title": "Beheerderuitnodiging accepteren", + "username": "Kies een gebruikersnaam", + "password": "Wachtwoord aanmaken", + "submit": "Account aanmaken" + }, + "photos": { + "hidden": "Verborgen", + "hideSelected": "Verbergen", + "showSelected": "Tonen", + "hiddenSuccess": "Foto's verborgen voor gasten", + "visibleSuccess": "Foto's nu zichtbaar voor gasten" + } + }, + "permissions": { + "insufficient": "U heeft geen toestemming om deze actie uit te voeren", + "viewOnly": "Alleen bekijken" + }, + "acceptInvitation": { + "title": "Uitnodiging accepteren", + "subtitle": "Maak uw beheerdersaccount aan", + "validating": "Uitnodiging valideren...", + "invalidToken": "Ongeldige uitnodiging", + "invalidTokenMessage": "Deze uitnodigingslink is ongeldig of verlopen. Neem contact op met uw beheerder voor een nieuwe uitnodiging.", + "expiredToken": "Uitnodiging verlopen", + "expiredTokenMessage": "Deze uitnodiging is verlopen. Vraag een nieuwe uitnodiging aan bij uw beheerder.", + "alreadyUsed": "Uitnodiging al gebruikt", + "alreadyUsedMessage": "Deze uitnodiging is al gebruikt om een account aan te maken.", + "invitedAs": "U bent uitgenodigd als", + "expiresAt": "Uitnodiging verloopt", + "usernameLabel": "Gebruikersnaam", + "usernamePlaceholder": "Kies een gebruikersnaam", + "usernameHelp": "3-50 tekens, alleen letters, cijfers, underscores en koppeltekens", + "passwordLabel": "Wachtwoord", + "passwordPlaceholder": "Maak een sterk wachtwoord aan", + "confirmPasswordLabel": "Bevestig wachtwoord", + "confirmPasswordPlaceholder": "Bevestig uw wachtwoord", + "passwordStrength": "Wachtwoordsterkte", + "requirements": { + "title": "Wachtwoordvereisten:", + "minLength": "Minimaal 12 tekens", + "uppercase": "Minimaal een hoofdletter", + "lowercase": "Minimaal een kleine letter", + "number": "Minimaal een cijfer", + "special": "Minimaal een speciaal teken" + }, + "strength": { + "weak": "Zwak", + "fair": "Redelijk", + "good": "Goed", + "strong": "Sterk" + }, + "createAccount": "Account aanmaken", + "creating": "Account aanmaken...", + "success": "Account aangemaakt!", + "successMessage": "Uw account is succesvol aangemaakt. U kunt nu inloggen met uw gegevens.", + "redirecting": "Doorverwijzen naar login over {{seconds}}...", + "goToLogin": "Ga naar login", + "contactAdminMessage": "Neem contact op met uw beheerder om een nieuwe uitnodiging aan te vragen.", + "passwordsMatch": "Wachtwoorden komen overeen", + "alreadyHaveAccount": "Heeft u al een account?", + "signIn": "Inloggen", + "errors": { + "usernameRequired": "Gebruikersnaam is verplicht", + "usernameTooShort": "Gebruikersnaam moet minimaal 3 tekens bevatten", + "usernameTooLong": "Gebruikersnaam mag maximaal 50 tekens bevatten", + "usernameInvalid": "Gebruikersnaam mag alleen letters, cijfers, underscores en koppeltekens bevatten", + "passwordRequired": "Wachtwoord is verplicht", + "passwordTooShort": "Wachtwoord moet minimaal 12 tekens bevatten", + "passwordsDoNotMatch": "Wachtwoorden komen niet overeen", + "confirmPasswordRequired": "Bevestig uw wachtwoord", + "usernameTaken": "Deze gebruikersnaam is al in gebruik", + "emailTaken": "Er bestaat al een account met dit e-mailadres", + "genericError": "Kan account niet aanmaken. Probeer het opnieuw." + } + }, + "errors": { + "notFound": "Niet gevonden", + "galleryNotFound": "Galerij niet gevonden", + "galleryNotFoundMessage": "Deze galerij bestaat niet of is verwijderd.", + "galleryArchived": "Galerij gearchiveerd", + "galleryArchivedMessage": "Deze galerij is gearchiveerd en is niet meer toegankelijk. Neem contact op met de organisator als u toegang tot deze foto's nodig heeft.", + "unauthorized": "Niet geautoriseerd", + "forbidden": "Niet toegestaan", + "serverError": "Serverfout", + "somethingWentWrong": "Er is iets misgegaan", + "tryAgainLater": "Probeer het later opnieuw", + "refreshPage": "Pagina vernieuwen", + "oopsSomethingWentWrong": "Oeps! Er is iets misgegaan", + "unexpectedError": "Er is een onverwachte fout opgetreden. Maak u geen zorgen, uw gegevens zijn veilig.", + "goToHomepage": "Ga naar de startpagina", + "errorDetails": "Foutdetails", + "requiredFields": "Vul alle verplichte velden in", + "enterTestEmail": "Voer een test-e-mailadres in", + "failedToCreateEvent": "Kan evenement niet aanmaken", + "eventCreationFailed": "Kan evenement niet aanmaken", + "networkError": "Netwerkfout. Controleer uw verbinding en probeer het opnieuw.", + "sessionExpired": "Sessie verlopen. Log opnieuw in." + }, + "validation": { + "eventNameRequired": "Evenementnaam is verplicht", + "hostEmailRequired": "E-mail klant is verplicht", + "hostNameRequired": "Klantnaam is verplicht", + "adminEmailRequired": "E-mail beheerder is verplicht", + "invalidEmailFormat": "Ongeldig e-mailformaat", + "passwordRequired": "Wachtwoord is verplicht", + "passwordMinLength": "Wachtwoord moet minimaal 6 tekens bevatten", + "passwordsDoNotMatch": "Wachtwoorden komen niet overeen", + "passwordSecurityRequirements": "Wachtwoord voldoet niet aan de beveiligingsvereisten", + "expirationRange": "Vervaltijd moet tussen 1 en 365 dagen zijn" + }, + "legal": { + "impressum": "Colofon", + "datenschutz": "Privacybeleid", + "termsOfService": "Algemene voorwaarden", + "cookiePolicy": "Cookiebeleid" + }, + "toast": { + "saveSuccess": "Wijzigingen succesvol opgeslagen", + "saveError": "Kan wijzigingen niet opslaan", + "deleteSuccess": "Succesvol verwijderd", + "deleteError": "Kan niet verwijderen", + "uploadSuccess": "Upload succesvol voltooid", + "uploadError": "Upload mislukt", + "loginSuccess": "Succesvol ingelogd", + "loginError": "Inloggen mislukt", + "passwordChanged": "Wachtwoord succesvol gewijzigd", + "linkCopied": "Link gekopieerd naar klembord", + "eventCreated": "Evenement succesvol aangemaakt", + "eventUpdated": "Evenement succesvol bijgewerkt", + "eventArchived": "Evenement succesvol gearchiveerd", + "settingsSaved": "Instellingen succesvol opgeslagen", + "themeUpdated": "Thema succesvol bijgewerkt", + "brandingUpdated": "Huisstijl succesvol bijgewerkt", + "categoryAdded": "Categorie succesvol toegevoegd", + "categoryDeleted": "Categorie succesvol verwijderd", + "categoryUpdated": "Categorie succesvol bijgewerkt", + "emailConfigSaved": "E-mailconfiguratie succesvol opgeslagen", + "testEmailSent": "Test-e-mail succesvol verzonden", + "pageUpdated": "Pagina succesvol bijgewerkt", + "archiveRestored": "Archief succesvol hersteld", + "archiveDeleted": "Archief permanent verwijderd" + }, + "email": { + "title": "E-mailconfiguratie", + "subtitle": "Configureer e-mailinstellingen voor meldingen", + "loadingSettings": "E-mailinstellingen laden...", + "smtpConfiguration": "SMTP-configuratie", + "smtpHost": "SMTP-host", + "smtpHostHelp": "Hostnaam van uw e-mailserver", + "smtpPort": "SMTP-poort", + "smtpPortHelp": "Meestal 587 voor TLS, 465 voor SSL, 25 voor onversleuteld", + "smtpSecure": "SSL/TLS gebruiken", + "smtpSecureHelp": "Inschakelen voor veilige e-mailverzending", + "smtpUsername": "SMTP-gebruikersnaam", + "smtpUsernameHelp": "Gebruikersnaam van uw e-mailaccount", + "smtpPassword": "SMTP-wachtwoord", + "smtpPasswordHelp": "Wachtwoord van uw e-mailaccount", + "fromDetails": "Afzendergegevens", + "fromEmail": "Afzender-e-mail", + "fromEmailHelp": "E-mailadres dat als afzender wordt weergegeven", + "fromName": "Afzendernaam", + "fromNameHelp": "Naam die als afzender wordt weergegeven", + "testConfiguration": "Configuratie testen", + "testEmail": "Test-e-mailadres", + "testEmailHelp": "Stuur een test-e-mail om de instellingen te verifiëren", + "sendTestEmail": "Test-e-mail verzenden", + "saveConfiguration": "Configuratie opslaan", + "emailTemplates": "E-mailsjablonen", + "templateVariables": "Beschikbare variabelen", + "previewTemplate": "Sjabloonvoorbeeld", + "smtpSettings": "SMTP-instellingen", + "testEmailSuccess": "Test-e-mail succesvol verzonden", + "saveSmtpSettings": "SMTP-instellingen opslaan", + "testEmailSection": "Test-e-mail", + "beforeTesting": "Voor het testen:", + "saveSmtpFirst": "Sla eerst uw SMTP-instellingen op", + "ensureFirewall": "Zorg ervoor dat uw firewall uitgaand SMTP-verkeer toestaat", + "gmailAppPassword": "Gebruik voor Gmail een app-specifiek wachtwoord", + "testEmailAddressLabel": "Test-e-mailadres", + "sendTestEmailButton": "Test-e-mail verzenden", + "commonSmtpSettings": "Veelgebruikte SMTP-instellingen:", + "editTemplate": "Sjabloon bewerken", + "templateName": "Sjabloonnaam", + "subjectLine": "Onderwerpregel", + "emailBody": "E-mailtekst", + "preview": "Voorbeeld", + "save": "Opslaan", + "saveChanges": "Wijzigingen opslaan", + "templates": "Sjablonen", + "variableHelp": "Gebruik deze variabelen in uw sjabloon. Ze worden vervangen door werkelijke waarden wanneer e-mails worden verzonden.", + "port": "Poort", + "security": "Beveiliging", + "username": "Gebruikersnaam", + "password": "Wachtwoord", + "enterPassword": "Voer wachtwoord in", + "required": "verplicht", + "ignoreSslErrors": "SSL/TLS-certificaatfouten negeren", + "ignoreSslWarning": "Waarschuwing: Het uitschakelen van certificaatverificatie maakt de verbinding kwetsbaar voor man-in-the-middle-aanvallen. Schakel dit alleen in als u de SMTP-server vertrouwt en de beveiligingsimplicaties begrijpt.", + "brandingTitle": "E-mail huisstijl", + "brandingDescription": "Pas de kleuren aan die in e-mailsjablonen worden gebruikt. Wijzigingen zijn van toepassing op de headerbalk, knoppen, links en voettekstachtergrond.", + "primaryColor": "Primaire kleur", + "primaryColorHint": "Gebruikt voor header, knoppen en links", + "secondaryColor": "Voettekstachtergrond", + "secondaryColorHint": "Gebruikt voor de achtergrond van de voettekst", + "saveEmailColors": "E-mailkleuren opslaan", + "editor": { + "bold": "Vet", + "italic": "Cursief", + "bulletList": "Opsommingslijst", + "numberedList": "Genummerde lijst", + "blockquote": "Citaatblok", + "link": "Link toevoegen", + "horizontalRule": "Horizontale lijn", + "alignLeft": "Links uitlijnen", + "alignCenter": "Centreren", + "alignRight": "Rechts uitlijnen", + "clearFormatting": "Opmaak wissen", + "undo": "Ongedaan maken", + "redo": "Opnieuw", + "insertVariable": "Variabele invoegen", + "sourceMode": "Bron", + "visualMode": "Visueel", + "enterUrl": "Voer URL in...", + "addLink": "Toevoegen", + "cancel": "Annuleren" + } + }, + "cms": { + "title": "CMS-pagina's", + "subtitle": "Beheer juridische en informatieve pagina's", + "loadingPages": "Pagina's laden...", + "pages": "Pagina's", + "previewLinks": "Voorbeeldlinks", + "englishVersion": "Engelse versie", + "germanVersion": "Duitse versie", + "editPage": "{{page}} bewerken", + "pageTitle": "Paginatitel", + "pageContent": "Pagina-inhoud", + "pageTitlePlaceholder": "Voer paginatitel in...", + "saveChanges": "Wijzigingen opslaan", + "lastUpdated": "Laatst bijgewerkt:", + "impressum": "Colofon", + "datenschutz": "Privacybeleid", + "pageUpdated": "Pagina succesvol bijgewerkt" + }, + "eventTypes": { + "title": "Evenementtypes", + "subtitle": "Pas evenementtypes en hun standaardthema's aan", + "loading": "Evenementtypes laden...", + "loadError": "Kan evenementtypes niet laden", + "createNew": "Nieuw evenementtype", + "edit": "Evenementtype bewerken", + "created": "Evenementtype succesvol aangemaakt", + "updated": "Evenementtype succesvol bijgewerkt", + "deleted": "Evenementtype succesvol verwijderd", + "createError": "Kan evenementtype niet aanmaken", + "updateError": "Kan evenementtype niet bijwerken", + "deleteError": "Kan evenementtype niet verwijderen", + "searchPlaceholder": "Evenementtypes zoeken...", + "showInactive": "Inactieve tonen", + "noResults": "Geen evenementtypes gevonden", + "empty": "Nog geen evenementtypes", + "system": "Systeem", + "table": { + "type": "Type", + "slugPrefix": "URL-voorvoegsel", + "theme": "Standaardthema", + "status": "Status", + "actions": "Acties" + }, + "form": { + "name": "Weergavenaam", + "namePlaceholder": "bijv. Familieshoot", + "slugPrefix": "URL-voorvoegsel", + "slugPrefixPlaceholder": "bijv. familie", + "slugPreview": "Voorbeeld-URL:", + "emoji": "Icoon", + "themePreset": "Standaardthema", + "isActive": "Actief (zichtbaar bij het aanmaken van evenementen)" + }, + "validation": { + "slugFormat": "Alleen letters, cijfers en koppeltekens toegestaan" + }, + "slugInfo": { + "title": "URL-voorvoegselinfo:", + "description": "Het URL-voorvoegsel wordt gebruikt om galerij-URL's te genereren. Bijvoorbeeld, een evenementtype met voorvoegsel \"familie\" maakt URL's zoals: familie-jansen-familie-2025-01-22" + }, + "deleteConfirm": { + "title": "Evenementtype verwijderen", + "message": "Weet u zeker dat u wilt verwijderen", + "warning": "Deze actie kan niet ongedaan worden gemaakt. Zorg ervoor dat geen evenementen dit type gebruiken." + } + }, + "backup": { + "external": { + "warning": { + "title": "Externe media uitgesloten", + "body": "Deze installatie verwijst naar foto's vanuit /external-media. Deze originelen zijn uitgesloten van back-ups. Miniaturen en database worden wel geback-upt." + } + }, + "title": "Back-upbeheer", + "subtitle": "Beheer systeemback-ups, configureer geautomatiseerde back-ups en herstel vanuit eerdere back-ups.", + "tabs": { + "dashboard": "Dashboard", + "configuration": "Configuratie", + "history": "Back-upgeschiedenis", + "restore": "Herstellen" + }, + "status": { + "inProgress": "Back-up wordt uitgevoerd...", + "lastBackup": "Laatste back-up", + "noBackups": "Geen back-ups gevonden", + "nextBackup": "Volgende back-up", + "notScheduled": "Niet gepland", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld" + }, + "actions": { + "runBackupNow": "Nu back-up maken", + "starting": "Starten...", + "running": "Bezig...", + "testConnection": "Verbinding testen", + "save": "Configuratie opslaan", + "delete": "Verwijderen", + "view": "Details bekijken", + "download": "Downloaden", + "refresh": "Vernieuwen" + }, + "dashboard": { + "backupHealth": "Back-upstatus", + "healthStatus": { + "excellent": "Uitstekend", + "good": "Goed", + "warning": "Waarschuwing", + "critical": "Kritiek" + }, + "health": { + "title": "Back-upstatus" + }, + "healthMessages": { + "noBackups": "Geen back-ups gevonden", + "lastBackupFailed": "Laatste back-up mislukt", + "upToDate": "Back-up is actueel", + "recent": "Back-up is recent", + "gettingOld": "Back-up wordt oud", + "outdated": "Back-up is verouderd", + "failed": "Laatste back-up mislukt", + "old": "Back-up wordt oud" + }, + "stats": { + "totalBackups": "Totaal back-ups", + "backupSize": "Back-upgrootte", + "lastDuration": "Laatste duur", + "backupStatus": "Back-upstatus", + "last": "Laatste", + "files": "bestanden", + "minutes": "{{count}}m", + "active": "Actief", + "inactive": "Inactief", + "noBackupsYet": "Nog geen back-ups" + }, + "recentActivity": { + "title": "Recente back-upactiviteit" + }, + "notConfigured": { + "title": "Back-up niet geconfigureerd", + "message": "Configureer de back-upinstellingen op het tabblad Configuratie voordat u back-ups maakt." + }, + "actions": { + "runBackupNow": "Nu back-up maken", + "running": "Bezig..." + }, + "coverage": { + "title": "Back-updekking", + "database": "Database", + "photos": "Foto's", + "archives": "Archieven", + "systemFiles": "Systeembestanden", + "included": "Inbegrepen", + "excluded": "Uitgesloten", + "optional": "Optioneel" + }, + "storageDestination": "Opslagbestemming", + "nextScheduledBackup": "Volgende geplande back-up", + "backupType": "{{type}} back-up", + "noDestinationSet": "Geen bestemming ingesteld" + }, + "configuration": { + "enableBackup": "Geautomatiseerde back-ups inschakelen", + "enableBackupHelp": "Maak automatisch back-ups volgens het geconfigureerde schema", + "destinationType": "Back-upbestemming", + "destinationTypes": { + "local": { + "name": "Lokale opslag", + "description": "Sla back-ups op het lokale serverbestandssysteem op" + }, + "rsync": { + "name": "Externe server (Rsync)", + "description": "Synchroniseer back-ups naar een externe server via SSH/Rsync" + }, + "s3": { + "name": "S3-compatibele opslag", + "description": "Sla back-ups op in Amazon S3 of compatibele objectopslag" + } + }, + "fields": { + "destinationPath": "Bestemmingspad", + "destinationPathHelp": "Lokaal mappad voor het opslaan van back-ups", + "destinationPathPlaceholder": "/pad/naar/back-up/map", + "rsyncHost": "Externe host", + "rsyncHostHelp": "SSH-hostnaam of IP-adres", + "rsyncHostPlaceholder": "backup.voorbeeld.nl", + "rsyncUser": "SSH-gebruiker", + "rsyncUserHelp": "Gebruikersnaam voor SSH-verbinding", + "rsyncUserPlaceholder": "backup-gebruiker", + "rsyncPath": "Extern pad", + "rsyncPathHelp": "Mappad op externe server", + "rsyncPathPlaceholder": "/home/backup/photo-sharing", + "rsyncSshKey": "SSH-prive-sleutel", + "rsyncSshKeyHelp": "SSH-prive-sleutel voor authenticatie (optioneel)", + "rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----", + "s3Endpoint": "S3-eindpunt", + "s3EndpointHelp": "S3 API-eindpunt (bijv. s3.amazonaws.com)", + "s3EndpointPlaceholder": "https://s3.amazonaws.com", + "s3Bucket": "Bucketnaam", + "s3BucketHelp": "S3-bucket voor het opslaan van back-ups", + "s3BucketPlaceholder": "mijn-backup-bucket", + "s3AccessKey": "Toegangssleutel-ID", + "s3AccessKeyHelp": "AWS/S3 toegangssleutel-ID", + "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE", + "s3SecretKey": "Geheime toegangssleutel", + "s3SecretKeyHelp": "AWS/S3 geheime toegangssleutel", + "s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3Region": "Regio", + "s3RegionHelp": "S3-regio (bijv. us-east-1)", + "s3RegionPlaceholder": "us-east-1" + }, + "schedule": { + "title": "Back-upschema", + "scheduleType": "Schematype", + "scheduleOptions": { + "hourly": "Elk uur", + "daily": "Dagelijks", + "weekly": "Wekelijks", + "custom": "Aangepaste cron-expressie" + }, + "options": { + "hourly": "Elk uur", + "daily": "Dagelijks", + "weekly": "Wekelijks", + "custom": "Aangepaste cron-expressie" + }, + "customCron": "Cron-expressie", + "customCronHelp": "Voer een geldige cron-expressie in (bijv. 0 3 * * *)", + "retention": "Bewaarperiode", + "retentionDays": "Back-ups bewaren voor", + "retentionHelp": "dagen (oudere back-ups worden automatisch verwijderd)" + }, + "whatToBackup": { + "title": "Wat back-uppen", + "database": "Database", + "databaseHelp": "Alle evenementgegevens, instellingen en configuraties", + "photos": "Foto's", + "photosHelp": "Alle geuploade foto's in actieve galerijen", + "archives": "Archieven", + "archivesHelp": "Gearchiveerde evenement-ZIP-bestanden", + "thumbnails": "Miniaturen", + "thumbnailsHelp": "Gegenereerde miniatuurafbeeldingen (kunnen opnieuw worden aangemaakt)", + "tempFiles": "Tijdelijke bestanden", + "tempFilesHelp": "Tijdelijke upload- en verwerkingsbestanden" + }, + "advancedOptions": { + "title": "Geavanceerde opties", + "compression": "Compressie inschakelen", + "compressionHelp": "Comprimeer back-upbestanden om opslagruimte te besparen", + "encryption": "Versleuteling inschakelen", + "encryptionHelp": "Versleutel back-ups voor extra beveiliging", + "encryptionPassphrase": "Versleutelingswachtwoord", + "encryptionPassphraseHelp": "Sterk wachtwoord voor back-upversleuteling", + "confirmPassphrase": "Bevestig wachtwoord", + "passphrasesDontMatch": "Wachtwoorden komen niet overeen" + }, + "validation": { + "requiredFields": "Vul alle verplichte velden in", + "invalidCron": "Ongeldige cron-expressie", + "connectionTestFailed": "Verbindingstest mislukt", + "connectionTestSuccess": "Verbindingstest geslaagd!" + }, + "messages": { + "requiredFields": "Vul alle verplichte velden in", + "connectionSuccess": "Verbindingstest geslaagd!", + "connectionFailed": "Verbindingstest mislukt" + }, + "testingConnection": "Verbinding testen...", + "saveSettings": "Configuratie opslaan", + "savingSettings": "Opslaan..." + }, + "history": { + "searchPlaceholder": "Back-ups zoeken...", + "allStatus": "Alle statussen", + "status": { + "completed": "Voltooid", + "failed": "Mislukt", + "running": "Bezig", + "partial": "Gedeeltelijk" + }, + "deleteConfirm": "Weet u zeker dat u deze back-up van {{date}} wilt verwijderen?", + "noBackups": "Geen back-ups gevonden", + "tableHeaders": { + "date": "Datum", + "type": "Type", + "status": "Status", + "size": "Grootte", + "duration": "Duur", + "actions": "Acties" + }, + "columns": { + "status": "Status", + "dateTime": "Datum & Tijd", + "type": "Type", + "size": "Grootte", + "duration": "Duur", + "actions": "Acties" + }, + "details": "Details", + "statistics": "Statistieken", + "errors": "Fouten", + "backupDetails": { + "backupId": "Back-up-ID", + "startTime": "Starttijd", + "endTime": "Eindtijd", + "destination": "Bestemming", + "filesProcessed": "Verwerkte bestanden", + "totalSize": "Totale grootte", + "compressionRatio": "Compressieverhouding", + "errorLog": "Foutenlog", + "noErrors": "Geen fouten opgetreden" + }, + "pagination": { + "showing": "{{from}}-{{to}} van {{total}} back-ups weergegeven", + "previous": "Vorige", + "next": "Volgende" + }, + "filter": { + "allStatus": "Alle statussen", + "completed": "Voltooid", + "failed": "Mislukt", + "running": "Bezig", + "partial": "Gedeeltelijk" + }, + "noBackupsFound": "Geen back-ups gevonden", + "backupsWillAppear": "Back-ups verschijnen hier zodra ze zijn aangemaakt", + "messages": { + "deleteSuccess": "Back-up succesvol verwijderd" + }, + "details": { + "backupDetails": "Back-updetails", + "destination": "Bestemming", + "started": "Gestart", + "completed": "Voltooid", + "contentBackedUp": "Geback-upte inhoud", + "errorDetails": "Foutdetails", + "manifest": "Manifest" + } + }, + "restore": { + "steps": { + "selectSource": "Bron selecteren", + "chooseBackup": "Back-up kiezen", + "restoreOptions": "Herstelopties", + "reviewConfirm": "Controleren & Bevestigen", + "progress": "Herstelvoortgang" + }, + "source": { + "title": "Back-upbron selecteren", + "subtitle": "Kies van waaruit u de back-up wilt herstellen", + "local": { + "name": "Lokale back-up", + "description": "Herstellen vanuit het lokale bestandssysteem" + }, + "s3": { + "name": "S3-opslag", + "description": "Herstellen vanuit S3-bucket" + }, + "upload": { + "name": "Back-up uploaden", + "description": "Een back-upbestand uploaden", + "comingSoon": "Uploadfunctionaliteit binnenkort beschikbaar" + }, + "configuration": { + "s3": "S3-configuratie", + "endpoint": "S3-eindpunt-URL", + "bucket": "Bucketnaam", + "accessKey": "Toegangssleutel-ID", + "secretKey": "Geheime toegangssleutel" + } + }, + "backup": { + "title": "Back-up kiezen om te herstellen", + "subtitle": "Selecteer uit beschikbare back-ups", + "noBackupsFound": "Geen back-ups gevonden in geselecteerde bron", + "encrypted": "Versleutelde back-up", + "encryptedMessage": "U moet het versleutelingswachtwoord opgeven om deze back-up te herstellen.", + "enterPassphrase": "Voer versleutelingswachtwoord in", + "at": "om" + }, + "restoreTypes": { + "full": { + "name": "Volledig herstel", + "description": "Alles herstellen inclusief database, foto's en archieven", + "warning": "Dit vervangt alle huidige gegevens" + }, + "database": { + "name": "Alleen database", + "description": "Alleen de database herstellen (instellingen, evenementen, gebruikers)", + "warning": "Huidige database wordt vervangen" + }, + "files": { + "name": "Alleen bestanden", + "description": "Alleen foto's en archieven herstellen", + "warning": "Bestaande bestanden kunnen worden overschreven" + }, + "selective": { + "name": "Selectief herstel", + "description": "Kies specifieke onderdelen om te herstellen", + "warning": "Alleen geselecteerde onderdelen worden hersteld" + } + }, + "options": { + "title": "Herstelopties", + "subtitle": "Kies wat u wilt herstellen", + "additionalOptions": { + "title": "Extra opties", + "skipPreBackup": "Pre-herstel back-up overslaan", + "skipPreBackupHelp": "Standaard wordt een back-up gemaakt voor het herstellen. Vink dit aan om over te slaan.", + "force": "Geforceerd herstellen", + "forceHelp": "Veiligheidscontroles en waarschuwingen negeren (voorzichtig gebruiken)" + } + }, + "confirmation": { + "title": "Controleren & Bevestigen", + "subtitle": "Controleer uw herstelconfiguratie", + "validation": { + "passed": "Validatie geslaagd", + "failed": "Validatie mislukt", + "checking": "Herstelconfiguratie valideren..." + }, + "spaceCheck": { + "title": "Opslagruimte", + "required": "Vereist", + "available": "Beschikbaar", + "insufficient": "Onvoldoende opslagruimte" + }, + "summary": { + "title": "Herstelsamenvatting", + "source": "Bron", + "backupDate": "Back-updatum", + "restoreType": "Hersteltype", + "preBackup": "Pre-back-up", + "enabled": "Ingeschakeld", + "skipped": "Overgeslagen" + }, + "warning": { + "title": "Belangrijke mededeling", + "message": "Deze herstelbewerking vervangt bestaande gegevens. Zorg ervoor dat u een actuele back-up heeft voordat u doorgaat. Deze actie kan niet ongedaan worden gemaakt." + } + }, + "progress": { + "title": "Herstelvoortgang", + "inProgress": "Herstel wordt uitgevoerd...", + "completed": "Herstel voltooid", + "overallProgress": "Totale voortgang", + "current": "Huidig", + "statusDetails": "Statusdetails", + "restoreLogs": "Hersteltlogs", + "steps": { + "completed": "Voltooid", + "running": "Bezig", + "failed": "Mislukt", + "pending": "In afwachting" + }, + "success": { + "title": "Herstel succesvol voltooid", + "message": "Uw gegevens zijn hersteld. Controleer of alles correct werkt." + } + }, + "actions": { + "back": "Terug", + "next": "Volgende", + "startRestore": "Herstel starten", + "starting": "Starten...", + "validating": "Valideren...", + "startNewRestore": "Nieuw herstel starten" + }, + "messages": { + "restoreStarted": "Herstel succesvol gestart" + } + }, + "messages": { + "backupStarted": "Back-up succesvol gestart", + "backupFailed": "Kan back-up niet starten", + "configUpdated": "Back-upconfiguratie bijgewerkt", + "configUpdateFailed": "Kan configuratie niet bijwerken", + "backupDeleted": "Back-up succesvol verwijderd", + "deleteFailed": "Kan back-up niet verwijderen", + "testEmailSent": "Verbindingstest geslaagd!", + "testEmailFailed": "Verbindingstest mislukt" + } + }, + "cssTemplates": { + "title": "Aangepaste CSS-sjablonen", + "template": "Sjabloon", + "templateName": "Sjabloonnaam", + "enableTemplate": "Dit sjabloon inschakelen", + "enableHint": "Ingeschakelde sjablonen kunnen worden geselecteerd bij het aanmaken van evenementen", + "cssContent": "CSS-inhoud", + "cssHint": "Gebruik .gallery-page om stijlen te beperken tot de galerij. Beschikbare variabelen: --gallery-bg, --gallery-text, --gallery-accent", + "securityNotice": "Beveiligingsmelding", + "securityText": "CSS wordt opgeschoond om kwaadaardige code te voorkomen. Externe URL's, @import en JavaScript-expressies worden geblokkeerd.", + "resetToDefault": "Standaardwaarden herstellen", + "resetConfirm": "Dit sjabloon herstellen naar standaard? Uw wijzigingen gaan verloren.", + "unsavedChanges": "Niet-opgeslagen wijzigingen", + "saveTemplate": "Sjabloon opslaan", + "lastUpdated": "Laatst bijgewerkt", + "saved": "Sjabloon succesvol opgeslagen", + "saveFailed": "Kan sjabloon niet opslaan", + "sanitizationWarning": "Sommige CSS-patronen zijn geblokkeerd vanwege beveiliging", + "reset": "Sjabloon hersteld naar standaard", + "resetFailed": "Kan sjabloon niet herstellen" + }, + "maintenance": { + "title": "Systeemonderhoud", + "message": "We voeren momenteel gepland onderhoud uit om onze service te verbeteren. We zijn binnenkort weer online.", + "expectedCompletion": "Verwachte voltooiingstijd:", + "checkBackLater": "Probeer het later opnieuw", + "urgentMatters": "Voor dringende zaken, neem contact op met" + }, + "passwordChange": { + "title": "Wachtwoord wijzigen", + "currentPassword": "Huidig wachtwoord", + "newPassword": "Nieuw wachtwoord", + "confirmPassword": "Bevestig nieuw wachtwoord", + "currentPasswordPlaceholder": "Voer huidig wachtwoord in", + "newPasswordPlaceholder": "Voer nieuw wachtwoord in", + "confirmPasswordPlaceholder": "Bevestig nieuw wachtwoord", + "requirements": "Wachtwoordvereisten:", + "minLength": "Minimaal 6 tekens lang", + "mustDiffer": "Moet verschillen van huidig wachtwoord", + "success": "Wachtwoord succesvol gewijzigd", + "failed": "Kan wachtwoord niet wijzigen", + "currentRequired": "Huidig wachtwoord is verplicht", + "newRequired": "Nieuw wachtwoord is verplicht", + "minLengthError": "Wachtwoord moet minimaal 6 tekens bevatten", + "confirmRequired": "Bevestig uw nieuwe wachtwoord", + "noMatch": "Wachtwoorden komen niet overeen", + "mustBeDifferent": "Nieuw wachtwoord moet verschillen van huidig wachtwoord", + "cancel": "Annuleren" + }, + "mandatoryPasswordChange": { + "title": "Wachtwoordwijziging vereist", + "description": "Om veiligheidsredenen moet u uw wachtwoord wijzigen voordat u toegang krijgt tot het beheerpaneel.", + "success": "Wachtwoord succesvol gewijzigd! U heeft nu toegang tot het beheerpaneel.", + "minLength": "Minimaal 12 tekens lang", + "mustContainUpperLower": "Moet hoofd- en kleine letters bevatten", + "mustContainNumbers": "Moet cijfers bevatten", + "mustContainSpecial": "Moet speciale tekens bevatten (!@#$%^&*)", + "minLengthError": "Wachtwoord moet minimaal 12 tekens bevatten", + "mustContainLowercase": "Wachtwoord moet kleine letters bevatten", + "mustContainUppercase": "Wachtwoord moet hoofdletters bevatten", + "mustContainNumbersError": "Wachtwoord moet cijfers bevatten", + "mustContainSpecialError": "Wachtwoord moet speciale tekens bevatten" + }, + "offline": { + "backOnline": "Weer online", + "noConnection": "Geen internetverbinding" + }, + "download": { + "downloading": "Downloaden...", + "percentComplete": "% voltooid" + }, + "passwordGenerator": { + "weak": "Zwak", + "fair": "Redelijk", + "good": "Goed", + "strong": "Sterk", + "generating": "Genereren...", + "generatePassword": "Wachtwoord genereren", + "showSuggestions": "Wachtwoordsuggesties tonen", + "moreOptions": "Meer opties", + "suggestions": "Wachtwoordsuggesties", + "characters": "tekens", + "copyPassword": "Wachtwoord kopieren", + "use": "Gebruiken", + "pattern": "Patroon:", + "patternDescription": "Wachtwoorden worden gegenereerd met uw evenementnaam en datum. Voorbeeld: \"Locatie2024$Augustus\" voor betere beveiliging en herkenbaarheid." + }, + "feedback": { + "comments": "Opmerkingen", + "addComment": "Opmerking toevoegen", + "yourName": "Uw naam", + "yourEmail": "Uw e-mail", + "writeComment": "Schrijf een opmerking...", + "submit": "Verzenden", + "commentSubmitted": "Opmerking ingediend", + "commentError": "Kan opmerking niet indienen", + "rateLimited": "Wacht even voordat u opnieuw reageert", + "commentRequired": "Opmerking is verplicht", + "nameRequired": "Naam is verplicht", + "emailRequired": "E-mail is verplicht", + "anonymous": "Anoniem", + "pendingApproval": "In afwachting van goedkeuring", + "noComments": "Nog geen opmerkingen. Wees de eerste om een opmerking te plaatsen!", + "rating": "Beoordeling", + "ratePhoto": "Beoordeel deze foto", + "yourRating": "Uw beoordeling", + "averageRating": "Gemiddelde beoordeling", + "totalRatings": "beoordelingen", + "likes": "Likes", + "favorites": "Favorieten", + "likePhoto": "Like deze foto", + "favoritePhoto": "Toevoegen aan favorieten", + "photoFeedback": "Fotofeedback", + "hasFeedback": "Heeft feedback", + "hasComments": "Heeft opmerkingen", + "hasRating": "Heeft beoordeling", + "settings": { + "title": "Gastfeedbackinstellingen", + "enableFeedback": "Feedback inschakelen", + "feedbackTypes": "Feedbacktypen", + "ratings": "Sterbeoordelingen", + "ratingsDesc": "Gasten toestaan foto's te beoordelen (1-5 sterren)", + "likes": "Likes", + "likesDesc": "Eenvoudige like/unlike functionaliteit", + "comments": "Opmerkingen", + "commentsDesc": "Tekstopmerkingen bij foto's", + "favorites": "Favorieten", + "favoritesDesc": "Foto's als favoriet markeren" + } + }, + "filter": { + "feedbackFilters": "Feedbackfilters", + "clear": "Wissen", + "rating": "Beoordeling", + "allPhotos": "Alle foto's", + "anyRating": "Elke beoordeling", + "oneStarPlus": "1+ sterren", + "twoStarsPlus": "2+ sterren", + "threeStarsPlus": "3+ sterren", + "fourStarsPlus": "4+ sterren", + "fiveStarsOnly": "Alleen 5 sterren", + "hasLikes": "Heeft likes", + "hasFavorites": "Heeft favorieten", + "hasComments": "Heeft opmerkingen", + "showingPhotos": "Totaal foto's", + "withRatings": "Met beoordelingen" + }, + "export": { + "button": "Exporteren", + "success": "Export succesvol gedownload", + "error": "Export mislukt: ", + "exportSelected": "{{count}} geselecteerde exporteren", + "exportFiltered": "Gefilterde foto's exporteren", + "hint": "Selecteer foto's of pas filters toe om te exporteren" + }, + "adminLogin": { + "title": "Beheerder login", + "subtitle": "Log in om uw fotogalerijen te beheren", + "sessionExpired": "Uw sessie is verlopen. Log opnieuw in.", + "emailLabel": "E-mailadres", + "emailPlaceholder": "admin@voorbeeld.nl", + "emailRequired": "E-mail is verplicht", + "invalidEmail": "Ongeldig e-mailformaat", + "passwordLabel": "Wachtwoord", + "passwordPlaceholder": "Voer uw wachtwoord in", + "passwordRequired": "Wachtwoord is verplicht", + "passwordMinLength": "Wachtwoord moet minimaal 6 tekens bevatten", + "rememberMe": "Onthoud mij", + "forgotPassword": "Wachtwoord vergeten?", + "signIn": "Inloggen", + "loginSuccess": "Succesvol ingelogd!", + "networkError": "Netwerkfout. Controleer uw verbinding en probeer het opnieuw.", + "tooManyAttempts": "Te veel inlogpogingen. Probeer het later opnieuw.", + "invalidCredentials": "Ongeldige e-mail of wachtwoord", + "generalError": "Er is een fout opgetreden. Probeer het opnieuw.", + "needHelp": "Hulp nodig? Neem contact op met", + "poweredBy": "Powered by PicPeak", + "devModeHint": "Ontwikkelmodus: Gebruik e-mail: admin@example.com, wachtwoord: admin123" + }, + "clientAccess": { + "title": "Klanttoegang", + "description": "Bekijk foto's en beheer zichtbaarheid voordat de galerij wordt gedeeld met gasten.", + "pinLabel": "Klant-PIN", + "pinPlaceholder": "Voer uw klant-PIN in", + "enterPin": "Voer uw klant-PIN in", + "invalidPin": "Ongeldige PIN. Probeer het opnieuw.", + "loginFailed": "Authenticatie mislukt. Probeer het opnieuw.", + "loginButton": "Galerij openen", + "guestHint": "Op zoek naar de gastgalerij?", + "guestLink": "Ga naar gastweergave", + "banner": "Klantmodus", + "visibleCount": "{{visible}} van {{total}} foto's zichtbaar voor gasten", + "hideSelected": "Geselecteerde verbergen", + "showSelected": "Geselecteerde tonen", + "adminTitle": "Klanttoegang", + "enableToggle": "Klanttoegang inschakelen", + "enableDescription": "Sta klanten toe foto's te beoordelen en te verbergen voordat de galerij wordt gedeeld met gasten.", + "pinHelperText": "De klant gebruikt deze PIN om de beoordelingspagina te openen.", + "pinUpdated": "Klant-PIN bijgewerkt", + "setPin": "PIN instellen", + "linkLabel": "Klanttoegangslink", + "regenerateToken": "Link opnieuw genereren", + "tokenRegenerated": "Klanttoegangslink opnieuw gegenereerd" + } +} diff --git a/frontend/src/i18n/locales/pt.json b/frontend/src/i18n/locales/pt.json index 982e20db..3c9b9b21 100644 --- a/frontend/src/i18n/locales/pt.json +++ b/frontend/src/i18n/locales/pt.json @@ -303,7 +303,9 @@ "writeLovelyNote": "Escreva uma mensagem carinhosa...", "postComment": "Publicar Comentário", "anonymous": "Anônimo" - } + }, + "rated": "Avaliado", + "commented": "Comentado" }, "categories": { "title": "Categorias de Fotos", @@ -600,7 +602,24 @@ "failed": "Falha ao renomear", "filesRenamed": "{{count}} arquivos atualizados", "confirm": "Renomear Evento" - } + }, + "activeFilter": "Ativos", + "archivedFilter": "Arquivados", + "sortByName": "Por nome", + "sortByDate": "Por data", + "sortByExpiration": "Por expiração", + "photosCount": "Fotos", + "moreActions": "Mais ações", + "copyLinkTooltip": "Copiar link", + "viewGalleryTooltip": "Ver galeria", + "uploadPhotosTooltip": "Enviar fotos", + "editTooltip": "Editar", + "archiveTooltip": "Arquivar", + "noEvents": "Nenhum evento encontrado", + "noEventsDescription": "Crie seu primeiro evento para começar.", + "bulkArchive": "Arquivar", + "confirmBulkArchive": "Tem certeza de que deseja arquivar {{count}} evento(s)?", + "confirmBulkArchiveDescription": "Esta ação não pode ser desfeita. Eventos arquivados não serão mais acessíveis publicamente." }, "settings": { "title": "Configurações do Sistema", @@ -1799,7 +1818,9 @@ "upToDate": "Backup está atualizado", "recent": "Backup é recente", "gettingOld": "Backup está ficando antigo", - "outdated": "Backup está desatualizado" + "outdated": "Backup está desatualizado", + "failed": "Último backup falhou", + "old": "Backup está ficando antigo" }, "stats": { "totalBackups": "Total de Backups", @@ -2303,7 +2324,9 @@ "fiveStarsOnly": "Apenas 5 Estrelas", "hasLikes": "Tem curtidas", "hasFavorites": "Tem favoritos", - "hasComments": "Tem comentários" + "hasComments": "Tem comentários", + "showingPhotos": "Total de fotos", + "withRatings": "Com avaliações" }, "adminLogin": { "title": "Login de Administrador", @@ -2353,5 +2376,13 @@ "linkLabel": "Link de Acesso do Cliente", "regenerateToken": "Regenerar link", "tokenRegenerated": "Link de acesso do cliente regenerado" + }, + "export": { + "button": "Exportar", + "success": "Exportação baixada com sucesso", + "error": "Falha na exportação: ", + "exportSelected": "Exportar {{count}} selecionados", + "exportFiltered": "Exportar fotos filtradas", + "hint": "Selecione fotos ou aplique filtros para exportar" } } diff --git a/frontend/src/i18n/locales/ru.json b/frontend/src/i18n/locales/ru.json index 00c139b5..2d252858 100644 --- a/frontend/src/i18n/locales/ru.json +++ b/frontend/src/i18n/locales/ru.json @@ -303,7 +303,9 @@ "writeLovelyNote": "Напишите тёплые слова...", "postComment": "Оставить комментарий", "anonymous": "Аноним" - } + }, + "rated": "Оценено", + "commented": "Прокомментировано" }, "categories": { "title": "Категории фото", @@ -600,7 +602,24 @@ "failed": "Ошибка переименования", "filesRenamed": "Обновлено {{count}} файлов", "confirm": "Переименовать событие" - } + }, + "activeFilter": "Активные", + "archivedFilter": "Архивированные", + "sortByName": "По имени", + "sortByDate": "По дате", + "sortByExpiration": "По сроку", + "photosCount": "Фото", + "moreActions": "Ещё", + "copyLinkTooltip": "Копировать ссылку", + "viewGalleryTooltip": "Просмотр галереи", + "uploadPhotosTooltip": "Загрузить фото", + "editTooltip": "Редактировать", + "archiveTooltip": "Архивировать", + "noEvents": "События не найдены", + "noEventsDescription": "Создайте своё первое событие, чтобы начать.", + "bulkArchive": "Архивировать", + "confirmBulkArchive": "Вы уверены, что хотите архивировать {{count}} событие(й)?", + "confirmBulkArchiveDescription": "Это действие нельзя отменить. Архивированные события больше не будут доступны публично." }, "settings": { "title": "Системные настройки", @@ -1799,7 +1818,9 @@ "upToDate": "Резервная копия актуальна", "recent": "Резервная копия свежая", "gettingOld": "Резервная копия устаревает", - "outdated": "Резервная копия устарела" + "outdated": "Резервная копия устарела", + "failed": "Последнее резервное копирование не удалось", + "old": "Резервная копия устаревает" }, "stats": { "totalBackups": "Всего копий", @@ -2303,7 +2324,9 @@ "fiveStarsOnly": "Только 5 звёзд", "hasLikes": "Есть лайки", "hasFavorites": "Есть в избранном", - "hasComments": "Есть комментарии" + "hasComments": "Есть комментарии", + "showingPhotos": "Всего фото", + "withRatings": "С оценками" }, "adminLogin": { "title": "Вход для администратора", @@ -2353,5 +2376,13 @@ "linkLabel": "Ссылка для клиента", "regenerateToken": "Сгенерировать новую ссылку", "tokenRegenerated": "Ссылка для клиента обновлена" + }, + "export": { + "button": "Экспорт", + "success": "Экспорт успешно загружен", + "error": "Ошибка экспорта: ", + "exportSelected": "Экспортировать {{count}} выбранных", + "exportFiltered": "Экспортировать отфильтрованные фото", + "hint": "Выберите фото или примените фильтры для экспорта" } -} \ No newline at end of file +}