feat: birthday tracking, dashboard KPIs, and app name customization (#88)
- Add Birthdays module: CRUD with calendar/reminder auto-sync, photo upload, age notes - Add DB migration 18 (birthdays table with calendar_event_id, trigger, indexes) - Add dashboard widgets: birthdays, family participants, budget overview - Add Settings > General: admins can set a custom app name (reflected in title/sidebar/login) - Improve service worker: network-first caching for mutable JS/CSS assets - Add translations for 16 locales (birthday keys) Fixes applied during integration: - innerHTML replaced with insertAdjacentHTML/replaceChildren throughout birthdays.js and dashboard.js - docker-compose.yml personal dev changes reverted Co-authored-by: Rafael Foster <rafaelgfoster@gmail.com> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
"shopping": "Einkauf",
|
||||
"notes": "Notizen",
|
||||
"contacts": "Kontakte",
|
||||
"birthdays": "Geburtstage",
|
||||
"budget": "Budget",
|
||||
"settings": "Einstellungen",
|
||||
"main": "Hauptnavigation",
|
||||
@@ -88,6 +89,19 @@
|
||||
"allDay": "Ganztägig",
|
||||
"shoppingMore": "+{{count}} weitere",
|
||||
"weather": "Wetter",
|
||||
"familyMembers": "Familienmitglieder",
|
||||
"participantsAdded": "Teilnehmer hinzugefügt",
|
||||
"upcomingBirthdays": "Nächste Geburtstage",
|
||||
"noBirthdays": "Noch keine Geburtstage",
|
||||
"daysLeft": "{{count}} Tage",
|
||||
"budgetOverview": "Budgetübersicht",
|
||||
"monthlyIncome": "Einnahmen",
|
||||
"monthlyExpenses": "Ausgaben",
|
||||
"monthlyBalance": "Saldo",
|
||||
"savingsRate": "Sparquote",
|
||||
"topExpense": "Größte Ausgabe",
|
||||
"budgetEntries": "Einträge",
|
||||
"noBudgetData": "Keine Budgetdaten in diesem Monat.",
|
||||
"customize": "Anpassen",
|
||||
"customizeTitle": "Widgets anpassen",
|
||||
"customizeReset": "Standard",
|
||||
@@ -562,6 +576,7 @@
|
||||
"tabAccount": "Konto",
|
||||
"tabsAriaLabel": "Einstellungsbereiche",
|
||||
"sectionDesign": "Design",
|
||||
"sectionAppName": "Anwendungsname",
|
||||
"sectionShopping": "Einkauf",
|
||||
"shoppingCategoriesLabel": "Einkaufskategorien",
|
||||
"shoppingCategoriesHint": "Kategorien hinzufügen, umbenennen, löschen oder sortieren.",
|
||||
@@ -579,6 +594,16 @@
|
||||
"sectionCalendarSync": "Kalender-Synchronisation",
|
||||
"sectionFamily": "Familienmitglieder",
|
||||
"cardAppearance": "Darstellung",
|
||||
"appNameTitle": "App-Name",
|
||||
"appNameLabel": "Anwendungsname",
|
||||
"appNameHint": "Dieser Name erscheint in der Seitenleiste, im Browser-Titel und auf dem Login-Bildschirm.",
|
||||
"appNamePlaceholder": "Oikos",
|
||||
"appNameSavedToast": "Anwendungsname gespeichert.",
|
||||
"sectionDate": "Datum",
|
||||
"dateFormatTitle": "Datumsformat",
|
||||
"dateFormatLabel": "Bevorzugtes Datumsformat",
|
||||
"dateFormatHint": "Wähle, wie Daten in der App angezeigt werden.",
|
||||
"dateFormatSavedToast": "Datumsformat gespeichert.",
|
||||
"themeSystem": "System",
|
||||
"themeSysLabel": "System-Einstellung verwenden",
|
||||
"themeLight": "Hell",
|
||||
@@ -776,6 +801,35 @@
|
||||
"pendingBadgeTitle": "{{count}} fällige Erinnerung",
|
||||
"pendingBadgeTitlePlural": "{{count}} fällige Erinnerungen"
|
||||
},
|
||||
"birthdays": {
|
||||
"title": "Geburtstage",
|
||||
"addButton": "Geburtstag hinzufügen",
|
||||
"searchPlaceholder": "Geburtstage suchen…",
|
||||
"upcomingTitle": "Nächste Geburtstage",
|
||||
"upcomingHint": "Die nächsten Feiern, bereits mit Kalender und Erinnerungen verknüpft.",
|
||||
"peopleTitle": "Personen",
|
||||
"peopleHint": "Alle gespeicherten Geburtstage durchsuchen, prüfen und bearbeiten.",
|
||||
"emptyTitle": "Noch keine Geburtstage",
|
||||
"emptyDescription": "Füge einen Geburtstag hinzu, damit er im Kalender und bei Erinnerungen erscheint.",
|
||||
"newTitle": "Neuer Geburtstag",
|
||||
"editTitle": "Geburtstag bearbeiten",
|
||||
"nameLabel": "Name",
|
||||
"birthDateLabel": "Geburtsdatum",
|
||||
"photoLabel": "Profilbild",
|
||||
"photoOptional": "Optional: Du kannst auch ohne Profilbild speichern.",
|
||||
"removePhoto": "Bild entfernen",
|
||||
"notesLabel": "Notizen",
|
||||
"notesPlaceholder": "Geschenkideen, Lieblingskuchen, Familiennotizen…",
|
||||
"calendarHint": "Jeder Geburtstag wird automatisch zum Kalender und Erinnerungssystem hinzugefügt.",
|
||||
"requiredFields": "Name und Geburtsdatum sind erforderlich.",
|
||||
"createdToast": "Geburtstag gespeichert.",
|
||||
"updatedToast": "Geburtstag aktualisiert.",
|
||||
"deletedToast": "Geburtstag gelöscht.",
|
||||
"deleteConfirm": "Geburtstag von \"{{name}}\" löschen?",
|
||||
"ageNoteToday": "Wird heute {{age}} Jahre alt.",
|
||||
"ageNoteTomorrow": "Wird morgen {{age}} Jahre alt.",
|
||||
"ageNoteDays": "Wird in {{days}} Tagen {{age}} Jahre alt."
|
||||
},
|
||||
"recipes": {
|
||||
"title": "Rezepte",
|
||||
"addRecipe": "Rezept hinzufügen",
|
||||
|
||||
Reference in New Issue
Block a user