1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-08-04 20:55:19 +02:00

Enhance backup and restore functionality with improved localization and error handling

This commit is contained in:
Sean Morley 2025-06-26 10:13:02 -04:00
parent 10418f85cc
commit 9d004a17db
14 changed files with 204 additions and 50 deletions

View file

@ -329,7 +329,7 @@ class BackupViewSet(viewsets.ViewSet):
except json.JSONDecodeError: except json.JSONDecodeError:
return Response({'error': 'Invalid JSON in backup file'}, return Response({'error': 'Invalid JSON in backup file'},
status=status.HTTP_400_BAD_REQUEST) status=status.HTTP_400_BAD_REQUEST)
except Exception as e: except Exception:
import logging import logging
logging.error("Import failed", exc_info=True) logging.error("Import failed", exc_info=True)
return Response({'error': 'An internal error occurred during import'}, return Response({'error': 'An internal error occurred during import'},

View file

@ -523,7 +523,19 @@
"secure_your_account": "Sichern Sie Ihr Konto", "secure_your_account": "Sichern Sie Ihr Konto",
"setup_required": "Setup erforderlich", "setup_required": "Setup erforderlich",
"verify_setup": "Überprüfen Sie das Setup", "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": {
"checklist_delete_error": "Fehler beim Löschen der Checkliste", "checklist_delete_error": "Fehler beim Löschen der Checkliste",
@ -748,5 +760,6 @@
"location": "Standort", "location": "Standort",
"locations": "Standorte", "locations": "Standorte",
"my_locations": "Meine Standorte" "my_locations": "Meine Standorte"
} },
"settings_download_backup": "Backup herunterladen"
} }

View file

@ -523,7 +523,19 @@
"important": "Important", "important": "Important",
"error_occurred": "An error has occurred", "error_occurred": "An error has occurred",
"mfa_already_enabled": "MFA already enabled", "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": {
"collection_created": "Collection created successfully!", "collection_created": "Collection created successfully!",
@ -748,5 +760,6 @@
"location": "Location", "location": "Location",
"locations": "Locations", "locations": "Locations",
"my_locations": "My Locations" "my_locations": "My Locations"
} },
"settings_download_backup": "Download Backup"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "Asegure su cuenta", "secure_your_account": "Asegure su cuenta",
"setup_required": "Configuración requerida", "setup_required": "Configuración requerida",
"verify_setup": "Verificar la configuración", "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": {
"checklist_delete_error": "Error al eliminar la lista de tareas", "checklist_delete_error": "Error al eliminar la lista de tareas",
@ -748,5 +760,6 @@
"location": "Ubicación", "location": "Ubicación",
"locations": "Ubicación", "locations": "Ubicación",
"my_locations": "Mis ubicaciones" "my_locations": "Mis ubicaciones"
} },
"settings_download_backup": "Descargar copia de seguridad"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "Sécuriser votre compte", "secure_your_account": "Sécuriser votre compte",
"setup_required": "Configuration requise", "setup_required": "Configuration requise",
"verify_setup": "Vérifiez la configuration", "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": {
"checklist_delete_error": "Erreur lors de la suppression de la liste de contrôle", "checklist_delete_error": "Erreur lors de la suppression de la liste de contrôle",
@ -748,5 +760,6 @@
"location": "Emplacement", "location": "Emplacement",
"locations": "Lieux", "locations": "Lieux",
"my_locations": "Mes emplacements" "my_locations": "Mes emplacements"
} },
"settings_download_backup": "Télécharger la sauvegarde"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "Proteggere il tuo account", "secure_your_account": "Proteggere il tuo account",
"setup_required": "Setup richiesto", "setup_required": "Setup richiesto",
"verify_setup": "Verifica la configurazione", "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": {
"checklist_delete_error": "Errore durante l'eliminazione della lista di controllo", "checklist_delete_error": "Errore durante l'eliminazione della lista di controllo",
@ -748,5 +760,6 @@
"location": "Posizione", "location": "Posizione",
"locations": "Luoghi", "locations": "Luoghi",
"my_locations": "Le mie posizioni" "my_locations": "Le mie posizioni"
} },
"settings_download_backup": "Scarica il backup"
} }

View file

@ -615,7 +615,19 @@
"secure_your_account": "계정을 확보하십시오", "secure_your_account": "계정을 확보하십시오",
"setup_required": "설정이 필요합니다", "setup_required": "설정이 필요합니다",
"verify_setup": "설정을 확인하십시오", "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": { "share": {
"go_to_settings": "설정으로 이동", "go_to_settings": "설정으로 이동",
@ -747,5 +759,6 @@
"location": "위치", "location": "위치",
"locations": "위치", "locations": "위치",
"my_locations": "내 위치" "my_locations": "내 위치"
} },
"settings_download_backup": "백업을 다운로드하십시오"
} }

