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": "Compras",
|
||||
"notes": "Notas",
|
||||
"contacts": "Contactos",
|
||||
"birthdays": "Cumpleaños",
|
||||
"budget": "Presupuesto",
|
||||
"settings": "Ajustes",
|
||||
"main": "Navegación principal",
|
||||
@@ -82,6 +83,19 @@
|
||||
"allDay": "Todo el día",
|
||||
"shoppingMore": "+{{count}} más",
|
||||
"weather": "Clima",
|
||||
"familyMembers": "Miembros de la familia",
|
||||
"participantsAdded": "participantes añadidos",
|
||||
"upcomingBirthdays": "Próximos cumpleaños",
|
||||
"noBirthdays": "Aún no hay cumpleaños",
|
||||
"daysLeft": "{{count}} días",
|
||||
"budgetOverview": "Resumen del presupuesto",
|
||||
"monthlyIncome": "Ingresos",
|
||||
"monthlyExpenses": "Gastos",
|
||||
"monthlyBalance": "Saldo",
|
||||
"savingsRate": "Tasa de ahorro",
|
||||
"topExpense": "Mayor gasto",
|
||||
"budgetEntries": "Movimientos",
|
||||
"noBudgetData": "No hay datos de presupuesto este mes.",
|
||||
"customize": "Personalizar",
|
||||
"customizeTitle": "Personalizar widgets",
|
||||
"customizeReset": "Restablecer",
|
||||
@@ -537,6 +551,7 @@
|
||||
"tabAccount": "Cuenta",
|
||||
"tabsAriaLabel": "Secciones de configuración",
|
||||
"sectionDesign": "Diseño",
|
||||
"sectionAppName": "Nombre de la aplicación",
|
||||
"sectionShopping": "Compras",
|
||||
"shoppingCategoriesLabel": "Categorías de compra",
|
||||
"shoppingCategoriesHint": "Añade, renombra, elimina u ordena las categorías.",
|
||||
@@ -554,6 +569,16 @@
|
||||
"sectionCalendarSync": "Sincronización de calendario",
|
||||
"sectionFamily": "Miembros de la familia",
|
||||
"cardAppearance": "Apariencia",
|
||||
"appNameTitle": "Nombre de la app",
|
||||
"appNameLabel": "Nombre de la aplicación",
|
||||
"appNameHint": "Este nombre aparece en la barra lateral, el título del navegador y la pantalla de inicio de sesión.",
|
||||
"appNamePlaceholder": "Oikos",
|
||||
"appNameSavedToast": "Nombre de la aplicación guardado.",
|
||||
"sectionDate": "Fecha",
|
||||
"dateFormatTitle": "Formato de fecha",
|
||||
"dateFormatLabel": "Formato de fecha preferido",
|
||||
"dateFormatHint": "Elige cómo se muestran las fechas en toda la app.",
|
||||
"dateFormatSavedToast": "Formato de fecha guardado.",
|
||||
"themeSystem": "Sistema",
|
||||
"themeSysLabel": "Usar configuración del sistema",
|
||||
"themeLight": "Claro",
|
||||
@@ -760,6 +785,34 @@
|
||||
"placeholder": "Buscar…",
|
||||
"noResults": "No se encontraron resultados."
|
||||
},
|
||||
"birthdays": {
|
||||
"title": "Cumpleaños",
|
||||
"addButton": "Añadir cumpleaños",
|
||||
"searchPlaceholder": "Buscar cumpleaños…",
|
||||
"upcomingTitle": "Próximos cumpleaños",
|
||||
"upcomingHint": "Las próximas celebraciones, ya sincronizadas con el calendario.",
|
||||
"peopleTitle": "Personas",
|
||||
"peopleHint": "Busca, revisa y edita todos los cumpleaños guardados.",
|
||||
"emptyTitle": "Todavía no hay cumpleaños",
|
||||
"emptyDescription": "Añade un cumpleaños para mantenerlo visible en el calendario y en los recordatorios.",
|
||||
"newTitle": "Nuevo cumpleaños",
|
||||
"editTitle": "Editar cumpleaños",
|
||||
"nameLabel": "Nombre",
|
||||
"birthDateLabel": "Fecha de nacimiento",
|
||||
"photoLabel": "Foto de perfil",
|
||||
"removePhoto": "Eliminar foto",
|
||||
"notesLabel": "Notas",
|
||||
"notesPlaceholder": "Ideas de regalo, tarta favorita, notas familiares…",
|
||||
"calendarHint": "Cada cumpleaños se añade automáticamente al calendario y al sistema de recordatorios.",
|
||||
"requiredFields": "El nombre y la fecha de nacimiento son obligatorios.",
|
||||
"createdToast": "Cumpleaños guardado.",
|
||||
"updatedToast": "Cumpleaños actualizado.",
|
||||
"deletedToast": "Cumpleaños eliminado.",
|
||||
"deleteConfirm": "¿Eliminar el cumpleaños de \"{{name}}\"?",
|
||||
"ageNoteToday": "Cumple {{age}} años hoy.",
|
||||
"ageNoteTomorrow": "Cumple {{age}} años mañana.",
|
||||
"ageNoteDays": "Cumplirá {{age}} años en {{days}} días."
|
||||
},
|
||||
"reminders": {
|
||||
"sectionTitle": "Recordatorio",
|
||||
"enableLabel": "Establecer recordatorio",
|
||||
|
||||
Reference in New Issue
Block a user