From 9d004a17db87cc7ec737dd21fbed17aee9cdb360 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Thu, 26 Jun 2025 10:13:02 -0400 Subject: [PATCH] Enhance backup and restore functionality with improved localization and error handling --- .../adventures/views/import_export_view.py | 2 +- frontend/src/locales/de.json | 17 ++++++- frontend/src/locales/en.json | 17 ++++++- frontend/src/locales/es.json | 17 ++++++- frontend/src/locales/fr.json | 17 ++++++- frontend/src/locales/it.json | 17 ++++++- frontend/src/locales/ko.json | 17 ++++++- frontend/src/locales/nl.json | 17 ++++++- frontend/src/locales/no.json | 17 ++++++- frontend/src/locales/pl.json | 17 ++++++- frontend/src/locales/ru.json | 17 ++++++- frontend/src/locales/sv.json | 17 ++++++- frontend/src/locales/zh.json | 17 ++++++- frontend/src/routes/settings/+page.svelte | 48 +++++++++---------- 14 files changed, 204 insertions(+), 50 deletions(-) diff --git a/backend/server/adventures/views/import_export_view.py b/backend/server/adventures/views/import_export_view.py index 7212bd9..2e88480 100644 --- a/backend/server/adventures/views/import_export_view.py +++ b/backend/server/adventures/views/import_export_view.py @@ -329,7 +329,7 @@ class BackupViewSet(viewsets.ViewSet): except json.JSONDecodeError: return Response({'error': 'Invalid JSON in backup file'}, status=status.HTTP_400_BAD_REQUEST) - except Exception as e: + except Exception: import logging logging.error("Import failed", exc_info=True) return Response({'error': 'An internal error occurred during import'}, diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index e9a0395..7d2ed84 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -523,7 +523,19 @@ "secure_your_account": "Sichern Sie Ihr Konto", "setup_required": "Setup erforderlich", "verify_setup": "Überprüfen Sie das Setup", - "whats_included": "Was ist enthalten" + "whats_included": "Was ist enthalten", + "backup_your_data": "Sichern Sie Ihre Daten", + "backup_your_data_desc": "Laden Sie eine vollständige Sicherung Ihrer Kontodaten, einschließlich Standorte, Sammlungen, Medien und Besuchen, herunter.", + "data_override_acknowledge": "Ich bestätige, dass dies alle meine vorhandenen Daten überschreibt", + "data_override_acknowledge_desc": "Diese Aktion ist irreversibel und ersetzt alle Standorte, Sammlungen und Besuche in Ihrem Konto.", + "data_override_warning": "Daten überschreiben Warnung", + "data_override_warning_desc": "Das Wiederherstellen von Daten ersetzt alle vorhandenen Daten (die in der Sicherung enthalten sind) in Ihrem Konto vollständig. \nDiese Aktion kann nicht rückgängig gemacht werden.", + "integrations_settings": "Integrationseinstellungen", + "media": "Medien", + "restore_data": "Daten wiederherstellen", + "restore_data_desc": "Laden Sie eine Sicherungsdatei hoch, um Ihre Daten wiederherzustellen.", + "select_backup_file": "Wählen Sie Sicherungsdatei", + "world_travel_visits": "Weltreisebesuche" }, "checklist": { "checklist_delete_error": "Fehler beim Löschen der Checkliste", @@ -748,5 +760,6 @@ "location": "Standort", "locations": "Standorte", "my_locations": "Meine Standorte" - } + }, + "settings_download_backup": "Backup herunterladen" } diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 770c192..0193113 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -523,7 +523,19 @@ "important": "Important", "error_occurred": "An error has occurred", "mfa_already_enabled": "MFA already enabled", - "complete_setup_to_enable": "Complete setup to enable MFA" + "complete_setup_to_enable": "Complete setup to enable MFA", + "world_travel_visits": "World Travel Visits", + "media": "Media", + "integrations_settings": "Integrations Settings", + "backup_your_data": "Backup Your Data", + "backup_your_data_desc": "Download a complete backup of your account data including locations, \t\t\t\t\t\t\t\t\t\tcollections, media, and visits.", + "restore_data": "Restore Data", + "restore_data_desc": "Upload a backup file to restore your data.", + "data_override_warning": "Data Override Warning", + "data_override_warning_desc": "Restoring data will completely replace all existing data (that is included \t\t\t\t\t\t\t\t\t\t\t\tin the backup) in your account. This action cannot be undone.", + "select_backup_file": "Select backup file", + "data_override_acknowledge": "I acknowledge that this will override all my existing data", + "data_override_acknowledge_desc": "This action is irreversible and will replace all locations, collections, \t\t\t\t\t\t\t\t\t\t\t\t\t\tand visits in your account." }, "collection": { "collection_created": "Collection created successfully!", @@ -748,5 +760,6 @@ "location": "Location", "locations": "Locations", "my_locations": "My Locations" - } + }, + "settings_download_backup": "Download Backup" } diff --git a/frontend/src/locales/es.json b/frontend/src/locales/es.json index 25b252a..d2ba774 100644 --- a/frontend/src/locales/es.json +++ b/frontend/src/locales/es.json @@ -523,7 +523,19 @@ "secure_your_account": "Asegure su cuenta", "setup_required": "Configuración requerida", "verify_setup": "Verificar la configuración", - "whats_included": "¿Qué está incluido?" + "whats_included": "¿Qué está incluido?", + "backup_your_data": "Haga una copia de seguridad de sus datos", + "backup_your_data_desc": "Descargue una copia de seguridad completa de los datos de su cuenta, incluidas ubicaciones, colecciones, medios y visitas.", + "data_override_acknowledge": "Reconozco que esto anulará todos mis datos existentes.", + "data_override_acknowledge_desc": "Esta acción es irreversible y reemplazará todas las ubicaciones, colecciones y visitas en su cuenta.", + "data_override_warning": "Advertencia de anulación de datos", + "data_override_warning_desc": "La restauración de datos reemplazará completamente todos los datos existentes (que se incluyen en la copia de seguridad) en su cuenta. \nEsta acción no se puede deshacer.", + "integrations_settings": "Configuración de integraciones", + "media": "Medios de comunicación", + "restore_data": "Restaurar datos", + "restore_data_desc": "Cargue un archivo de copia de seguridad para restaurar sus datos.", + "select_backup_file": "Seleccione el archivo de copia de seguridad", + "world_travel_visits": "Visitas de viajes mundiales" }, "checklist": { "checklist_delete_error": "Error al eliminar la lista de tareas", @@ -748,5 +760,6 @@ "location": "Ubicación", "locations": "Ubicación", "my_locations": "Mis ubicaciones" - } + }, + "settings_download_backup": "Descargar copia de seguridad" } diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index 8ea5ecb..cda8406 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -523,7 +523,19 @@ "secure_your_account": "Sécuriser votre compte", "setup_required": "Configuration requise", "verify_setup": "Vérifiez la configuration", - "whats_included": "Ce qui est inclus" + "whats_included": "Ce qui est inclus", + "backup_your_data": "Sauvegardez vos données", + "backup_your_data_desc": "Téléchargez une sauvegarde complète des données de votre compte, y compris les emplacements, les collections, les médias et les visites.", + "data_override_acknowledge": "Je reconnais que cela remplacera toutes mes données existantes", + "data_override_acknowledge_desc": "Cette action est irréversible et remplacera tous les emplacements, collections et visites dans votre compte.", + "data_override_warning": "Avertissement de remplacement des données", + "data_override_warning_desc": "La restauration des données remplacera complètement toutes les données existantes (incluses dans la sauvegarde) dans votre compte. \nCette action ne peut pas être annulée.", + "integrations_settings": "Paramètres des intégrations", + "media": "Médias", + "restore_data": "Restaurer les données", + "restore_data_desc": "Téléchargez un fichier de sauvegarde pour restaurer vos données.", + "select_backup_file": "Sélectionnez le fichier de sauvegarde", + "world_travel_visits": "Visites de voyage dans le monde" }, "checklist": { "checklist_delete_error": "Erreur lors de la suppression de la liste de contrôle", @@ -748,5 +760,6 @@ "location": "Emplacement", "locations": "Lieux", "my_locations": "Mes emplacements" - } + }, + "settings_download_backup": "Télécharger la sauvegarde" } diff --git a/frontend/src/locales/it.json b/frontend/src/locales/it.json index 2c62302..c294125 100644 --- a/frontend/src/locales/it.json +++ b/frontend/src/locales/it.json @@ -523,7 +523,19 @@ "secure_your_account": "Proteggere il tuo account", "setup_required": "Setup richiesto", "verify_setup": "Verifica la configurazione", - "whats_included": "Cosa è incluso" + "whats_included": "Cosa è incluso", + "backup_your_data": "Eseguire il backup dei tuoi dati", + "backup_your_data_desc": "Scarica un backup completo dei dati dell'account tra cui posizioni, raccolte, media e visite.", + "data_override_acknowledge": "Riconosco che questo sovrascriverà tutti i miei dati esistenti", + "data_override_acknowledge_desc": "Questa azione è irreversibile e sostituirà tutte le posizioni, le raccolte e le visite nel tuo account.", + "data_override_warning": "Avviso di sovraccarico dei dati", + "data_override_warning_desc": "Il ripristino dei dati sostituirà completamente tutti i dati esistenti (inclusi nel backup) nel tuo account. \nQuesta azione non può essere annullata.", + "integrations_settings": "Impostazioni integrazioni", + "media": "Media", + "restore_data": "Ripristina i dati", + "restore_data_desc": "Carica un file di backup per ripristinare i dati.", + "select_backup_file": "Seleziona il file di backup", + "world_travel_visits": "Visite di viaggio nel mondo" }, "checklist": { "checklist_delete_error": "Errore durante l'eliminazione della lista di controllo", @@ -748,5 +760,6 @@ "location": "Posizione", "locations": "Luoghi", "my_locations": "Le mie posizioni" - } + }, + "settings_download_backup": "Scarica il backup" } diff --git a/frontend/src/locales/ko.json b/frontend/src/locales/ko.json index 76136a5..6e818cc 100644 --- a/frontend/src/locales/ko.json +++ b/frontend/src/locales/ko.json @@ -615,7 +615,19 @@ "secure_your_account": "계정을 확보하십시오", "setup_required": "설정이 필요합니다", "verify_setup": "설정을 확인하십시오", - "whats_included": "포함 된 내용" + "whats_included": "포함 된 내용", + "backup_your_data": "데이터를 백업하십시오", + "backup_your_data_desc": "위치, 컬렉션, 미디어 및 방문을 포함하여 계정 데이터의 전체 백업을 다운로드하십시오.", + "data_override_acknowledge": "나는 이것이 나의 모든 기존 데이터를 무시할 것임을 인정합니다.", + "data_override_acknowledge_desc": "이 조치는 돌이킬 수 없으며 계정의 모든 위치, 컬렉션 및 방문을 대체합니다.", + "data_override_warning": "데이터를 우선적으로 경고합니다", + "data_override_warning_desc": "데이터 복원은 계정의 모든 기존 데이터 (백업에 포함 된)를 완전히 대체합니다. \n이 조치는 취소 할 수 없습니다.", + "integrations_settings": "통합 설정", + "media": "메디아", + "restore_data": "데이터를 복원하십시오", + "restore_data_desc": "백업 파일을 업로드하여 데이터를 복원하십시오.", + "select_backup_file": "백업 파일을 선택하십시오", + "world_travel_visits": "세계 여행 방문" }, "share": { "go_to_settings": "설정으로 이동", @@ -747,5 +759,6 @@ "location": "위치", "locations": "위치", "my_locations": "내 위치" - } + }, + "settings_download_backup": "백업을 다운로드하십시오" } diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index a086cf2..a04a27f 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -523,7 +523,19 @@ "mfa_required": "MFA vereist", "scan_qr_code": "Scan QR -code", "scan_with_authenticator_app": "Scan met authenticator -app", - "secure_your_account": "Beveilig uw account" + "secure_your_account": "Beveilig uw account", + "backup_your_data": "Back -up van uw gegevens", + "backup_your_data_desc": "Download een volledige back -up van uw accountgegevens, inclusief locaties, collecties, media en bezoeken.", + "data_override_acknowledge": "Ik erken dat dit al mijn bestaande gegevens zal overschrijven", + "data_override_acknowledge_desc": "Deze actie is onomkeerbaar en vervangt alle locaties, collecties en bezoeken in uw account.", + "data_override_warning": "Gegevensoverschrijdende waarschuwing", + "data_override_warning_desc": "Het herstellen van gegevens zal alle bestaande gegevens (die in de back -up zijn opgenomen) in uw account volledig vervangen. \nDeze actie kan niet ongedaan worden gemaakt.", + "integrations_settings": "Instellingen integraties", + "media": "Media", + "restore_data": "Herstel gegevens", + "restore_data_desc": "Upload een back -upbestand om uw gegevens te herstellen.", + "select_backup_file": "Selecteer back -upbestand", + "world_travel_visits": "Wereldreizen bezoeken" }, "checklist": { "checklist_delete_error": "Fout bij het verwijderen van de checklist", @@ -748,5 +760,6 @@ "location": "Locatie", "locations": "Locaties", "my_locations": "Mijn locaties" - } + }, + "settings_download_backup": "Download back -up" } diff --git a/frontend/src/locales/no.json b/frontend/src/locales/no.json index 79a0d5b..3e4d00f 100644 --- a/frontend/src/locales/no.json +++ b/frontend/src/locales/no.json @@ -523,7 +523,19 @@ "secure_your_account": "Sikre kontoen din", "setup_required": "Oppsett kreves", "verify_setup": "Bekreft oppsett", - "whats_included": "Hva som er inkludert" + "whats_included": "Hva som er inkludert", + "backup_your_data": "Sikkerhetskopiere dataene dine", + "backup_your_data_desc": "Last ned en komplett sikkerhetskopi av kontodataene dine, inkludert steder, samlinger, media og besøk.", + "data_override_acknowledge": "Jeg erkjenner at dette vil overstyre alle mine eksisterende data", + "data_override_acknowledge_desc": "Denne handlingen er irreversibel og vil erstatte alle steder, samlinger og besøk på kontoen din.", + "data_override_warning": "Data overstyrer advarsel", + "data_override_warning_desc": "Gjenoppretting av data vil erstatte alle eksisterende data fullstendig (som er inkludert i sikkerhetskopien) på kontoen din. \nDenne handlingen kan ikke angres.", + "integrations_settings": "Integrasjoner Innstillinger", + "media": "Media", + "restore_data": "Gjenopprett data", + "restore_data_desc": "Last opp en sikkerhetskopifil for å gjenopprette dataene dine.", + "select_backup_file": "Velg sikkerhetskopifil", + "world_travel_visits": "Verdens reisebesøk" }, "collection": { "collection_created": "Samling opprettet!", @@ -748,5 +760,6 @@ "location": "Sted", "locations": "Lokasjoner", "my_locations": "Mine lokasjoner" - } + }, + "settings_download_backup": "Last ned sikkerhetskopi" } diff --git a/frontend/src/locales/pl.json b/frontend/src/locales/pl.json index 1f5cc10..eab34eb 100644 --- a/frontend/src/locales/pl.json +++ b/frontend/src/locales/pl.json @@ -523,7 +523,19 @@ "secure_your_account": "Zabezpiecz swoje konto", "setup_required": "Wymagana konfiguracja", "verify_setup": "Sprawdź konfigurację", - "whats_included": "Co jest uwzględnione" + "whats_included": "Co jest uwzględnione", + "backup_your_data": "Kopie wykonuj kopię zapasową danych", + "backup_your_data_desc": "Pobierz pełną kopię zapasową danych konta, w tym lokalizacji, kolekcji, mediów i wizyt.", + "data_override_acknowledge": "Przyjmuję do wiadomości, że zastąpi to wszystkie moje istniejące dane", + "data_override_acknowledge_desc": "Ta akcja jest nieodwracalna i zastąpi wszystkie lokalizacje, kolekcje i wizyty na Twoim koncie.", + "data_override_warning": "Zastąpienie danych ostrzeżenia", + "data_override_warning_desc": "Przywracanie danych całkowicie zastąpi wszystkie istniejące dane (które są zawarte w tworzeniu kopii zapasowej) na Twoim koncie. \nTego działania nie można cofnąć.", + "integrations_settings": "Ustawienia integracji", + "media": "Głoska bezdźwięczna", + "restore_data": "Przywróć dane", + "restore_data_desc": "Prześlij plik kopii zapasowej, aby przywrócić dane.", + "select_backup_file": "Wybierz plik kopii zapasowej", + "world_travel_visits": "Wizyty podróży na świecie" }, "collection": { "collection_created": "Kolekcja została pomyślnie utworzona!", @@ -748,5 +760,6 @@ "location": "Lokalizacja", "locations": "Lokalizacje", "my_locations": "Moje lokalizacje" - } + }, + "settings_download_backup": "Pobierz kopię zapasową" } diff --git a/frontend/src/locales/ru.json b/frontend/src/locales/ru.json index a5d759d..a9ddd2b 100644 --- a/frontend/src/locales/ru.json +++ b/frontend/src/locales/ru.json @@ -523,7 +523,19 @@ "secure_your_account": "Защитите свою учетную запись", "setup_required": "Настройка требуется", "verify_setup": "Проверьте настройку", - "whats_included": "Что включено" + "whats_included": "Что включено", + "backup_your_data": "Резервную копию ваших данных", + "backup_your_data_desc": "Загрузите полное резервное копирование данных вашей учетной записи, включая местоположения, коллекции, медиа и посещения.", + "data_override_acknowledge": "Я признаю, что это переопределит все мои существующие данные", + "data_override_acknowledge_desc": "Это действие необратимо и заменит все местоположения, коллекции и посещения в вашем аккаунте.", + "data_override_warning": "Предупреждение о переопределении данных", + "data_override_warning_desc": "Восстановление данных полностью заменит все существующие данные (которые включены в резервную копию) в вашу учетную запись. \nЭто действие не может быть отменено.", + "integrations_settings": "Настройки интеграции", + "media": "СМИ", + "restore_data": "Восстановить данные", + "restore_data_desc": "Загрузите файл резервного копирования, чтобы восстановить ваши данные.", + "select_backup_file": "Выберите файл резервного копирования", + "world_travel_visits": "Всемирные поездки" }, "collection": { "collection_created": "Коллекция успешно создана!", @@ -748,5 +760,6 @@ "location": "Расположение", "locations": "Локации", "my_locations": "Мои локации" - } + }, + "settings_download_backup": "Скачать резервную копию" } diff --git a/frontend/src/locales/sv.json b/frontend/src/locales/sv.json index 72b16f4..ba4d8a7 100644 --- a/frontend/src/locales/sv.json +++ b/frontend/src/locales/sv.json @@ -523,7 +523,19 @@ "secure_your_account": "Säkra ditt konto", "setup_required": "Installation krävs", "verify_setup": "Verifiera installationen", - "whats_included": "Vad ingår" + "whats_included": "Vad ingår", + "backup_your_data": "Säkerhetskopiera dina data", + "backup_your_data_desc": "Ladda ner en fullständig säkerhetskopia av dina kontodata inklusive platser, samlingar, media och besök.", + "data_override_acknowledge": "Jag erkänner att detta kommer att åsidosätta alla mina befintliga uppgifter", + "data_override_acknowledge_desc": "Denna åtgärd är irreversibel och kommer att ersätta alla platser, samlingar och besök på ditt konto.", + "data_override_warning": "Data åsidosättande varning", + "data_override_warning_desc": "Återställa data kommer helt att ersätta alla befintliga data (som ingår i säkerhetskopian) i ditt konto. \nDenna åtgärd kan inte ångras.", + "integrations_settings": "Integrationsinställningar", + "media": "Media", + "restore_data": "Återställa data", + "restore_data_desc": "Ladda upp en säkerhetskopieringsfil för att återställa dina data.", + "select_backup_file": "Välj säkerhetskopieringsfil", + "world_travel_visits": "Världsresebesök" }, "checklist": { "checklist_delete_error": "Ett fel uppstod vid borttagning av checklista", @@ -748,5 +760,6 @@ "location": "Plats", "locations": "Plats", "my_locations": "Mina platser" - } + }, + "settings_download_backup": "Ladda ner säkerhetskopiering" } diff --git a/frontend/src/locales/zh.json b/frontend/src/locales/zh.json index 75312f2..ea7ecc9 100644 --- a/frontend/src/locales/zh.json +++ b/frontend/src/locales/zh.json @@ -523,7 +523,19 @@ "secure_your_account": "保护您的帐户", "setup_required": "需要设置", "verify_setup": "验证设置", - "whats_included": "包括什么" + "whats_included": "包括什么", + "backup_your_data": "备份您的数据", + "backup_your_data_desc": "下载您的帐户数据的完整备份,包括位置,集合,媒体和访问。", + "data_override_acknowledge": "我承认这将覆盖我所有现有数据", + "data_override_acknowledge_desc": "此操作是不可逆转的,将取代您帐户中的所有位置,收集和访问。", + "data_override_warning": "数据覆盖警告", + "data_override_warning_desc": "还原数据将完全替换帐户中的所有现有数据(备份中包含在备份中)。\n该动作不能撤消。", + "integrations_settings": "集成设置", + "media": "媒体", + "restore_data": "还原数据", + "restore_data_desc": "上传备份文件以还原数据。", + "select_backup_file": "选择备份文件", + "world_travel_visits": "世界旅行访问" }, "checklist": { "checklist_delete_error": "删除清单时出错", @@ -748,5 +760,6 @@ "location": "地点", "locations": "位置", "my_locations": "我的位置" - } + }, + "settings_download_backup": "下载备份" } diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte index 6502e94..60c73dc 100644 --- a/frontend/src/routes/settings/+page.svelte +++ b/frontend/src/routes/settings/+page.svelte @@ -951,38 +951,38 @@
- 📍 Locations + 📍 {$t('locations.locations')}
- 🚶 Visits + 🚶 {$t('adventures.visits')}
- 📚 Collections + 📚 {$t('navbar.collections')}
- 🖼️ Media + 🖼️ {$t('settings.media')}
- 🌍 World Travel Visits + 🌍 {$t('settings.world_travel_visits')}
- ⚙️ Settings + ⚙️ {$t('navbar.settings')}
- 👤 Profile + 👤 {$t('navbar.profile')}
- 🔗 Integrations + 🔗 {$t('settings.integrations_settings')}
@@ -996,21 +996,22 @@
-

📤 Backup Your Data

+

📤 {$t('settings.backup_your_data')}

- Download a complete backup of your account data including locations, - collections, media, and visits. + {$t('settings.backup_your_data_desc')}

-

📥 Restore Data

+

📥 {$t('settings.restore_data')}

- Upload a backup file to restore your data. + {$t('settings.restore_data_desc')}

@@ -1029,10 +1030,9 @@ />
-

⚠️ Data Override Warning

+

⚠️ {$t('settings.data_override_warning')}

- Restoring data will completely replace all existing data (that is included - in the backup) in your account. This action cannot be undone. + {$t('settings.data_override_warning_desc')}

@@ -1048,7 +1048,9 @@
-
- Supported formats: .zip -
@@ -1075,11 +1074,10 @@ />
I acknowledge that this will override all my existing data{$t('settings.data_override_acknowledge')}

- This action is irreversible and will replace all locations, collections, - and visits in your account. + {$t('settings.data_override_acknowledge_desc')}

@@ -1110,7 +1108,7 @@ class="btn btn-warning" disabled={!acknowledgeRestoreOverride} > - 🚀 Restore Data + 🚀 {$t('settings.restore_data')}