View file

@ -523,7 +523,19 @@
"mfa_required": "MFA vereist", "mfa_required": "MFA vereist",
"scan_qr_code": "Scan QR -code", "scan_qr_code": "Scan QR -code",
"scan_with_authenticator_app": "Scan met authenticator -app", "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": {
"checklist_delete_error": "Fout bij het verwijderen van de checklist", "checklist_delete_error": "Fout bij het verwijderen van de checklist",
@ -748,5 +760,6 @@
"location": "Locatie", "location": "Locatie",
"locations": "Locaties", "locations": "Locaties",
"my_locations": "Mijn locaties" "my_locations": "Mijn locaties"
} },
"settings_download_backup": "Download back -up"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "Sikre kontoen din", "secure_your_account": "Sikre kontoen din",
"setup_required": "Oppsett kreves", "setup_required": "Oppsett kreves",
"verify_setup": "Bekreft oppsett", "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": {
"collection_created": "Samling opprettet!", "collection_created": "Samling opprettet!",
@ -748,5 +760,6 @@
"location": "Sted", "location": "Sted",
"locations": "Lokasjoner", "locations": "Lokasjoner",
"my_locations": "Mine lokasjoner" "my_locations": "Mine lokasjoner"
} },
"settings_download_backup": "Last ned sikkerhetskopi"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "Zabezpiecz swoje konto", "secure_your_account": "Zabezpiecz swoje konto",
"setup_required": "Wymagana konfiguracja", "setup_required": "Wymagana konfiguracja",
"verify_setup": "Sprawdź konfigurację", "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": {
"collection_created": "Kolekcja została pomyślnie utworzona!", "collection_created": "Kolekcja została pomyślnie utworzona!",
@ -748,5 +760,6 @@
"location": "Lokalizacja", "location": "Lokalizacja",
"locations": "Lokalizacje", "locations": "Lokalizacje",
"my_locations": "Moje lokalizacje" "my_locations": "Moje lokalizacje"
} },
"settings_download_backup": "Pobierz kopię zapasową"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "Защитите свою учетную запись", "secure_your_account": "Защитите свою учетную запись",
"setup_required": "Настройка требуется", "setup_required": "Настройка требуется",
"verify_setup": "Проверьте настройку", "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": {
"collection_created": "Коллекция успешно создана!", "collection_created": "Коллекция успешно создана!",
@ -748,5 +760,6 @@
"location": "Расположение", "location": "Расположение",
"locations": "Локации", "locations": "Локации",
"my_locations": "Мои локации" "my_locations": "Мои локации"
} },
"settings_download_backup": "Скачать резервную копию"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "Säkra ditt konto", "secure_your_account": "Säkra ditt konto",
"setup_required": "Installation krävs", "setup_required": "Installation krävs",
"verify_setup": "Verifiera installationen", "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": {
"checklist_delete_error": "Ett fel uppstod vid borttagning av checklista", "checklist_delete_error": "Ett fel uppstod vid borttagning av checklista",
@ -748,5 +760,6 @@
"location": "Plats", "location": "Plats",
"locations": "Plats", "locations": "Plats",
"my_locations": "Mina platser" "my_locations": "Mina platser"
} },
"settings_download_backup": "Ladda ner säkerhetskopiering"
} }

View file

@ -523,7 +523,19 @@
"secure_your_account": "保护您的帐户", "secure_your_account": "保护您的帐户",
"setup_required": "需要设置", "setup_required": "需要设置",
"verify_setup": "验证设置", "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": {
"checklist_delete_error": "删除清单时出错", "checklist_delete_error": "删除清单时出错",
@ -748,5 +760,6 @@
"location": "地点", "location": "地点",
"locations": "位置", "locations": "位置",
"my_locations": "我的位置" "my_locations": "我的位置"
} },
"settings_download_backup": "下载备份"
} }

View file

