feat(settings): add dedicated Sync tab with CardDAV contacts integration

- Rename Calendar tab to Synchronization with two sections:
  * Calendar Sync (Google, Apple, CalDAV, ICS)
  * Contact Sync (CardDAV) - NEW
- Add visual tab grouping with CSS separators between sections
- Implement CardDAV account management UI:
  * Add/delete accounts
  * Enable/disable addressbooks
  * Manual sync trigger
  * Connection testing
- Add UX improvements:
  * Status badges (success/error/syncing)
  * Empty states with onboarding
  * Inline help tooltips (prepared)
  * Breadcrumb navigation (prepared)
- Update i18n keys in all 14 locales
- All 109 tests passing

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Ulas Kalayci
2026-05-04 21:50:59 +02:00
parent 43225ee20c
commit 6cdef0102c
21 changed files with 4267 additions and 43 deletions
+46 -2
View File
@@ -758,14 +758,26 @@
},
"settings": {
"title": "Einstellungen",
"navigationLabel": "Einstellungsnavigation",
"breadcrumbLabel": "Pfad",
"sectionPersonal": "Persönlich",
"sectionModulesNav": "Module",
"sectionSync": "Synchronisation",
"sectionAdmin": "Administration",
"tabGeneral": "Allgemein",
"tabMeals": "Mahlzeiten",
"tabBudget": "Budget",
"tabShopping": "Einkauf",
"tabCalendar": "Kalender",
"tabFamily": "Familienverwaltung",
"tabSync": "Synchronisation",
"tabSyncCalendar": "Kalender",
"tabSyncContacts": "Kontakte",
"sectionContactSync": "Kontakt-Synchronisation",
"cardavTitle": "CardDAV Kontakte",
"tabFamily": "Familie",
"tabApiTokens": "API-Tokens",
"tabAccount": "Konto",
"tabBackup": "Backup",
"tabsAriaLabel": "Einstellungsbereiche",
"sectionDesign": "Design",
"sectionAppName": "Anwendungsname",
@@ -1015,7 +1027,39 @@
"calendarDisabled": "Kalender deaktiviert",
"calendarsRefreshed": "Kalender aktualisiert",
"deleteAccountConfirm": "CalDAV-Konto wirklich löschen? Alle synchronisierten Kalender werden entfernt.",
"lastSync": "Zuletzt synchronisiert"
"lastSync": "Zuletzt synchronisiert",
"cardavTitle": "CardDAV Kontakte",
"cardavDescription": "Verbinde mehrere CardDAV-Konten (iCloud, Nextcloud, Radicale, etc.) und synchronisiere deine Kontakte.",
"cardavAddAccount": "CardDAV-Konto hinzufügen",
"cardavEmptyState": "Noch keine CardDAV-Konten verbunden. Füge dein erstes Konto hinzu, um Kontakte zu synchronisieren.",
"cardavNameLabel": "Kontoname",
"cardavNamePlaceholder": "z.B. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server-URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "Die Basis-URL deines CardDAV-Servers",
"cardavUsernameLabel": "Benutzername",
"cardavPasswordLabel": "Passwort",
"cardavPasswordHint": "Für iCloud: App-spezifisches Passwort von appleid.apple.com verwenden",
"cardavAccountAdded": "CardDAV-Konto erfolgreich hinzugefügt",
"cardavAccountDeleted": "CardDAV-Konto entfernt",
"cardavSyncSuccess": "CardDAV-Synchronisation erfolgreich",
"cardavSyncFailed": "CardDAV-Synchronisation fehlgeschlagen",
"cardavConnectionFailed": "Verbindung zum CardDAV-Server fehlgeschlagen",
"cardavAddressbooksToggle": "Adressbücher anzeigen/ausblenden",
"cardavRefreshAddressbooks": "Adressbücher aktualisieren",
"addressbookEnabled": "Adressbuch aktiviert",
"addressbookDisabled": "Adressbuch deaktiviert",
"addressbooksRefreshed": "Adressbücher aktualisiert",
"deleteCardDAVAccountConfirm": "CardDAV-Konto wirklich löschen? Alle synchronisierten Kontakte bleiben erhalten, verlieren aber die CardDAV-Verknüpfung.",
"statusSynced": "Synchronisiert",
"statusError": "Fehler",
"statusSyncing": "Synchronisiert…",
"statusNeverSynced": "Noch nie synchronisiert",
"syncedAgo": "vor {{time}}",
"helpTooltipCalDAV": "CalDAV ermöglicht die Synchronisation von Kalendern mit iCloud, Nextcloud und anderen CalDAV-Servern.",
"helpTooltipCardDAV": "CardDAV ermöglicht die Synchronisation von Kontakten mit iCloud, Nextcloud und anderen CardDAV-Servern.",
"emptyStateAddFirst": "Füge dein erstes Konto hinzu",
"emptyStateNoAccounts": "Noch keine Konten verbunden"
},
"login": {
"tagline": "Familienplanung. Sicher. Datenschutzfreundlich. Open Source.",