feat: add address book, fix email layout, update dependencies

- Address book with JMAP sync and local fallback (contacts CRUD,
  search/filter, composer autocomplete, i18n for 8 languages)
- Fix email layout: remove horizontal scroll, left-side clipping,
  and empty spaces from blocked external images in newsletters
- Update all dependencies to latest compatible versions
- Expand i18n from 3 to 8 languages (added ES, IT, DE, NL, PT)
- Upgrade Next.js to 16.1.6 for security patches
This commit is contained in:
Matthieu MALVACHE
2026-02-16 17:25:20 +01:00
committed by Matthieu MALVACHE
parent 5d60fe5186
commit 8a5bc9b88d
27 changed files with 2927 additions and 968 deletions
+54
View File
@@ -26,6 +26,7 @@
"search_placeholder": "Buscar correo...",
"storage": "Almacenamiento",
"sign_out": "Cerrar sesión",
"contacts": "Contactos",
"settings": "Configuración",
"loading_mailboxes": "Cargando buzones...",
"push_connected": "Actualizaciones en tiempo real activas",
@@ -742,5 +743,58 @@
"identity_short": "vía {name}",
"subaddress_tag": "+{tag}"
}
},
"contacts": {
"title": "Contactos",
"search_placeholder": "Buscar contactos...",
"create_new": "Nuevo contacto",
"empty_state": "No hay contactos",
"empty_search": "Ningún contacto coincide con tu búsqueda",
"delete_confirm": "¿Estás seguro de que quieres eliminar este contacto?",
"local_mode": "Los contactos se almacenan localmente (el servidor no soporta JMAP Contacts)",
"back_to_mail": "Volver al correo",
"detail": {
"emails": "Direcciones de correo",
"phones": "Números de teléfono",
"organizations": "Organizaciones",
"addresses": "Direcciones",
"notes": "Notas",
"no_contact_selected": "Selecciona un contacto para ver los detalles",
"created": "Creado",
"updated": "Última actualización"
},
"form": {
"create_title": "Nuevo contacto",
"edit_title": "Editar contacto",
"given_name": "Nombre",
"surname": "Apellido",
"email": "Correo",
"email_placeholder": "email@example.com",
"phone": "Teléfono",
"phone_placeholder": "+34 612 345 678",
"organization": "Organización",
"organization_placeholder": "Nombre de la empresa",
"note": "Notas",
"note_placeholder": "Agregar una nota...",
"context_work": "Trabajo",
"context_private": "Personal",
"add_email": "Agregar correo",
"add_phone": "Agregar teléfono",
"save": "Guardar",
"cancel": "Cancelar",
"creating": "Creando...",
"updating": "Actualizando...",
"name_required": "Se requiere al menos un nombre o apellido",
"email_invalid": "Introduce una dirección de correo válida",
"save_failed": "Error al guardar el contacto"
},
"toast": {
"created": "Contacto creado",
"updated": "Contacto actualizado",
"deleted": "Contacto eliminado",
"error_create": "Error al crear el contacto",
"error_update": "Error al actualizar el contacto",
"error_delete": "Error al eliminar el contacto"
}
}
}