feat: add housekeeping module for household staff management
* Adding flexible reminder options to birthdays * Fix database migration merge conflict * Truncate calendar popup descriptions * Log app version on backend startup * Add host-mounted data and backup folders * feat: add housekeeping module * fix: align housekeeping UI and add task creation * refactor: rebuild housekeeping experience * feat: support multiple housekeeping staff * feat: integrate housekeeping visits with calendar * feat: refine housekeeping visits and payments * feat: add housekeeping staff visit logs * feat: add housekeeping receipts and document folders * feat: localize housekeeping folders and chores * feat: refine housekeeping tabs and document folders * fix: sync housekeeping tab active state * feat: use configured app name in onboarding and manifest
This commit is contained in:
+172
-11
@@ -54,7 +54,8 @@
|
||||
"recipes": "Rezepte",
|
||||
"documents": "Dokumente",
|
||||
"kitchen": "Küche",
|
||||
"search": "Suche"
|
||||
"search": "Suche",
|
||||
"housekeeping": "Hauspflege"
|
||||
},
|
||||
"search": {
|
||||
"title": "Suche",
|
||||
@@ -499,7 +500,10 @@
|
||||
"attachmentHint": "Lokales Bild, PDF oder Dokument anhängen. Bilder werden im Ereignis-Popup angezeigt.",
|
||||
"attachmentFallback": "Anhang",
|
||||
"attachmentReadError": "Der Anhang konnte nicht gelesen werden.",
|
||||
"attachmentTooLarge": "Der Anhang darf höchstens 5 MB groß sein."
|
||||
"attachmentTooLarge": "Der Anhang darf höchstens 5 MB groß sein.",
|
||||
"iconCleaning": "Reinigung",
|
||||
"attachmentDocumentName": "{{title}} - {{name}}",
|
||||
"attachmentDocumentDescription": "Anhang für Kalendereintrag \"{{title}}\" hochgeladen."
|
||||
},
|
||||
"notes": {
|
||||
"title": "Notizen",
|
||||
@@ -779,7 +783,7 @@
|
||||
"tabFamily": "Familie",
|
||||
"tabApiTokens": "API-Tokens",
|
||||
"tabAccount": "Konto",
|
||||
"tabBackup": "Backup",
|
||||
"tabBackup": "Backup-Verwaltung",
|
||||
"tabsAriaLabel": "Einstellungsbereiche",
|
||||
"sectionDesign": "Design",
|
||||
"sectionAppName": "Anwendungsname",
|
||||
@@ -845,7 +849,7 @@
|
||||
"disconnectedToast": "{{provider}} getrennt.",
|
||||
"googleOnlyAdmin": "Nur Admin kann Google Calendar verbinden.",
|
||||
"appleOnlyAdmin": "Nur Admin kann Apple Calendar verbinden.",
|
||||
"caldavUrlLabel": "CalDAV-Server-URL",
|
||||
"caldavUrlLabel": "CalDAV Server-URL",
|
||||
"caldavUrlPlaceholder": "https://caldav.icloud.com",
|
||||
"appleIdLabel": "Apple-ID (E-Mail)",
|
||||
"applePasswordLabel": "App-spezifisches Passwort",
|
||||
@@ -975,7 +979,6 @@
|
||||
"memberBirthDateInvalid": "Bitte ein gültiges Geburtstagsdatum im ausgewählten Format verwenden.",
|
||||
"memberPhoneMeta": "Telefon: {{value}}",
|
||||
"memberBirthdayMeta": "Geburtstag: {{date}}",
|
||||
"tabBackup": "Backup-Verwaltung",
|
||||
"sectionBackup": "Backup-Verwaltung",
|
||||
"backupDownloadTitle": "Datenbank-Backup herunterladen",
|
||||
"backupDownloadHint": "Erstellt ein konsistentes SQLite-Backup aller Anwendungsdaten.",
|
||||
@@ -1012,8 +1015,6 @@
|
||||
"caldavEmptyState": "Noch keine CalDAV-Konten verbunden. Füge dein erstes Konto hinzu, um zu starten.",
|
||||
"caldavNameLabel": "Kontoname",
|
||||
"caldavNamePlaceholder": "z.B. Mein Radicale, iCloud, Nextcloud",
|
||||
"caldavUrlLabel": "CalDAV Server-URL",
|
||||
"caldavUrlPlaceholder": "https://caldav.icloud.com",
|
||||
"caldavUrlHint": "Die Basis-URL deines CalDAV-Servers",
|
||||
"caldavUsernameLabel": "Benutzername",
|
||||
"caldavPasswordLabel": "Passwort",
|
||||
@@ -1030,7 +1031,6 @@
|
||||
"calendarsRefreshed": "Kalender aktualisiert",
|
||||
"deleteAccountConfirm": "CalDAV-Konto wirklich löschen? Alle synchronisierten Kalender werden entfernt.",
|
||||
"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.",
|
||||
@@ -1061,7 +1061,12 @@
|
||||
"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"
|
||||
"emptyStateNoAccounts": "Noch keine Konten verbunden",
|
||||
"sectionHousekeeping": "Housekeeping",
|
||||
"housekeepingPaymentsTitle": "Payment tasks",
|
||||
"housekeepingPaymentTasksLabel": "Create a payment task on each housekeeper check-in",
|
||||
"housekeepingPaymentTasksHint": "When enabled, each check-in creates a task for paying the staff member. Completing that task marks the visit payment as paid.",
|
||||
"housekeepingPaymentTasksSaved": "Housekeeping payment setting saved."
|
||||
},
|
||||
"login": {
|
||||
"tagline": "Familienplanung. Sicher. Datenschutzfreundlich. Open Source.",
|
||||
@@ -1198,7 +1203,7 @@
|
||||
"copySuffix": "Kopie"
|
||||
},
|
||||
"onboarding": {
|
||||
"step1Title": "Willkommen bei Oikos",
|
||||
"step1Title": "Willkommen bei {{name}}",
|
||||
"step1Body": "Dein persönlicher Familienplaner. Aufgaben, Kalender, Einkauf und mehr – alles an einem Ort.",
|
||||
"step2Title": "Navigation & Module",
|
||||
"step2Body": "Unten erreichst du Dashboard und Kalender direkt. Mit dem ···-Button öffnest du weitere Module wie Küche, Notizen und Kontakte.",
|
||||
@@ -1292,10 +1297,166 @@
|
||||
},
|
||||
"dropzoneTitle": "Datei hier ablegen oder klicken",
|
||||
"dropzoneHint": "Ziehe eine Datei in diesen Bereich oder nutze die Dateiauswahl.",
|
||||
"selectedFileLabel": "Ausgewählt: {{name}}"
|
||||
"selectedFileLabel": "Ausgewählt: {{name}}",
|
||||
"addFolderButton": "Add folder",
|
||||
"allFolders": "All folders",
|
||||
"folderLabel": "Folder",
|
||||
"noFolder": "No folder",
|
||||
"newFolderTitle": "New folder",
|
||||
"folderNameLabel": "Folder name",
|
||||
"createFolderAction": "Create folder",
|
||||
"folderCreatedToast": "Folder created.",
|
||||
"housekeepingFolder": "Hausreinigung",
|
||||
"calendarItemsFolder": "Kalendereinträge",
|
||||
"folderBrowserTitle": "Ordner durchsuchen"
|
||||
},
|
||||
"userMultiSelect": {
|
||||
"nobody": "- Niemand -",
|
||||
"moreUsers": "weitere"
|
||||
},
|
||||
"housekeeping": {
|
||||
"title": "Reinigungsbereich",
|
||||
"bottomNav": "Hauspflege-Navigation",
|
||||
"home": "Start",
|
||||
"tasks": "Aufgaben",
|
||||
"report": "Melden",
|
||||
"notCheckedIn": "Nicht eingecheckt",
|
||||
"checkedInAt": "Eingecheckt um",
|
||||
"monthTotal": "Aktueller Monat · {{count}} Einsätze",
|
||||
"dailyRate": "Tagessatz",
|
||||
"extras": "Extras",
|
||||
"checkIn": "Einchecken",
|
||||
"checkOut": "Auschecken",
|
||||
"quickSupply": "Produkt fehlt",
|
||||
"supplyName": "Produktname",
|
||||
"supplyPlaceholder": "Was fehlt?",
|
||||
"checkedInToast": "Check-in gespeichert.",
|
||||
"checkedOutToast": "Check-out gespeichert.",
|
||||
"supplyAddedToast": "Zur Einkaufsliste hinzugefügt.",
|
||||
"overdue": "Überfällig",
|
||||
"dueToday": "Heute fällig",
|
||||
"ok": "OK",
|
||||
"noTasks": "Noch keine Hauspflege-Aufgaben.",
|
||||
"everyDays": "Alle {{days}} Tage",
|
||||
"completeTask": "{{name}} erledigen",
|
||||
"taskDoneToast": "Aufgabe erledigt.",
|
||||
"reportTitle": "Problem melden",
|
||||
"problemDescription": "Problembeschreibung",
|
||||
"problemPlaceholder": "Beispiel: Glühbirne defekt",
|
||||
"addPhoto": "Foto hinzufügen",
|
||||
"sendReport": "Meldung senden",
|
||||
"reportSentToast": "Problem gemeldet.",
|
||||
"recentReports": "Letzte Meldungen",
|
||||
"addTask": "Aufgabe hinzufügen",
|
||||
"taskName": "Aufgabe",
|
||||
"taskNamePlaceholder": "Beispiel: Badezimmer reinigen",
|
||||
"taskArea": "Bereich",
|
||||
"taskAreaPlaceholder": "Beispiel: Bad",
|
||||
"taskFrequency": "Häufigkeit",
|
||||
"createTask": "Aufgabe erstellen",
|
||||
"taskCreatedToast": "Hauspflege-Aufgabe erstellt.",
|
||||
"dashboard": "Dashboard",
|
||||
"reports": "Reports",
|
||||
"visitsThisMonth": "Besuche im Monat",
|
||||
"lastVisit": "Letzter Besuch",
|
||||
"pendingChores": "Offene Aufgaben",
|
||||
"finishedChores": "Erledigte Aufgaben",
|
||||
"payments": "Zahlungen",
|
||||
"pendingPayments": "Offene Zahlungen",
|
||||
"monthlyPayments": "Monatliche Zahlungen",
|
||||
"noPaymentData": "Noch keine Zahlungsdaten.",
|
||||
"noVisits": "Noch keine Besuche",
|
||||
"noWorkerTitle": "Kein Hauspflege-Profil",
|
||||
"noWorkerHint": "Profil anlegen, um Kontakte, Tagessatz und Zahlungsrhythmus festzulegen.",
|
||||
"taskTemplates": "Vorgeschlagene Aufgaben",
|
||||
"addCustomTask": "Eigene Aufgabe hinzufügen",
|
||||
"noReports": "Noch keine Meldungen.",
|
||||
"profileTitle": "Hauspflege-Profil",
|
||||
"profilePicture": "Profilbild",
|
||||
"workerName": "Name",
|
||||
"workerUsername": "Benutzername",
|
||||
"workerPhone": "Telefon",
|
||||
"workerEmail": "E-Mail",
|
||||
"workerBirthDate": "Geburtstag",
|
||||
"paymentSchedule": "Zahlungsrhythmus",
|
||||
"scheduleDaily": "Pro Besuch",
|
||||
"scheduleTwiceMonthly": "Zweimal monatlich",
|
||||
"scheduleMonthly": "Monatlich",
|
||||
"profileColor": "Profilfarbe",
|
||||
"workerNotes": "Notizen",
|
||||
"workerSavedToast": "Hauspflege-Profil gespeichert.",
|
||||
"staff": "Personal",
|
||||
"staffTitle": "Hauspflege-Personal",
|
||||
"addWorker": "Hauspflege hinzufügen",
|
||||
"editWorker": "Hauspflege bearbeiten",
|
||||
"noWorkers": "Noch keine Hauspflege-Person registriert.",
|
||||
"moreWorkers": "+{{count}} weitere",
|
||||
"checkInDisabled": "Lege zuerst eine Hauspflege-Person an.",
|
||||
"calendarColor": "Kalenderfarbe",
|
||||
"visitRecordedAt": "Visit recorded at",
|
||||
"checkedInToday": "Recorded today",
|
||||
"visitReports": "Staff visit reports",
|
||||
"noVisitReports": "No staff visits recorded this month.",
|
||||
"openVisitReport": "Open visit report",
|
||||
"visitReportDetails": "Visit report",
|
||||
"paymentPaid": "Paid",
|
||||
"paymentPending": "Pending",
|
||||
"totalPayment": "Total payment",
|
||||
"paymentStatus": "Payment status",
|
||||
"paymentTask": "Payment task",
|
||||
"calendarEvent": "Calendar event",
|
||||
"notAvailable": "Not available",
|
||||
"calendarVisitTitle": "Housekeeping: {{name}}",
|
||||
"paymentTaskTitle": "Pay {{name}} for housekeeping",
|
||||
"paymentTaskDescription": "Housekeeping visit on {{date}}. Amount due: {{amount}}.",
|
||||
"staffLogTitle": "{{name}} visits",
|
||||
"staffLogHint": "Edit visit dates, amounts, and linked records.",
|
||||
"filterMonth": "Month",
|
||||
"editVisit": "Edit visit",
|
||||
"deleteVisit": "Delete visit",
|
||||
"deleteVisitConfirm": "Delete this visit? The linked calendar event and payment task will also be removed.",
|
||||
"visitDeletedToast": "Visit deleted.",
|
||||
"visitSavedToast": "Visit updated.",
|
||||
"visitDate": "Visit date",
|
||||
"markPaid": "Mark paid",
|
||||
"visitPaidToast": "Payment marked as paid.",
|
||||
"receiptUploadTitle": "Upload payment receipt",
|
||||
"receiptUploadHint": "Attach a payment receipt. It will appear in Documents.",
|
||||
"receiptDocumentName": "Receipt - {{name}} - {{date}}",
|
||||
"receiptDocumentDescription": "Payment receipt for {{name}} housekeeping visit on {{date}}.",
|
||||
"taskTemplateData": {
|
||||
"cleanBathrooms": {
|
||||
"name": "Bäder reinigen",
|
||||
"area": "Bäder"
|
||||
},
|
||||
"mopKitchenFloor": {
|
||||
"name": "Küchenboden wischen",
|
||||
"area": "Küche"
|
||||
},
|
||||
"dustLivingRoom": {
|
||||
"name": "Wohnzimmer abstauben",
|
||||
"area": "Wohnzimmer"
|
||||
},
|
||||
"changeBedLinens": {
|
||||
"name": "Bettwäsche wechseln",
|
||||
"area": "Schlafzimmer"
|
||||
},
|
||||
"cleanRefrigerator": {
|
||||
"name": "Kühlschrank reinigen",
|
||||
"area": "Küche"
|
||||
},
|
||||
"cleanWindows": {
|
||||
"name": "Fenster putzen",
|
||||
"area": "Ganzes Haus"
|
||||
},
|
||||
"deepCleanOven": {
|
||||
"name": "Backofen gründlich reinigen",
|
||||
"area": "Küche"
|
||||
},
|
||||
"washOutdoor": {
|
||||
"name": "Balkon/Terrasse waschen",
|
||||
"area": "Außenbereich"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user