@ -951,38 +951,38 @@
<!-- Backed Up --> <!-- Backed Up -->
<div class="space-y-2"> <div class="space-y-2">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>📍 Locations</span> <span>📍 {$t('locations.locations')}</span>
<span></span> <span></span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>🚶 Visits</span> <span>🚶 {$t('adventures.visits')}</span>
<span></span> <span></span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>📚 Collections</span> <span>📚 {$t('navbar.collections')}</span>
<span></span> <span></span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>🖼️ Media</span> <span>🖼️ {$t('settings.media')}</span>
<span></span> <span></span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>🌍 World Travel Visits</span> <span>🌍 {$t('settings.world_travel_visits')}</span>
<span></span> <span></span>
</div> </div>
</div> </div>
<!-- Not Backed Up --> <!-- Not Backed Up -->
<div class="space-y-2"> <div class="space-y-2">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>⚙️ Settings</span> <span>⚙️ {$t('navbar.settings')}</span>
<span></span> <span></span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>👤 Profile</span> <span>👤 {$t('navbar.profile')}</span>
<span></span> <span></span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>🔗 Integrations</span> <span>🔗 {$t('settings.integrations_settings')}</span>
<span></span> <span></span>
</div> </div>
<div class="flex items-center justify-between opacity-30"> <div class="flex items-center justify-between opacity-30">
@ -996,21 +996,22 @@
<div class="space-y-6"> <div class="space-y-6">
<!-- Backup Data --> <!-- Backup Data -->
<div class="p-6 bg-base-200 rounded-xl"> <div class="p-6 bg-base-200 rounded-xl">
<h3 class="text-lg font-semibold mb-4">📤 Backup Your Data</h3> <h3 class="text-lg font-semibold mb-4">📤 {$t('settings.backup_your_data')}</h3>
<p class="text-base-content/70 mb-4"> <p class="text-base-content/70 mb-4">
Download a complete backup of your account data including locations, {$t('settings.backup_your_data_desc')}
collections, media, and visits.
</p> </p>
<div class="flex gap-4"> <div class="flex gap-4">
<a class="btn btn-primary" href="/api/backup/export"> 💾 Download Backup </a> <a class="btn btn-primary" href="/api/backup/export">
💾 {$t('settings_download_backup')}
</a>
</div> </div>
</div> </div>
<!-- Restore Data --> <!-- Restore Data -->
<div class="p-6 bg-base-200 rounded-xl"> <div class="p-6 bg-base-200 rounded-xl">
<h3 class="text-lg font-semibold mb-4">📥 Restore Data</h3> <h3 class="text-lg font-semibold mb-4">📥 {$t('settings.restore_data')}</h3>
<p class="text-base-content/70 mb-4"> <p class="text-base-content/70 mb-4">
Upload a backup file to restore your data. {$t('settings.restore_data_desc')}
</p> </p>
<!-- Warning Alert --> <!-- Warning Alert -->
@ -1029,10 +1030,9 @@
/> />
</svg> </svg>
<div> <div>
<h4 class="font-bold">⚠️ Data Override Warning</h4> <h4 class="font-bold">⚠️ {$t('settings.data_override_warning')}</h4>
<p class="text-sm"> <p class="text-sm">
Restoring data will completely replace all existing data (that is included {$t('settings.data_override_warning_desc')}
in the backup) in your account. This action cannot be undone.
</p> </p>
</div> </div>
</div> </div>
@ -1048,7 +1048,9 @@
<div class="form-control"> <div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control --> <!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label"> <label class="label">
<span class="label-text font-medium">Select backup file</span> <span class="label-text font-medium"
>{$t('settings.select_backup_file')}</span
>
</label> </label>
<input <input
type="file" type="file"
@ -1057,9 +1059,6 @@
accept=".zip" accept=".zip"
required required
/> />
<div class="label">
<span class="label-text-alt">Supported formats: .zip</span>
</div>
</div> </div>
<!-- Acknowledgment Checkbox --> <!-- Acknowledgment Checkbox -->
@ -1075,11 +1074,10 @@
/> />
<div> <div>
<span class="label-text font-medium text-warning" <span class="label-text font-medium text-warning"
>I acknowledge that this will override all my existing data</span >{$t('settings.data_override_acknowledge')}</span
> >
<p class="text-xs text-base-content/60 mt-1"> <p class="text-xs text-base-content/60 mt-1">
This action is irreversible and will replace all locations, collections, {$t('settings.data_override_acknowledge_desc')}
and visits in your account.
</p> </p>
</div> </div>
</label> </label>
@ -1110,7 +1108,7 @@
class="btn btn-warning" class="btn btn-warning"
disabled={!acknowledgeRestoreOverride} disabled={!acknowledgeRestoreOverride}
> >
🚀 Restore Data 🚀 {$t('settings.restore_data')}
</button> </button>
</div> </div>
</form> </form>