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": "Courses",
|
||||
"notes": "Notes",
|
||||
"contacts": "Contacts",
|
||||
"birthdays": "Anniversaires",
|
||||
"budget": "Budget",
|
||||
"settings": "Paramètres",
|
||||
"main": "Navigation principale",
|
||||
@@ -82,6 +83,19 @@
|
||||
"allDay": "Toute la journée",
|
||||
"shoppingMore": "+{{count}} de plus",
|
||||
"weather": "Météo",
|
||||
"familyMembers": "Membres de la famille",
|
||||
"participantsAdded": "participants ajoutés",
|
||||
"upcomingBirthdays": "Prochains anniversaires",
|
||||
"noBirthdays": "Aucun anniversaire pour l'instant",
|
||||
"daysLeft": "{{count}} jours",
|
||||
"budgetOverview": "Aperçu du budget",
|
||||
"monthlyIncome": "Revenus",
|
||||
"monthlyExpenses": "Dépenses",
|
||||
"monthlyBalance": "Solde",
|
||||
"savingsRate": "Taux d'épargne",
|
||||
"topExpense": "Plus grosse dépense",
|
||||
"budgetEntries": "Écritures",
|
||||
"noBudgetData": "Aucune donnée de budget ce mois-ci.",
|
||||
"customize": "Personnaliser",
|
||||
"customizeTitle": "Personnaliser les widgets",
|
||||
"customizeReset": "Réinitialiser",
|
||||
@@ -537,6 +551,7 @@
|
||||
"tabAccount": "Compte",
|
||||
"tabsAriaLabel": "Sections des paramètres",
|
||||
"sectionDesign": "Apparence",
|
||||
"sectionAppName": "Nom de l'application",
|
||||
"sectionShopping": "Courses",
|
||||
"shoppingCategoriesLabel": "Catégories de courses",
|
||||
"shoppingCategoriesHint": "Ajoutez, renommez, supprimez ou réorganisez les catégories.",
|
||||
@@ -554,6 +569,16 @@
|
||||
"sectionCalendarSync": "Synchronisation du calendrier",
|
||||
"sectionFamily": "Membres de la famille",
|
||||
"cardAppearance": "Affichage",
|
||||
"appNameTitle": "Nom de l'application",
|
||||
"appNameLabel": "Nom de l'application",
|
||||
"appNameHint": "Ce nom apparaît dans la barre latérale, le titre du navigateur et l'écran de connexion.",
|
||||
"appNamePlaceholder": "Oikos",
|
||||
"appNameSavedToast": "Nom de l'application enregistré.",
|
||||
"sectionDate": "Date",
|
||||
"dateFormatTitle": "Format de date",
|
||||
"dateFormatLabel": "Format de date préféré",
|
||||
"dateFormatHint": "Choisissez comment les dates sont affichées dans l'application.",
|
||||
"dateFormatSavedToast": "Format de date enregistré.",
|
||||
"themeSystem": "Système",
|
||||
"themeSysLabel": "Utiliser le paramètre système",
|
||||
"themeLight": "Clair",
|
||||
@@ -760,6 +785,34 @@
|
||||
"placeholder": "Rechercher…",
|
||||
"noResults": "Aucun résultat trouvé."
|
||||
},
|
||||
"birthdays": {
|
||||
"title": "Anniversaires",
|
||||
"addButton": "Ajouter un anniversaire",
|
||||
"searchPlaceholder": "Rechercher des anniversaires…",
|
||||
"upcomingTitle": "Prochains anniversaires",
|
||||
"upcomingHint": "Les prochaines célébrations, déjà synchronisées avec le calendrier.",
|
||||
"peopleTitle": "Personnes",
|
||||
"peopleHint": "Recherchez, vérifiez et modifiez tous les anniversaires enregistrés.",
|
||||
"emptyTitle": "Aucun anniversaire pour le moment",
|
||||
"emptyDescription": "Ajoutez un anniversaire pour le garder visible dans le calendrier et les rappels.",
|
||||
"newTitle": "Nouvel anniversaire",
|
||||
"editTitle": "Modifier l'anniversaire",
|
||||
"nameLabel": "Nom",
|
||||
"birthDateLabel": "Date de naissance",
|
||||
"photoLabel": "Photo de profil",
|
||||
"removePhoto": "Supprimer la photo",
|
||||
"notesLabel": "Notes",
|
||||
"notesPlaceholder": "Idées de cadeaux, gâteau préféré, notes familiales…",
|
||||
"calendarHint": "Chaque anniversaire est automatiquement ajouté au calendrier et au système de rappels.",
|
||||
"requiredFields": "Le nom et la date de naissance sont obligatoires.",
|
||||
"createdToast": "Anniversaire enregistré.",
|
||||
"updatedToast": "Anniversaire mis à jour.",
|
||||
"deletedToast": "Anniversaire supprimé.",
|
||||
"deleteConfirm": "Supprimer l'anniversaire de \"{{name}}\" ?",
|
||||
"ageNoteToday": "Fête ses {{age}} ans aujourd'hui.",
|
||||
"ageNoteTomorrow": "Fêtera ses {{age}} ans demain.",
|
||||
"ageNoteDays": "Fêtera ses {{age}} ans dans {{days}} jours."
|
||||
},
|
||||
"reminders": {
|
||||
"sectionTitle": "Rappel",
|
||||
"enableLabel": "Définir un rappel",
|
||||
|
||||
Reference in New Issue
Block a user