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
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "تمت استعادة قاعدة البيانات. جارٍ إعادة التحميل...",
"backupCliTitle": "استعادة CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "يمكنك أيضًا إنشاء نسخة مباشرة عبر Docker Compose:"
"backupCliBackupHint": "يمكنك أيضًا إنشاء نسخة مباشرة عبر Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "تخطيط عائلي. آمن. يحترم الخصوصية. مفتوح المصدر.",
@@ -1191,4 +1216,4 @@
"new": "إنشاء إدخال جديد",
"search": "فتح البحث"
}
}
}
+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.",
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Η βάση επαναφέρθηκε. Επαναφόρτωση...",
"backupCliTitle": "Επαναφορά CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Μπορείτε επίσης να δημιουργήσετε αντίγραφο απευθείας με Docker Compose:"
"backupCliBackupHint": "Μπορείτε επίσης να δημιουργήσετε αντίγραφο απευθείας με Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Οικογενειακός προγραμματισμός. Ασφαλής. Φιλικός προς την ιδιωτικότητα. Ανοιχτός κώδικας.",
@@ -1191,4 +1216,4 @@
"new": "Δημιουργία νέας εγγραφής",
"search": "Άνοιγμα αναζήτησης"
}
}
}
+26 -1
View File
@@ -760,7 +760,9 @@
"tabFamily": "Family Management",
"tabApiTokens": "API Tokens",
"tabAccount": "Account",
"tabSync": "Synchronization",
"tabsAriaLabel": "Settings sections",
"sectionContactSync": "Contact Synchronization",
"sectionDesign": "Appearance",
"sectionAppName": "Application name",
"sectionModules": "Modules",
@@ -1009,7 +1011,30 @@
"calendarDisabled": "Calendar disabled",
"calendarsRefreshed": "Calendars refreshed",
"deleteAccountConfirm": "Really delete CalDAV account? All synced calendars will be removed.",
"lastSync": "Last synced"
"lastSync": "Last synced",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Family planning. Secure. Privacy-friendly. Open source.",
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Base de datos restaurada. Recargando...",
"backupCliTitle": "Restauración por CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "También puedes crear una copia directamente con Docker Compose:"
"backupCliBackupHint": "También puedes crear una copia directamente con Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Planificación familiar. Segura. Privada. Código abierto.",
@@ -1191,4 +1216,4 @@
"new": "Crear nueva entrada",
"search": "Abrir búsqueda"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Base restaurée. Rechargement...",
"backupCliTitle": "Restauration CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Tu peux aussi créer une sauvegarde directement avec Docker Compose :"
"backupCliBackupHint": "Tu peux aussi créer une sauvegarde directement avec Docker Compose :",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Planification familiale. Sécurisée. Respectueuse de la vie privée. Open source.",
@@ -1191,4 +1216,4 @@
"new": "Créer une nouvelle entrée",
"search": "Ouvrir la recherche"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "डेटाबेस पुनर्स्थापित हुआ। फिर से लोड हो रहा है...",
"backupCliTitle": "CLI / Docker Compose पुनर्स्थापना",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "आप Docker Compose से सीधे बैकअप भी बना सकते हैं:"
"backupCliBackupHint": "आप Docker Compose से सीधे बैकअप भी बना सकते हैं:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "पारिवारिक योजना। सुरक्षित। गोपनीयता-अनुकूल। ओपन सोर्स।",
@@ -1191,4 +1216,4 @@
"new": "नई प्रविष्टि बनाएं",
"search": "खोज खोलें"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Database ripristinato. Ricaricamento...",
"backupCliTitle": "Ripristino CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Puoi anche creare un backup direttamente con Docker Compose:"
"backupCliBackupHint": "Puoi anche creare un backup direttamente con Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Pianificazione familiare. Sicura. Rispettosa della privacy. Open source.",
@@ -1191,4 +1216,4 @@
"new": "Crea nuova voce",
"search": "Apri ricerca"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "データベースを復元しました。再読み込み中...",
"backupCliTitle": "CLI / Docker Compose 復元",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Docker Compose から直接バックアップを作成することもできます:"
"backupCliBackupHint": "Docker Compose から直接バックアップを作成することもできます:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "家族計画。安全。プライバシー重視。オープンソース。",
@@ -1191,4 +1216,4 @@
"new": "新規エントリを作成",
"search": "検索を開く"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Banco de dados restaurado. Recarregando...",
"backupCliTitle": "Restauração via CLI / Docker Compose",
"backupCliHint": "Para restaurações operacionais, pare a aplicação, monte o backup em um container temporário e substitua o arquivo do banco de dados.",
"backupCliBackupHint": "Você também pode criar um backup diretamente pelo Docker Compose:"
"backupCliBackupHint": "Você também pode criar um backup diretamente pelo Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Planejamento familiar. Seguro. Privado. Código aberto.",
@@ -1191,4 +1216,4 @@
"new": "Criar nova entrada",
"search": "Abrir pesquisa"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "База данных восстановлена. Перезагрузка...",
"backupCliTitle": "Восстановление CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Также можно создать копию напрямую через Docker Compose:"
"backupCliBackupHint": "Также можно создать копию напрямую через Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Семейное планирование. Безопасно. С уважением к приватности. Открытый исходный код.",
@@ -1191,4 +1216,4 @@
"new": "Создать новую запись",
"search": "Открыть поиск"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Databasen återställd. Laddar om...",
"backupCliTitle": "CLI / Docker Compose-återställning",
"backupCliHint": "För driftåterställningar, stoppa appen, montera säkerhetskopian i en tillfällig container och byt ut databasfilen.",
"backupCliBackupHint": "Du kan också skapa en backup direkt med Docker Compose:"
"backupCliBackupHint": "Du kan också skapa en backup direkt med Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Familjeplanering. Säker. Sekretessvänlig. Öppen källkod.",
@@ -1191,4 +1216,4 @@
"goShop": "Inköpslista",
"goNotes": "Anteckningar"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Veritabanı geri yüklendi. Yeniden yükleniyor...",
"backupCliTitle": "CLI / Docker Compose geri yükleme",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Docker Compose ile doğrudan yedek de oluşturabilirsiniz:"
"backupCliBackupHint": "Docker Compose ile doğrudan yedek de oluşturabilirsiniz:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Aile planlaması. Güvenli. Gizlilik dostu. Açık kaynak.",
@@ -1191,4 +1216,4 @@
"new": "Yeni giriş oluştur",
"search": "Aramayı aç"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "Базу даних відновлено. Перезавантаження...",
"backupCliTitle": "Відновлення CLI / Docker Compose",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "Також можна створити копію безпосередньо через Docker Compose:"
"backupCliBackupHint": "Також можна створити копію безпосередньо через Docker Compose:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "Планування для родини. Безпечно. Конфіденційно. Відкритий код.",
@@ -1191,4 +1216,4 @@
"new": "Створити новий запис",
"search": "Відкрити пошук"
}
}
}
+27 -2
View File
@@ -952,7 +952,32 @@
"backupRestoredToast": "数据库已恢复。正在重新加载...",
"backupCliTitle": "CLI / Docker Compose 恢复",
"backupCliHint": "For operational restores, stop the app, mount the backup in a temporary container and replace the database file.",
"backupCliBackupHint": "也可以直接通过 Docker Compose 创建备份:"
"backupCliBackupHint": "也可以直接通过 Docker Compose 创建备份:",
"tabSync": "Synchronization",
"sectionContactSync": "Contact Synchronization",
"cardavTitle": "CardDAV Contacts",
"cardavDescription": "Connect multiple CardDAV accounts (iCloud, Nextcloud, Radicale, etc.) and sync your contacts.",
"cardavAddAccount": "Add CardDAV Account",
"cardavEmptyState": "No CardDAV accounts connected yet. Add your first account to sync contacts.",
"cardavNameLabel": "Account name",
"cardavNamePlaceholder": "e.g. iCloud, Nextcloud",
"cardavUrlLabel": "CardDAV Server URL",
"cardavUrlPlaceholder": "https://contacts.icloud.com",
"cardavUrlHint": "The base URL of your CardDAV server",
"cardavUsernameLabel": "Username",
"cardavPasswordLabel": "Password",
"cardavPasswordHint": "For iCloud: Use app-specific password from appleid.apple.com",
"cardavAccountAdded": "CardDAV account added successfully",
"cardavAccountDeleted": "CardDAV account removed",
"cardavSyncSuccess": "CardDAV sync successful",
"cardavSyncFailed": "CardDAV sync failed",
"cardavConnectionFailed": "Connection to CardDAV server failed",
"cardavAddressbooksToggle": "Show/hide addressbooks",
"cardavRefreshAddressbooks": "Refresh addressbooks",
"addressbookEnabled": "Addressbook enabled",
"addressbookDisabled": "Addressbook disabled",
"addressbooksRefreshed": "Addressbooks refreshed",
"deleteCardDAVAccountConfirm": "Really delete CardDAV account? All synced contacts will remain but lose their CardDAV link."
},
"login": {
"tagline": "家庭规划。安全。注重隐私。开源。",
@@ -1191,4 +1216,4 @@
"new": "创建新条目",
"search": "打开搜索"
}
}
}