diff --git a/src/lib/i18n/es.json b/src/lib/i18n/es.json new file mode 100644 index 0000000..90615e9 --- /dev/null +++ b/src/lib/i18n/es.json @@ -0,0 +1,1863 @@ +{ + "navigation.compose": "Redactar", + "navigation.inbox": "Bandeja de entrada", + "navigation.starred": "Destacados", + "navigation.snoozed": "Pospuestos", + "navigation.sent": "Enviados", + "navigation.drafts": "Borradores", + "navigation.archived": "Archivados", + "navigation.spam": "Spam", + "navigation.trash": "Papelera", + "navigation.more": "Más...", + "navigation.less": "Mostrar menos...", + "navigation.folders": "Carpetas", + "navigation.noFolders": "Aún no hay carpetas", + "navigation.createFolder": "Crear carpeta", + "navigation.folderDescription": "Añade una carpeta al buzón seleccionado.", + "navigation.folderName": "Nombre de la carpeta", + "navigation.folderExample": "Recibos", + "navigation.color": "Color", + "navigation.folderColor": "Color de la carpeta", + "navigation.creating": "Creando...", + "navigation.expandMenu": "Expandir menú", + "navigation.collapseMenu": "Contraer menú", + "navigation.openMenu": "Abrir menú", + "navigation.close": "Cerrar", + "navigation.shortcuts": "Atajos", + "navigation.poweredBy": "Con tecnología de", + "color.blue": "Azul", + "color.purple": "Morado", + "color.pink": "Rosa", + "color.red": "Rojo", + "color.orange": "Naranja", + "color.amber": "Ámbar", + "color.green": "Verde", + "color.teal": "Verde azulado", + "language.label": "Idioma", + "common.archive": "Archivar", + "common.unarchive": "Desarchivar", + "common.notSpam": "No es spam", + "common.reportSpam": "Denunciar spam", + "common.restore": "Restaurar", + "common.delete": "Eliminar", + "common.deleteForever": "Eliminar definitivamente", + "common.markRead": "Marcar como leído", + "common.markUnread": "Marcar como no leído", + "common.moveSelected": "Mover los mensajes seleccionados", + "common.moveTo": "Mover a", + "common.clearSelection": "Borrar selección", + "common.moreActions": "Más acciones", + "common.selectedCount": "{count} seleccionado(s)", + "common.chooseBulkAction": "Elige una acción para aplicar a los correos seleccionados.", + "common.trash": "Papelera", + "common.snooze": "Posponer", + "common.unsnooze": "Quitar aplazamiento", + "common.snoozing": "Posponiendo...", + "snooze.title": "Posponer correo", + "snooze.description": "Oculta este correo de la bandeja de entrada hasta la hora que elijas.", + "snooze.selectDateTime": "Selecciona fecha y hora ({timeZone})", + "snooze.failed": "No se pudo posponer el mensaje", + "thread.messagesCollapsed.older.one": "{count} mensaje anterior", + "thread.messagesCollapsed.older.other": "{count} mensajes anteriores", + "thread.messagesCollapsed.newer.one": "{count} mensaje más reciente", + "thread.messagesCollapsed.newer.other": "{count} mensajes más recientes", + "thread.earlier": "Mensajes anteriores de esta conversación", + "thread.later": "Mensajes posteriores de esta conversación", + "thread.expand": "Expandir {label}", + "thread.to": "para {recipients}", + "thread.noPreview": "Sin vista previa", + "thread.attachmentCount.one": "{count} archivo adjunto", + "thread.attachmentCount.other": "{count} archivos adjuntos", + "snooze.tomorrow": "Mañana", + "snooze.nextWeek": "La próxima semana", + "snooze.nextMonth": "El próximo mes", + "message.reply": "Responder", + "message.replyAll": "Responder a todos", + "message.forward": "Reenviar", + "message.showOriginal": "Mostrar original", + "message.blockContact": "Bloquear contacto", + "message.star": "Destacar", + "message.removeStar": "Quitar destacado", + "message.error.star": "No se pudo actualizar el destacado", + "message.error.reply": "No se pudo iniciar la respuesta", + "message.error.forward": "No se pudo iniciar el reenvío", + "message.error.update": "No se pudo actualizar el mensaje", + "message.error.block": "No se pudo bloquear el contacto", + "message.nav.newer": "Correo más reciente", + "message.nav.older": "Correo más antiguo", + "message.nav.unreadPosition": "{position} de {total} sin leer", + "message.nav.backTo": "Volver a {folder}", + "message.nav.hideList": "Ocultar lista de correos", + "message.nav.showList": "Mostrar lista de correos", + "message.nav.listUnavailable": "Lista de correos no disponible", + "message.quote.toggle": "Alternar correo citado", + "message.quote.title": "Mostrar u ocultar el correo citado", + "message.spam.unavailable": "Análisis de spam no disponible", + "message.spam.score": "Puntuación de spam: {score} · {verdict}", + "message.spam.inbox": "bandeja de entrada", + "message.spam.failed": "El filtro no pudo analizar este mensaje. Se entregó con normalidad.", + "message.spam.why": "Por qué Mailflare dio esta puntuación", + "message.spam.none": "No se encontraron señales de spam relevantes.", + "source.title": "Mensaje original", + "source.description": "Detalles del mensaje y código fuente completo, incluidos los encabezados y el cuerpo MIME.", + "source.loading": "Cargando código fuente…", + "source.loadFailed": "No se pudo cargar el mensaje original", + "source.messageId": "ID del mensaje", + "source.createdAt": "Creado el", + "source.from": "De", + "source.to": "Para", + "source.subject": "Asunto", + "source.unavailable": "No disponible", + "source.passed": "{method} correcto", + "source.noResult": "Sin resultado en los encabezados del mensaje", + "source.download": "Descargar original", + "source.couldNotCopy": "No se pudo copiar", + "source.copied": "Copiado", + "source.copy": "Copiar al portapapeles", + "actions.error.update": "No se pudo actualizar el mensaje", + "actions.error.delete": "No se pudo eliminar el mensaje", + "actions.error.trashRule": "No se pudo crear la regla de papelera", + "actions.moveToTrash": "Mover a la papelera", + "actions.moveToTrashHint": "Mover a la papelera (#)", + "actions.archiveHint": "Archivar (e)", + "actions.reportSpamHint": "Denunciar spam (!)", + "actions.deleteHint": "Eliminar (#)", + "actions.replyHint": "Responder (r)", + "actions.unsubscribe": "Cancelar suscripción", + "shortcut.archiveMessage": "Archivar mensaje", + "shortcut.moveToTrash": "Mover a la papelera", + "shortcut.replyToMessage": "Responder al mensaje", + "shortcut.reportSpam": "Denunciar spam", + "shortcut.backToList": "Volver a la lista", + "folder.empty.inbox": "Sin correos", + "folder.empty.starred": "Sin correos destacados", + "folder.empty.snoozed": "Sin correos pospuestos", + "folder.empty.archived": "Sin correos archivados", + "folder.empty.spam": "Sin spam", + "folder.empty.trash": "Sin correos en la papelera", + "list.noMatch": "Ningún mensaje coincide con estos filtros", + "list.draft": "Borrador", + "list.unknownSender": "Remitente desconocido", + "list.noRecipient": "Sin destinatario", + "list.noContent": "Sin contenido", + "list.noSubject": "(sin asunto)", + "list.markUnread": "Marcar como no leído", + "list.markRead": "Marcar como leído", + "list.starred": "Destacado", + "list.notStarred": "Sin destacar", + "list.selectFrom": "Seleccionar mensaje de {sender}", + "list.selectMessage": "Seleccionar mensaje", + "list.selectAll": "Seleccionar todos los mensajes visibles", + "list.range": "{start} - {end} de {total}", + "list.previousPage": "Página anterior", + "list.nextPage": "Página siguiente", + "list.showingUnread": "Mostrando correos sin leer", + "list.showUnreadOnly": "Mostrar solo correos sin leer", + "list.emptying": "Vaciando…", + "list.emptyFolder": "Vaciar {folder}", + "list.emptyFailed": "No se pudo vaciar {folder}. Inténtalo de nuevo.", + "delete.confirm.one": "¿Eliminar definitivamente este mensaje? Esta acción no se puede deshacer.", + "delete.confirm.other": "¿Eliminar definitivamente estos {count} mensajes? Esta acción no se puede deshacer.", + "empty.confirm.single": "¿Eliminar definitivamente el único mensaje de {folder}? Esta acción no se puede deshacer.", + "empty.confirm.multiple": "¿Eliminar definitivamente los {count} mensajes de {folder}? Esta acción no se puede deshacer.", + "empty.confirm.all": "¿Eliminar definitivamente todos los mensajes de {folder}? Esta acción no se puede deshacer.", + "error.updateSelected": "No se pudieron actualizar los mensajes seleccionados", + "error.emptyFolder": "No se pudo vaciar la carpeta", + "list.resize": "Cambiar el tamaño de la lista de mensajes", + "compose.error.loadDraft": "No se pudo cargar el borrador", + "compose.error.noRecipient": "Añade al menos un destinatario", + "compose.error.invalidAddress": "\"{address}\" no es una dirección de correo válida", + "compose.error.emptyBody": "Escribe un mensaje antes de enviar", + "compose.error.draftAttachments": "No se pudieron añadir los archivos adjuntos al borrador", + "compose.error.saveForReview": "No se pudo guardar el borrador para su revisión", + "compose.error.aiMetadata": "Faltan los metadatos del borrador de IA", + "compose.error.createReview": "No se pudo crear la revisión", + "compose.error.reviewDraft": "No se pudo revisar el borrador", + "compose.error.sendFailed": "Error al enviar", + "compose.error.deleteDraft": "No se pudo eliminar el borrador", + "compose.error.removeAttachment": "No se pudo quitar el archivo adjunto", + "compose.error.maxAttachments": "Un mensaje puede incluir como máximo 10 archivos adjuntos", + "compose.error.attachmentSize": "Cada archivo adjunto debe pesar {max} MB o menos", + "compose.error.totalSize": "Los archivos adjuntos deben sumar {max} MB o menos", + "compose.scheduled": "Mensaje programado", + "compose.sent": "Mensaje enviado", + "compose.carriedOver": "Procedente del mensaje reenviado", + "compose.removeAttachment": "Quitar archivo adjunto", + "compose.cloudWarning.will": "Cloudflare limita los correos generales a 5 MiB, incluida la codificación. Los archivos de más de 3 MB se enviarán aquí como enlaces de descarga R2 válidos durante 30 días.", + "compose.cloudWarning.may": "Cloudflare limita los correos generales a 5 MiB, incluida la codificación. Los archivos de más de 3 MB o que superen el límite del mensaje pueden enviarse como enlaces de descarga R2 válidos durante 30 días.", + "compose.dialogLabel": "Redactar mensaje", + "compose.dropFiles": "Suelta los archivos para adjuntarlos", + "compose.title.loading": "Cargando borrador", + "compose.title.reply": "Respuesta", + "compose.title.forward": "Reenvío", + "compose.title.saved": "Borrador guardado", + "compose.title.new": "Mensaje nuevo", + "compose.restore": "Restaurar editor", + "compose.minimize": "Minimizar editor", + "compose.restoreFloating": "Restaurar editor flotante", + "compose.openModal": "Abrir editor en ventana modal", + "compose.close": "Cerrar editor", + "compose.from": "De", + "compose.selectMailboxFirst": "Primero selecciona un buzón", + "compose.to": "Para", + "compose.toPlaceholder": "Destinatarios, o \"Maya Chen\" ", + "compose.cc": "Cc", + "compose.bcc": "Cco", + "compose.ccPlaceholder": "Con copia", + "compose.bccPlaceholder": "Con copia oculta, invisible para los demás destinatarios", + "compose.subject": "Asunto", + "compose.body": "Cuerpo", + "compose.bodyPlaceholder": "Escribe tu mensaje", + "compose.preparing": "Preparando…", + "compose.schedule": "Programar", + "compose.reviewSend": "Revisar envío", + "compose.send": "Enviar", + "compose.attachTooltip": "Adjuntar archivos (hasta {max} MB en total). Los archivos de más de 3 MB se envían como enlaces de descarga R2 válidos durante 30 días.", + "compose.attachFiles": "Adjuntar archivos", + "compose.deleteDraft": "Eliminar borrador", + "editor.bold": "Negrita (⌘B)", + "editor.italic": "Cursiva (⌘I)", + "editor.underline": "Subrayado (⌘U)", + "editor.strikethrough": "Tachado", + "editor.bulletedList": "Lista con viñetas", + "editor.numberedList": "Lista numerada", + "editor.quote": "Cita", + "editor.messageBody": "Cuerpo del mensaje", + "editor.hideQuoted": "Ocultar texto citado", + "editor.showQuoted": "Mostrar texto citado", + "editor.insertLinkHint": "Insertar enlace (⌘K)", + "editor.insertLink": "Insertar enlace", + "editor.clearFormatting": "Borrar formato", + "editor.apply": "Aplicar", + "schedule.optionsLabel": "Opciones de envío programado", + "schedule.heading": "Programar", + "schedule.clear": "Quitar programación", + "schedule.pick": "Elegir fecha y hora ({timeZone})", + "schedule.laterToday": "Más tarde hoy", + "schedule.in3Hours": "En 3 horas", + "schedule.tomorrowMorning": "Mañana por la mañana", + "schedule.mondayMorning": "Lunes por la mañana", + "template.menu": "Plantilla", + "template.none": "Aún no hay plantillas", + "template.untitled": "Sin título", + "template.delete": "Eliminar plantilla", + "template.new": "Nueva plantilla", + "template.title": "Título", + "template.content": "Contenido", + "template.saving": "Guardando…", + "template.save": "Guardar plantilla", + "template.saveFailed": "No se pudo guardar la plantilla", + "recipient.remove": "Quitar {address}", + "search.mail": "Buscar correos", + "search.mailHint": "Buscar correos (pulsa / para enfocar)", + "search.clear": "Borrar búsqueda", + "search.openPalette": "Abrir la paleta de comandos (⌘K)", + "notification.newEmail": "Correo nuevo", + "notification.from": "De {sender}", + "notification.dismiss": "Descartar notificación", + "attachment.image": "Imagen", + "attachment.video": "Vídeo", + "attachment.audio": "Audio", + "attachment.pdf": "PDF", + "attachment.spreadsheet": "Hoja de cálculo", + "attachment.presentation": "Presentación", + "attachment.archive": "Archivo comprimido", + "attachment.code": "Código", + "attachment.document": "Documento", + "attachment.file": "Archivo", + "attachment.loadFailed": "No se pudo cargar este archivo adjunto", + "attachment.unsupported": "Este tipo de archivo no se puede previsualizar de forma segura en el navegador.", + "attachment.download": "Descargar", + "auth.logout": "Cerrar sesión", + "license.upgrade": "Mejorar plan", + "contact.title": "Detalles del contacto", + "contact.description": "Actualiza cómo aparece este contacto en tu buzón.", + "contact.name": "Nombre", + "contact.email": "Correo electrónico", + "contact.source": "Origen", + "contact.sourceEmail": "Correo electrónico", + "contact.lastSeen": "Visto por última vez", + "contact.unknown": "Desconocido", + "contact.blocked": "Contacto bloqueado", + "contact.save": "Guardar contacto", + "contact.saving": "Guardando...", + "contact.loadFailed": "No se pudo cargar el contacto", + "contact.updateFailed": "No se pudo actualizar el contacto", + "avatar.change": "Cambiar la foto de perfil de {name}", + "avatar.upload": "Subir la foto de perfil de {name}", + "avatar.title": "Foto de perfil", + "avatar.contactHint": "Sube una foto personalizada para el contacto.", + "avatar.remove": "Quitar foto", + "avatar.uploadFailed": "Error al subir", + "avatar.removeFailed": "No se pudo quitar la foto de perfil", + "account.sharedInbox": "Bandeja compartida", + "account.openMenu": "Abrir menú de la cuenta", + "account.fallbackName": "Cuenta", + "account.calendar": "Calendario", + "account.settings": "Configuración", + "account.inboxes": "Bandejas ({count})", + "account.otherAccounts": "Otras cuentas", + "account.admin": "Administración", + "account.addAnother": "Añadir otra cuenta", + "account.signOut": "Cerrar sesión", + "account.profilePicture": "Foto de perfil de {name}", + "nav.loading": "Cargando", + "admin.nav.overview": "Resumen", + "admin.nav.email": "Correo", + "admin.nav.mailboxes": "Buzones", + "admin.nav.domains": "Dominios", + "admin.nav.routing": "Enrutamiento", + "admin.nav.webhooks": "Webhooks", + "admin.nav.administration": "Administración", + "admin.nav.apiKeys": "Claves de API", + "admin.nav.general": "General", + "admin.nav.agent": "Agente", + "admin.nav.accounts": "Cuentas", + "admin.nav.activity": "Actividad", + "admin.nav.backups": "Copias de seguridad", + "admin.nav.product": "Producto", + "admin.nav.branding": "Marca", + "admin.nav.licenses": "Licencias", + "settings.nav.menu": "Menú de configuración", + "settings.nav.settings": "Configuración", + "settings.nav.account": "Cuenta", + "settings.nav.inbox": "Bandeja de entrada", + "settings.nav.security": "Seguridad", + "settings.nav.apiKeys": "Claves de API", + "settings.nav.appPasswords": "Contraseñas de aplicación", + "settings.nav.rules": "Reglas y enrutamiento", + "settings.nav.mailbox": "Buzón", + "settings.nav.import": "Importar", + "settings.nav.export": "Exportar", + "accountSettings.menu": "Menú de configuración de la cuenta", + "accountSettings.title": "Configuración de la cuenta", + "accountSettings.details": "Detalles", + "accountSettings.password": "Contraseña", + "accountSettings.permissions": "Permisos", + "accountSettings.mailboxes": "Buzones", + "shortcut.commandPalette": "Paleta de comandos", + "shortcut.cheatSheet": "Guía de atajos", + "shortcut.compose": "Redactar correo", + "shortcut.searchMail": "Buscar correos", + "shortcut.goInbox": "Ir a la bandeja de entrada", + "shortcut.goStarred": "Ir a Destacados", + "shortcut.goSnoozed": "Ir a Pospuestos", + "shortcut.goSent": "Ir a Enviados", + "shortcut.goDrafts": "Ir a Borradores", + "shortcut.goArchived": "Ir a Archivados", + "shortcut.goSpam": "Ir a Spam", + "shortcut.goTrash": "Ir a la Papelera", + "shortcut.dismiss": "Cerrar ventana / Quitar el foco", + "shortcut.category.Navigation": "Navegación", + "shortcut.category.Actions": "Acciones", + "shortcut.category.Composing": "Redacción", + "shortcut.category.Selection": "Selección", + "shortcut.category.General": "General", + "shortcut.category.Settings": "Configuración", + "shortcut.category.Mailboxes": "Buzones", + "palette.composeTitle": "Redactar mensaje nuevo", + "palette.composeSubtitle": "Abrir el editor de borradores", + "palette.accountTitle": "Configuración de la cuenta", + "palette.accountSubtitle": "Perfil, contraseña y preferencias", + "palette.helpTitle": "Guía de atajos de teclado", + "palette.helpSubtitle": "Ver todos los atajos", + "palette.placeholder": "Escribe un comando o busca acciones...", + "palette.noMatch": "No se encontraron comandos para “{query}”", + "palette.navigate": "para navegar", + "palette.select": "para seleccionar", + "palette.actions": "Acciones de Mailflare", + "shortcutsHelp.title": "Atajos de teclado", + "shortcutsHelp.subtitle": "Atajos rápidos al estilo de Superhuman y Gmail", + "shortcutsHelp.close": "Cerrar", + "shortcutsHelp.pressToToggle": "Pulsa {key} para alternar", + "shortcutsHelp.pressToClose": "Pulsa {key} para cerrar", + "shortcutsHelp.ctrl": "Ctrl", + "common.saved": "Guardado", + "common.saving": "Guardando...", + "common.name": "Nombre", + "common.cancel": "Cancelar", + "common.loading": "Cargando...", + "settings.account.loadFailed": "No se pudo cargar la cuenta", + "settings.account.detailsTitle": "Detalles de la cuenta", + "settings.account.detailsDescription": "Gestiona tu identidad, las opciones de recuperación y tus preferencias de correo.", + "settings.account.forwardingTitle": "Correo de reenvío", + "settings.account.forwardingDescription": "Envía una copia de los mensajes entrantes a otra dirección de correo.", + "settings.account.signatureTitle": "Firma de correo", + "settings.account.signatureDescription": "Configura la firma de la bandeja seleccionada arriba.", + "settings.profile.updateFailed": "No se pudo actualizar la cuenta", + "settings.profile.recoveryFailed": "No se pudo actualizar el correo de recuperación", + "settings.profile.pictureTitle": "Foto de perfil", + "settings.profile.pictureDescription": "Elige una foto para mostrar en toda tu cuenta.", + "settings.profile.currentEmail": "Correo actual", + "settings.profile.save": "Guardar perfil", + "settings.profile.recoveryTitle": "Correo de recuperación", + "settings.profile.recoveryDescription": "Se usa para recuperar el acceso si no puedes iniciar sesión.", + "settings.profile.emailAddress": "Dirección de correo", + "settings.profile.saveRecovery": "Guardar correo de recuperación", + "settings.password.mismatch": "Las contraseñas nuevas no coinciden", + "settings.password.changed": "Contraseña cambiada", + "settings.password.failed": "No se pudo cambiar la contraseña", + "settings.password.current": "Contraseña actual", + "settings.password.new": "Contraseña nueva", + "settings.password.confirm": "Confirmar contraseña nueva", + "settings.password.changing": "Cambiando...", + "settings.password.change": "Cambiar contraseña", + "settings.theme.system": "Igual que el sistema", + "settings.theme.light": "Claro", + "settings.theme.dark": "Oscuro", + "settings.theme.label": "Tema", + "settings.theme.description": "Usa una interfaz clara u oscura, o sigue la configuración del sistema. Se guarda en este navegador.", + "settings.notifications.title": "Notificaciones del navegador", + "settings.notifications.description": "Muestra una notificación de correo nuevo mientras Mailflare está abierto en una pestaña en segundo plano.", + "settings.notifications.saveFailed": "No se pudo guardar la preferencia de notificaciones en este navegador.", + "settings.notifications.enableFailed": "No se pudieron activar las notificaciones del navegador.", + "settings.notifications.enable": "Activar notificaciones del navegador", + "settings.notifications.blocked": "Las notificaciones están bloqueadas. Permítelas en la configuración del sitio de tu navegador para activar esta opción.", + "settings.notifications.unavailable": "Las notificaciones del navegador no están disponibles aquí.", + "settings.mailbox.updateFailed": "No se pudo actualizar el buzón", + "settings.mailbox.title": "Configuración", + "settings.mailbox.selectToView": "Selecciona un buzón para ver su configuración.", + "settings.mailbox.saveChanges": "Guardar cambios", + "settings.forwarding.failed": "No se pudo actualizar el correo de reenvío", + "settings.forwarding.destination": "Correo de destino", + "settings.forwarding.hint": "El correo entrante también se enviará a este destino verificado de Cloudflare Email Routing.", + "settings.forwarding.save": "Guardar reenvío", + "settings.signature.failed": "No se pudo actualizar la firma", + "settings.signature.loadingInbox": "Cargando bandeja…", + "settings.signature.selectInbox": "Selecciona una bandeja para configurar su firma.", + "settings.signature.for": "Firma de {address}", + "settings.signature.placeholder": "Tu nombre\nCargo o empresa\nDatos de contacto", + "settings.signature.hint": "Esta firma se añade al redactar desde la bandeja seleccionada. Se admite texto sin formato o HTML; el HTML se sanea.", + "settings.signature.preview": "Vista previa", + "settings.signature.save": "Guardar firma", + "settings.signature.needFullAccess": "Se necesita acceso total para editar esta firma.", + "settings.autoReply.needMessage": "Escribe un mensaje de respuesta automática antes de activarla.", + "settings.autoReply.failed": "No se pudo actualizar la respuesta automática", + "settings.autoReply.selectInbox": "Selecciona una bandeja para configurar la respuesta automática.", + "settings.autoReply.enableFor": "Activar la respuesta automática de {address}", + "settings.autoReply.limit": "Cada remitente recibe como máximo una respuesta automática cada 24 horas.", + "settings.autoReply.subject": "Asunto", + "settings.autoReply.subjectPlaceholder": "Fuera de la oficina", + "settings.autoReply.message": "Mensaje", + "settings.autoReply.messagePlaceholder": "Gracias por tu mensaje. Ahora mismo estoy ausente y responderé cuando vuelva.", + "settings.autoReply.save": "Guardar", + "settings.autoReply.needFullAccess": "Se necesita acceso total para editar la respuesta automática.", + "settings.timeZone.failed": "No se pudo guardar la zona horaria", + "settings.timeZone.title": "Zona horaria", + "settings.timeZone.description": "Elige la zona horaria que se usa para fechas, búsquedas y programaciones. Déjalo en blanco para seguir este dispositivo ({zone}).", + "settings.timeZone.placeholder": "Zona horaria del dispositivo ({zone})", + "settings.timeZone.current": "Hora actual: {time}", + "settings.timeZone.save": "Guardar zona horaria", + "common.done": "Listo", + "common.copied": "Copiado", + "common.password": "Contraseña", + "common.pleaseWait": "Espera...", + "common.continue": "Continuar", + "common.revoke": "Revocar", + "common.revoking": "Revocando…", + "common.none": "Ninguno", + "mfa.loadFailed": "No se pudo cargar", + "mfa.loading": "Cargando la configuración de verificación en dos pasos...", + "mfa.on": "La verificación en dos pasos está activada", + "mfa.off": "La verificación en dos pasos está desactivada", + "mfa.onDescription.one": "Al iniciar sesión se pide un código de tu aplicación de autenticación. Queda {count} código de recuperación.", + "mfa.onDescription.other": "Al iniciar sesión se pide un código de tu aplicación de autenticación. Quedan {count} códigos de recuperación.", + "mfa.offDescription": "Añade un segundo paso al iniciar sesión con una aplicación de autenticación como 1Password, Google Authenticator o Authy.", + "mfa.newRecoveryCodes": "Códigos de recuperación nuevos", + "mfa.turnOff": "Desactivar", + "mfa.turnOn": "Activar verificación en dos pasos", + "mfa.copyCodes": "Copiar códigos", + "mfa.codesHint": "Cada código funciona una sola vez. Guárdalos en un lugar seguro; son la única forma de entrar si pierdes tu autenticador.", + "mfa.startFailed": "No se pudo iniciar", + "mfa.confirmFailed": "No se pudo confirmar", + "mfa.enrollTitle": "Activar la verificación en dos pasos", + "mfa.enrollDescription": "Confirma tu contraseña para empezar.", + "mfa.scanTitle": "Escanea el código", + "mfa.scanDescription": "Abre tu aplicación de autenticación, añade una cuenta escaneando este código y escribe el código de 6 dígitos que muestra.", + "mfa.cantScan": "¿No puedes escanear? Escribe la clave manualmente", + "mfa.sixDigitCode": "Código de 6 dígitos", + "mfa.checking": "Comprobando...", + "mfa.verifyAndTurnOn": "Verificar y activar", + "mfa.saveCodesTitle": "Guarda tus códigos de recuperación", + "mfa.saveCodesDescription": "La verificación en dos pasos está activada. Se cerraron las demás sesiones.", + "mfa.turnOffFailed": "No se pudo desactivar", + "mfa.turnOffTitle": "Desactivar la verificación en dos pasos", + "mfa.turnOffDescription": "Confirma tu contraseña y un código actual o un código de recuperación.", + "mfa.code": "Código", + "mfa.generateFailed": "No se pudieron generar los códigos", + "mfa.newCodesTitle": "Tus nuevos códigos de recuperación", + "mfa.newCodesDescription": "Los códigos anteriores ya no funcionan.", + "mfa.generateTitle": "Generar códigos de recuperación nuevos", + "mfa.generateDescription": "Esto sustituye todos los códigos existentes. Confirma tu contraseña para continuar.", + "mfa.generate": "Generar", + "avatar.profile": "Perfil", + "avatar.changeShort": "Cambiar", + "avatar.uploadShort": "Subir", + "apiKeys.mcpRead.label": "Leer correo", + "apiKeys.mcpRead.description": "Listar, buscar y leer mensajes.", + "apiKeys.mcpDraft.label": "Gestionar borradores", + "apiKeys.mcpDraft.description": "Crear, editar y descartar borradores.", + "apiKeys.mcpOrganize.label": "Organizar correo", + "apiKeys.mcpOrganize.description": "Marcar mensajes como leídos y moverlos.", + "apiKeys.mcpRequestSend.label": "Solicitar revisión de envío", + "apiKeys.mcpRequestSend.description": "Proponer un envío que debes confirmar en Mailflare.", + "apiKeys.mcpCalendarRead.label": "Leer calendario", + "apiKeys.mcpCalendarRead.description": "Listar, buscar e inspeccionar eventos y horarios libres.", + "apiKeys.mcpCalendarWrite.label": "Gestionar calendario", + "apiKeys.mcpCalendarWrite.description": "Crear, actualizar y eliminar eventos.", + "apiKeys.read.label": "Leer correo", + "apiKeys.read.description": "Leer mensajes a través de la API.", + "apiKeys.send.label": "Enviar correo", + "apiKeys.send.description": "Enviar mensajes directamente a través de la API.", + "apiKeys.calendarRead.label": "Leer calendario", + "apiKeys.calendarRead.description": "Leer tus eventos del calendario a través de la API.", + "apiKeys.calendarWrite.label": "Gestionar calendario", + "apiKeys.calendarWrite.description": "Crear, actualizar y eliminar tus eventos del calendario a través de la API.", + "apiKeys.loadFailed": "No se pudieron cargar las claves de API", + "apiKeys.createFailed": "No se pudo crear la clave de API", + "apiKeys.revokeConfirm": "¿Revocar “{name}”? Las aplicaciones que usan esta clave perderán el acceso de inmediato.", + "apiKeys.revokeFailed": "No se pudo revocar la clave de API", + "apiKeys.title": "Claves de API", + "apiKeys.new": "Nueva clave de API", + "apiKeys.createdTitle": "Clave de API creada", + "apiKeys.createTitle": "Crear clave de API", + "apiKeys.copyNow": "Copia esta clave ahora. Solo se mostrará una vez.", + "apiKeys.nameAndAccess": "Ponle nombre a la clave y elige el acceso que necesita.", + "apiKeys.keyName": "Nombre de la clave", + "apiKeys.namePlaceholder": "Mi integración", + "apiKeys.allowMcp": "Permitir acceso MCP", + "apiKeys.allowMcpHint": "Usa esta clave con un cliente MCP. El envío sigue necesitando tu confirmación en Mailflare.", + "apiKeys.allowJmap": "Permitir acceso JMAP", + "apiKeys.jmapNeedsStandard": "El acceso JMAP requiere una clave de API estándar independiente.", + "apiKeys.jmapHint": "Lee y envía correo desde un cliente JMAP.", + "apiKeys.permissions": "Permisos", + "apiKeys.allowedMailboxes": "Buzones permitidos", + "apiKeys.noMailboxes": "No hay buzones accesibles.", + "apiKeys.aliasHint": "Los alias comparten el buzón principal y se incluyen con él.", + "apiKeys.creating": "Creando…", + "apiKeys.copyKey": "Copiar clave", + "apiKeys.description": "Crea claves para aplicaciones externas, elige sus permisos y buzones, y revoca el acceso desde aquí.", + "apiKeys.none": "Aún no hay claves de API", + "apiKeys.createdOn": "Creada el {date}", + "apiKeys.lastUsed": "Último uso: {date}", + "apiKeys.neverUsed": "Nunca usada", + "apiKeys.mailboxesLabel": "Buzones: {list}", + "apiKeys.allAccessible": "Todos los buzones accesibles (clave existente)", + "common.copy": "Copiar", + "common.copyLabel": "Copiar {label}", + "emailClients.defaultName": "Aplicación de correo", + "emailClients.createFailed": "No se pudo crear una clave", + "emailClients.description": "Contraseña de aplicación para clientes de correo compatibles con JMAP. Apunta la aplicación a este servidor e inicia sesión con tu dirección de correo y una clave de API como contraseña.", + "emailClients.server": "Servidor", + "emailClients.username": "Nombre de usuario", + "emailClients.anyValue": "cualquier valor", + "emailClients.passwordApiKey": "Contraseña (clave de API)", + "emailClients.shownOnce": "Esta clave se muestra una sola vez. Puedes revocarla en {link}. La detección de sesión está en {url}.", + "emailClients.deviceName": "Nombre del dispositivo o la aplicación", + "emailClients.devicePlaceholder": "Teléfono", + "emailClients.creating": "Creando...", + "emailClients.create": "Crear contraseña de aplicación", + "emailClients.mailboxesLegend": "Buzones que esta aplicación puede usar", + "emailClients.loadingMailboxes": "Cargando buzones...", + "emailClients.aliasLimit": "Los alias comparten el buzón principal y se incluyen con él. Hasta {max} buzones por clave.", + "import.failed": "Error al importar", + "import.title": "Importar correo", + "import.description": "Sube archivos .eml o .mbox exportados del origen {source}. Se guardarán en la sección correspondiente del buzón seleccionado.", + "import.filesLabel": "Archivos de exportación de correo", + "import.limits": "Importa hasta 100 mensajes y 25 MB por subida. Los valores Message-ID duplicados se omiten.", + "import.importing": "Importando...", + "import.submit": "Importar mensajes", + "import.summary": "{imported} importados, {skipped} omitidos", + "settings.reading.title": "Vista de lectura en dos columnas", + "settings.reading.description": "Muestra la lista de correos junto al correo abierto. Desactívala para leer los correos en una sola columna.", + "settings.shortcuts.title": "Atajos de teclado", + "settings.shortcuts.description": "Usa teclas rápidas para navegar, redactar y gestionar mensajes en esta cuenta.", + "settings.shortcuts.failed": "No se pudo actualizar la configuración de atajos", + "settings.shortcuts.enable": "Activar atajos de teclado", + "settings.threading.groupTitle": "Agrupar correos en conversaciones", + "settings.threading.groupDescription": "Muestra los mensajes relacionados juntos como una sola conversación en las listas de mensajes.", + "settings.threading.latestTitle": "Ordenar primero los mensajes más recientes", + "settings.threading.latestDescription": "Muestra el correo más reciente al principio de una conversación. Desactívalo para mostrarlo al final.", + "settings.spam.loadFailed": "No se pudo cargar la configuración del filtro de spam", + "settings.spam.updateFailed": "No se pudo actualizar la configuración del filtro de spam", + "settings.spam.title": "Filtro de spam", + "settings.spam.description": "Analiza localmente los mensajes entrantes y detecta spam con alta confianza", + "settings.spam.enable": "Activar filtro de spam", + "settings.trash.loadFailed": "No se pudo cargar la configuración de limpieza", + "settings.trash.updateFailed": "No se pudo actualizar la configuración de limpieza", + "settings.trash.title": "Eliminar automáticamente la Papelera y el Spam", + "settings.trash.description": "Elimina definitivamente los mensajes cuando llevan este tiempo en la Papelera o en Spam. Se aplica a los buzones de tu propiedad.", + "settings.trash.never": "Nunca", + "settings.trash.afterDay.one": "Después de {count} día", + "settings.trash.afterDay.other": "Después de {count} días", + "settings.recipient.title": "Mostrar las direcciones completas de los destinatarios", + "settings.recipient.description": "En Para, Cc y Cco, muestra Nombre cuando el mensaje incluye un nombre. Desactivado, muestra solo la dirección de correo. Esto sigue a tu inicio de sesión, en todos los buzones.", + "settings.recipient.failed": "No se pudo actualizar la configuración de direcciones de destinatarios", + "mcp.instructions": "Instrucciones para tu agente de IA", + "mcp.copyPrompt": "Copiar prompt", + "rules.field.email": "Dirección de correo", + "rules.field.content": "Contenido", + "rules.field.title": "Título", + "rules.operator.contains": "contiene", + "rules.operator.exact": "coincidencia exacta", + "rules.operatorOption.contains": "Contiene", + "rules.operatorOption.exact": "Coincidencia exacta", + "rules.unknownFolder": "Carpeta desconocida", + "rules.mailboxTitle": "Reglas del buzón", + "rules.appliedAfterDelivery": "Se aplican después de la entrega.", + "rules.new": "Nueva regla", + "rules.none": "Aún no hay reglas", + "rules.delete": "Eliminar regla", + "rules.update": "Actualizar regla", + "rules.dialogDescription": "Elige qué buscar y adónde debe ir el mensaje.", + "rules.fieldLabel": "Campo", + "rules.matchLabel": "Coincidencia", + "rules.valueLabel": "Valor", + "rules.valuePlaceholderEmail": "remitente@ejemplo.com", + "rules.valuePlaceholderOther": "Factura", + "rules.destination": "Destino", + "rules.selectDestination": "Selecciona un destino", + "rules.saveChanges": "Guardar cambios", + "rules.create": "Crear regla", + "routing.field.recipient": "Dirección del destinatario", + "routing.field.sender": "Dirección del remitente", + "routing.field.title": "Asunto", + "routing.field.content": "Cuerpo", + "routing.operator.contains": "contiene", + "routing.operator.exact": "es exactamente", + "routing.operator.starts_with": "empieza por", + "routing.operator.ends_with": "termina en", + "routing.operator.regex": "coincide con la expresión regular", + "routing.action.store": "Entregar en el buzón", + "routing.action.forward": "Reenviar a una dirección", + "routing.action.reject": "Rechazar / bloquear", + "routing.requestFailed": "Error en la solicitud", + "routing.anyMessage": "Cualquier mensaje", + "routing.describe.reject": "{condition} → rechazar", + "routing.describe.forward": "{condition} → reenviar a {to}", + "routing.describe.forwardCopy": "{condition} → reenviar a {to} y conservar una copia", + "routing.describe.store": "{condition} → entregar en {address}", + "routing.never": "Nunca", + "routing.title": "Enrutamiento de dominio", + "routing.about": "Bloquea, reenvía o entrega el correo que llega a este dominio.", + "routing.aboutLabel": "Acerca del enrutamiento de dominio", + "routing.rulesFor": "Reglas de {host}", + "routing.selectInbox": "Selecciona una bandeja", + "routing.addRoute": "Añadir ruta", + "routing.selectInboxFirst": "Selecciona una bandeja antes de crear reglas de enrutamiento.", + "routing.needFullAccess": "Se necesita acceso total a la bandeja seleccionada para gestionar el enrutamiento de dominio.", + "routing.blockRules": "Reglas de bloqueo", + "routing.blockRulesDescription": "Se evalúan antes de la entrega. El correo que coincide se rechaza en el borde.", + "routing.catchAll": "Captura general y reenvío", + "routing.catchAllDescription": "Se evalúan solo cuando ningún buzón del dominio coincidió con el destinatario.", + "routing.editRule": "Editar regla", + "routing.addRule": "Añadir regla de enrutamiento", + "routing.dialogDescription": "Elige qué ocurre con el correo que coincide.", + "routing.optionalLabel": "Etiqueta opcional", + "routing.action": "Acción", + "routing.matchOn": "Coincidir en", + "routing.condition": "Condición", + "routing.matchValue": "Valor de coincidencia", + "routing.matchAllHint": "Usa * para que coincida con todos los mensajes.", + "routing.matchAllPlaceholder": "* para que coincida con todo", + "routing.priority": "Prioridad", + "routing.priorityHint": "Los números más altos se ejecutan primero.", + "routing.keptCopyMailbox": "Buzón de la copia conservada", + "routing.destinationMailbox": "Buzón de destino", + "routing.selectMailbox": "Selecciona un buzón", + "routing.disabledSuffix": " (desactivado)", + "routing.forwardTo": "Reenviar a", + "routing.keepCopy": "Conservar una copia", + "routing.keepCopyHint": "Guarda también el mensaje en la bandeja seleccionada.", + "routing.rejectReason": "Motivo del rechazo", + "routing.rejectPlaceholder": "Mensaje rechazado por una regla de enrutamiento", + "routing.noRules": "Aún no hay reglas.", + "routing.disabled": "Desactivada", + "routing.stats": "Prioridad {priority} · coincidió {count}× · última {last}", + "export.failed": "Error al exportar", + "export.title": "Exportar buzón", + "export.description": "Descarga los encabezados y los cuerpos de los mensajes del buzón seleccionado como un archivo .mbox. Los archivos adjuntos no se incluyen en esta exportación.", + "export.preparing": "Preparando...", + "export.download": "Descargar .mbox", + "settingsPage.inbox.experience": "Experiencia de la bandeja de entrada", + "settingsPage.inbox.experienceDescription": "Elige cómo lees e interactúas con el correo.", + "settingsPage.inbox.appearance": "Apariencia", + "settingsPage.inbox.appearanceDescription": "Elige una interfaz clara u oscura.", + "settingsPage.inbox.readingLayout": "Diseño de lectura", + "settingsPage.inbox.readingLayoutDescription": "Elige cómo se muestran los correos abiertos.", + "settingsPage.inbox.threading": "Conversaciones", + "settingsPage.inbox.threadingDescription": "Elige cómo se organizan los correos en tu bandeja de entrada.", + "settingsPage.inbox.addresses": "Direcciones", + "settingsPage.inbox.addressesDescription": "Elige cómo se muestran las direcciones de los destinatarios al leer el correo.", + "settingsPage.inbox.shortcuts": "Atajos", + "settingsPage.inbox.shortcutsDescription": "Elige si los atajos de teclado están activos.", + "settingsPage.inbox.notifications": "Notificaciones", + "settingsPage.inbox.notificationsDescription": "Elige cómo te enteras de los correos nuevos.", + "settingsPage.inbox.handling": "Tratamiento de mensajes", + "settingsPage.inbox.handlingDescription": "Gestiona la protección contra spam, la limpieza y las respuestas automáticas.", + "settingsPage.inbox.spamProtection": "Protección contra spam", + "settingsPage.inbox.spamProtectionDescription": "Controla el análisis local de spam de los mensajes entrantes.", + "settingsPage.inbox.cleanup": "Limpieza de la Papelera y el Spam", + "settingsPage.inbox.cleanupDescription": "Elige cuánto tiempo se conservan los mensajes eliminados y de spam.", + "settingsPage.inbox.autoReply": "Respuesta automática", + "settingsPage.inbox.autoReplyDescription": "Configura el asunto y el mensaje de la bandeja seleccionada arriba.", + "settingsPage.security.title": "Seguridad", + "settingsPage.security.description": "Gestiona cómo inicias sesión en tu cuenta.", + "settingsPage.security.changePassword": "Cambiar contraseña", + "settingsPage.security.changePasswordDescription": "Usa al menos 8 caracteres para tu contraseña nueva.", + "settingsPage.security.mfa": "Verificación en dos pasos", + "settingsPage.security.mfaDescription": "Exige un código de una aplicación de autenticación al iniciar sesión.", + "settingsPage.appPasswords.title": "Contraseñas de aplicación", + "settingsPage.appPasswords.description": "Usa tu correo desde una aplicación de escritorio o móvil mediante JMAP.", + "folder.drafts.empty": "Sin borradores", + "compose.pageTitle": "Redactar", + "compose.pageDescription": "Escribe un correo nuevo. Los borradores se guardan automáticamente.", + "agent.review.loadFailed": "No se pudo cargar la revisión", + "agent.review.title": "Revisión de borrador de IA", + "agent.review.loading": "Cargando revisión…", + "agent.review.stale": "Esta revisión está desactualizada. Abre el borrador y solicita una revisión nueva si es necesario.", + "agent.review.status": "Esta revisión está {status}. Abre el borrador y solicita una revisión nueva si es necesario.", + "agent.assistant.close": "Cerrar el asistente de correo", + "agent.assistant.open": "Abrir el asistente de correo", + "message.notFound": "Mensaje no encontrado", + "message.cloudFiles": "Archivos en la nube ({count})", + "message.openFrom": "Abrir desde {provider}", + "message.attachments": "Archivos adjuntos ({count})", + "message.cc": "cc", + "message.bcc": "cco", + "message.previous.received": "Mensaje anterior recibido el {date}", + "message.previous.sent": "Mensaje anterior enviado el {date}", + "auth.email": "Correo electrónico", + "auth.password": "Contraseña", + "auth.signIn": "Iniciar sesión", + "auth.signingIn": "Iniciando sesión...", + "auth.loginFailed": "Error al iniciar sesión", + "auth.loginTimeout": "Se agotó el tiempo de inicio de sesión. Inténtalo de nuevo.", + "auth.loginUnreachable": "No se pudo acceder al servicio de inicio de sesión. Inténtalo de nuevo.", + "auth.codeMismatch": "Ese código no coincide", + "auth.mfaTitle": "Verificación en dos pasos", + "auth.mfaDescription": "Escribe el código de 6 dígitos de tu aplicación de autenticación o uno de tus códigos de recuperación.", + "auth.code": "Código", + "auth.verifying": "Verificando...", + "auth.verify": "Verificar", + "auth.backToSignIn": "Volver al inicio de sesión", + "auth.addAnother": "Añadir otra cuenta", + "auth.addDescription": "Inicia sesión en otra cuenta. Puedes cambiar entre cuentas desde el menú de la cuenta.", + "auth.signInDescription": "Abre tu buzón y continúa en el mismo espacio de trabajo.", + "auth.forgotPassword": "¿Olvidaste la contraseña?", + "auth.forgot.error": "Algo salió mal. Inténtalo de nuevo.", + "auth.serverUnreachable": "No se pudo acceder al servidor. Inténtalo de nuevo.", + "auth.forgot.title": "Restablece tu contraseña", + "auth.forgot.sent": "Si esa cuenta tiene un correo de recuperación, un enlace de restablecimiento va en camino. Funciona durante 30 minutos.", + "auth.forgot.description": "Escribe la dirección con la que inicias sesión. Enviaremos un enlace de restablecimiento al correo de recuperación de la cuenta.", + "auth.sending": "Enviando...", + "auth.sendReset": "Enviar enlace de restablecimiento", + "auth.reset.mismatch": "Las contraseñas no coinciden", + "auth.reset.failed": "No se pudo restablecer la contraseña", + "auth.reset.linkMissing": "Falta el enlace de restablecimiento", + "auth.reset.linkMissingDescription": "Abre el enlace del correo de restablecimiento para elegir una contraseña nueva.", + "auth.reset.requestNew": "Solicitar un enlace nuevo", + "auth.reset.updated": "Contraseña actualizada", + "auth.reset.chooseNew": "Elige una contraseña nueva", + "auth.reset.doneDescription": "Se cerró tu sesión en todas partes. Inicia sesión con tu nueva contraseña para continuar.", + "auth.reset.description": "Usa al menos 8 caracteres. Se cerrarán todas las demás sesiones de esta cuenta.", + "auth.reset.goToSignIn": "Ir al inicio de sesión", + "auth.reset.newPassword": "Contraseña nueva", + "auth.reset.confirm": "Confirmar contraseña nueva", + "auth.reset.setNew": "Establecer contraseña nueva", + "setup.mxCheckFailed": "No se pudieron comprobar los registros MX existentes", + "setup.completeConfig": "Completa la configuración que falta antes de continuar.", + "setup.prepFailed": "Error en la preparación de la instalación", + "setup.domainFailed": "Error en la configuración del dominio", + "setup.domainCheckFailed": "Error en la comprobación del dominio", + "setup.domainIncomplete": "La configuración del dominio no está completa", + "setup.registrationFailed": "Error en el registro", + "setup.closedTitle": "El registro de cuentas está cerrado", + "setup.signInInstead": "Iniciar sesión en su lugar", + "setup.alreadyHasAccount": "Esta instalación ya tiene una cuenta para {domain}.", + "setup.thisWorkspace": "este espacio de trabajo", + "setup.goToLogin": "Ir al inicio de sesión", + "setup.prepareTitle": "Preparar la instalación", + "setup.addDomainTitle": "Añade tu dominio", + "setup.createMailboxTitle": "Crea tu buzón", + "setup.stepSystem": "Sistema", + "setup.stepDomain": "Dominio", + "setup.stepAccount": "Cuenta", + "setup.prepareIntro": "Mailflare comprueba la configuración de Cloudflare necesaria e inicializa una base de datos D1 limpia antes de continuar con la configuración.", + "setup.checking": "Comprobando la instalación", + "setup.migrated": "Base de datos limpia migrada correctamente", + "setup.schemaReady": "El esquema de la base de datos está listo", + "setup.checkingShort": "Comprobando...", + "setup.checkAgain": "Comprobar de nuevo", + "setup.primaryDomain": "Dominio principal", + "setup.zoneHint": "El dominio ya debe ser una zona de Cloudflare en esta cuenta.", + "setup.enableSending": "Activar el envío", + "setup.checkingCloudflare": "Comprobando el acceso a Cloudflare...", + "setup.requiredToSend": "Necesario para enviar correo.", + "setup.receiveOnly": "Modo solo recepción.", + "setup.enterDomain": "Escribe el dominio y sal del campo para verificarlo.", + "setup.domainFound": "Dominio encontrado en Cloudflare como {zone}", + "setup.addingDomain": "Añadiendo dominio...", + "setup.checkingMx": "Comprobando los registros MX existentes", + "setup.noMx": "No se encontraron registros MX existentes", + "setup.replaceMx": "Reemplazar los registros MX existentes", + "setup.replaceMxHint": "Esto elimina los registros MX del proveedor de correo actual y los reemplaza por Cloudflare Email Routing. El proveedor anterior dejará de recibir correo.", + "setup.username": "Nombre de usuario", + "setup.usernamePlaceholder": "tú", + "setup.domainFallback": "dominio", + "setup.recoveryEmail": "Correo de recuperación", + "setup.checkMxAgain": "Comprobar de nuevo los registros MX", + "setup.creating": "Creando...", + "setup.createAccount": "Crear cuenta", + "onboarding.domainCheckFailed": "Error en la comprobación del dominio", + "onboarding.addDomainFailed": "No se pudo añadir el dominio", + "onboarding.createMailboxFailed": "No se pudo crear el buzón", + "onboarding.connectTitle": "Conectar el enrutamiento de correo", + "onboarding.firstMailboxTitle": "Crea tu primer buzón", + "onboarding.connectDescription": "Añade el dominio de Cloudflare que recibirá correo y, opcionalmente, enviará a través de este espacio de trabajo.", + "onboarding.mailboxDescription": "Elige la dirección del buzón que debe abrirse directamente en la bandeja de entrada.", + "onboarding.stepDomain": "Dominio", + "onboarding.stepMailbox": "Buzón", + "onboarding.completesInInbox": "La configuración termina en la bandeja de entrada", + "onboarding.cloudflareDns": "Tu dominio debe usar el DNS de Cloudflare en la misma cuenta que {token}.", + "onboarding.domain": "Dominio", + "onboarding.leaveToVerify": "Sal del campo de dominio para verificarlo.", + "onboarding.mxConflict": "Los registros MX existentes entregan el correo a otro proveedor. Si continúas, se eliminan esos registros y se reemplazan por Cloudflare Email Routing, así que el proveedor anterior dejará de recibir correo.", + "onboarding.replacingMx": "Reemplazando registros MX...", + "onboarding.deleteMxContinue": "Eliminar los registros MX y continuar", + "onboarding.adding": "Añadiendo...", + "onboarding.addDomain": "Añadir dominio", + "onboarding.mailboxAddress": "Dirección del buzón", + "onboarding.goToInbox": "Ir a la bandeja de entrada", + "home.homeLabel": "Inicio de {app}", + "home.badge": "Operaciones de correo nativas de Cloudflare", + "home.headline": "Buzones que se sienten como tu bandeja de entrada.", + "home.subheadline": "Añade dominios, enruta el correo entrante, envía con claves de API y gestiona tus buzones desde un espacio de trabajo tranquilo construido en torno a la lista de mensajes.", + "home.mockMail": "Correo", + "home.mockPriority": "Bandeja prioritaria", + "home.mockUpdated": "Actualizado hace 2 min", + "home.msg1.subject": "Ruta coincidente", + "home.msg1.preview": "El correo entrante se entregó a soporte tras la validación del DNS.", + "home.msg1.badge": "Entrante", + "home.msg2.subject": "Envío por API aceptado", + "home.msg2.preview": "Mensaje en cola mediante la clave de API de producción.", + "home.msg2.badge": "Enviado", + "home.msg3.subject": "Webhook entregado", + "home.msg3.preview": "La carga del evento llegó al endpoint de tu espacio de facturación.", + "home.msg3.badge": "Hook", + "home.msg4.subject": "Buzón aprovisionado", + "home.msg4.preview": "El nuevo buzón de enrutamiento está listo para las respuestas de los clientes.", + "home.msg4.badge": "Admin", + "home.dashboard": "Panel", + "home.logIn": "Iniciar sesión", + "home.createAccount": "Crear cuenta", + "home.openDashboard": "Abrir el panel", + "home.viewInbox": "Ver la bandeja de entrada", + "admin.title": "Configuración de administración", + "admin.description": "Gestiona la infraestructura de correo y las integraciones del espacio de trabajo.", + "admin.section.agent": "Elige el proveedor de IA y el modelo del asistente de correo.", + "admin.section.mailboxes": "Crea y gestiona direcciones de buzón.", + "admin.section.domains": "Añade dominios de Cloudflare e inspecciona el estado del DNS.", + "admin.section.branding": "Personaliza el nombre, el icono y el favicon de la aplicación.", + "admin.section.licenses": "Compara las licencias únicas Pro y Team.", + "admin.section.accounts": "Añade y gestiona cuentas de usuario con una licencia Team.", + "admin.section.apiKeys": "Gestiona el acceso por API a dominios, cuentas y buzones.", + "admin.section.apiKeysTitle": "Claves de API de administración", + "admin.page.aiUsage": "Uso de IA", + "general.loadFailed": "No se pudo cargar la configuración", + "general.saved": "Límite de archivos adjuntos guardado", + "general.saveFailed": "No se pudo guardar la configuración", + "general.title": "General", + "general.description": "Define límites para el correo saliente.", + "general.attachments": "Archivos adjuntos", + "general.maxAttachments": "Máximo de archivos adjuntos por correo (MB)", + "general.appliesTo": "Se aplica a cada archivo y a todos los archivos combinados. Máximo: 25 MB; hasta 10 archivos.", + "general.cloudflareLimit": "Cloudflare Email Sending limita el correo completo, incluidos los archivos adjuntos y la codificación, a 5 MiB para destinatarios en general. La excepción de 25 MiB solo se aplica a las direcciones de destino verificadas.", + "general.largeFiles": "Los archivos de más de 3 MB, y los archivos más pequeños que harían que el correo superase el límite de 5 MiB de Cloudflare, se almacenan en R2 y se envían como enlaces de descarga. Los enlaces caducan a los 30 días. Cualquiera que tenga un enlace puede descargar el archivo hasta que caduque. Define APP_URL con tu dirección HTTPS pública al enviar mediante la API o flujos en segundo plano.", + "general.save": "Guardar configuración", + "routingAdmin.title": "Enrutamiento", + "routingAdmin.description": "Configura las reglas de entrega, reenvío y bloqueo para todo el dominio.", + "routingAdmin.domain": "Dominio", + "routingAdmin.chooseDomain": "Elige a qué dominio se aplican estas reglas globales.", + "routingAdmin.addDomainFirst": "Añade un dominio antes de configurar reglas de enrutamiento.", + "routingAdmin.managedDomain": "Dominio gestionado", + "accounts.loadFailed": "No se pudieron cargar las cuentas", + "accounts.domainsFailed": "No se pudieron cargar los dominios", + "accounts.checkDetails": "Revisa los datos de la cuenta y de los alias e inténtalo de nuevo", + "accounts.createFailed": "No se pudo crear la cuenta", + "accounts.title": "Cuentas", + "accounts.description": "Gestiona las cuentas Team y sus bandejas de entrada.", + "accounts.new": "Cuenta nueva", + "accounts.primaryAdmin": "Administrador principal", + "accounts.role.admin": "administrador", + "accounts.role.user": "usuario", + "accounts.lockedAdmin": "Solo el administrador principal puede abrir las cuentas de administrador", + "accounts.addTitle": "Añadir cuenta de usuario", + "accounts.addDescription": "El usuario puede iniciar sesión con este correo y esta contraseña.", + "accounts.username": "usuario", + "accounts.selectDomain": "Selecciona un dominio", + "accounts.domain": "Dominio", + "accounts.role": "Rol", + "accounts.roleUser": "Usuario", + "accounts.roleAdmin": "Administrador", + "accounts.creating": "Creando...", + "accounts.create": "Crear cuenta", + "aliases.useAll": "Usar todos los dominios", + "aliases.useAllHint": "Usa este nombre de usuario en todos los dominios disponibles, incluidos los que se añadan más adelante. Desactivado, solo se asignan la dirección principal y los alias de abajo.", + "aliases.additional": "Alias adicionales", + "aliases.optional": "(opcional)", + "aliases.hint": "Estas direcciones comparten la bandeja de entrada de la cuenta nueva y también se pueden usar para enviar correo.", + "aliases.usernameLabel": "Nombre de usuario del alias {n}", + "aliases.domainLabel": "Dominio del alias {n}", + "aliases.remove": "Quitar el alias {n}", + "aliases.add": "Añadir alias", + "license.required": "Se requiere una licencia {tier}", + "license.upgradeHint": "Mejora tu licencia para usar esta función.", + "license.view": "Ver licencias", + "update.checkFailed": "No se pudo comprobar si hay actualizaciones", + "update.migrationCheckFailed": "No se pudieron comprobar las migraciones de la base de datos", + "update.startFailed": "No se pudo iniciar la actualización", + "update.migrateFailed": "No se pudieron aplicar las migraciones de la base de datos", + "update.title": "Actualización de la aplicación", + "update.description": "Sincroniza la última versión de Mailflare y mantén actualizado el esquema de la base de datos.", + "update.completeConfig": "Completa la configuración necesaria del Cloudflare Worker:", + "update.configured": "Configurado", + "update.missing": "Falta", + "update.available": "Mailflare v{target} está disponible. Estás usando la v{current}.", + "update.upToDate": "Mailflare v{current} está actualizado.", + "update.starting": "Iniciando actualización...", + "update.updateButton": "Actualizar Mailflare", + "update.pendingMigrations.one": "Hay {count} migración de la base de datos pendiente.", + "update.pendingMigrations.other": "Hay {count} migraciones de la base de datos pendientes.", + "update.updatingDatabase": "Actualizando la base de datos...", + "update.updateDatabase": "Actualizar base de datos", + "update.deployMatching": "Despliega la versión de Mailflare correspondiente antes de modificar esta base de datos.", + "update.started": "Actualización iniciada para {repo}@{ref}. Recarga esta página cuando Cloudflare la haya desplegado.", + "update.viewWorkflow": "Ver workflow", + "account.loadFailed": "No se pudo cargar la cuenta", + "account.updated": "Detalles de la cuenta actualizados", + "account.updateFailed": "No se pudo actualizar la cuenta", + "account.avatarFailed": "No se pudo actualizar el avatar", + "account.loadingAccount": "Cargando cuenta...", + "account.detailsTitle": "Detalles", + "account.detailsDescription": "Actualiza el perfil y el estado de esta cuenta.", + "account.noPermission": "No tienes permiso para editar esta cuenta. Solo el administrador principal puede gestionar las cuentas de administrador.", + "account.changeAvatar": "Cambiar avatar", + "account.forwardingOptional": "Correo de reenvío (opcional)", + "account.enabled": "Cuenta activada", + "account.primaryAlwaysEnabled": "La cuenta del administrador principal permanece siempre activada.", + "account.allowSignIn": "Permite que esta cuenta inicie sesión y acceda a sus bandejas de entrada.", + "account.saveDetails": "Guardar detalles", + "account.password.title": "Contraseña", + "account.password.resetFor": "Restablece la contraseña de {name}.", + "account.password.thisAccount": "esta cuenta", + "account.password.onlyPrimary": "Solo el administrador principal puede restablecer la contraseña de una cuenta de administrador.", + "account.password.new": "Contraseña nueva", + "account.password.placeholder": "Escribe al menos 8 caracteres", + "account.password.hint": "Al establecer una contraseña se cierra la sesión de esta cuenta en todas partes. Compártela con el usuario por otro canal.", + "account.password.resetting": "Restableciendo...", + "account.password.reset": "Restablecer contraseña", + "account.password.resetDone": "Contraseña restablecida. Se cerró la sesión de esta cuenta en todas partes.", + "account.password.resetFailed": "No se pudo restablecer la contraseña", + "account.mailboxes.loadFailed": "No se pudieron cargar los buzones", + "account.mailboxes.addFailed": "No se pudo añadir el buzón", + "account.mailboxes.removeFailed": "No se pudo quitar el buzón", + "account.mailboxes.title": "Buzones", + "account.mailboxes.manage": "Gestiona las bandejas de entrada de {name}.", + "account.mailboxes.current": "Bandejas actuales", + "account.mailboxes.removeInbox": "Quitar bandeja", + "account.mailboxes.none": "Aún no hay buzones.", + "account.mailboxes.addTitle": "Añadir una bandeja", + "account.mailboxes.addDescription": "Elige un nombre de bandeja y un dominio para esta cuenta.", + "account.mailboxes.inboxName": "Nombre de la bandeja", + "account.mailboxes.inboxPlaceholder": "bandeja", + "account.mailboxes.domain": "Dominio", + "account.mailboxes.noDomains": "No hay dominios disponibles", + "account.mailboxes.address": "Dirección:", + "account.mailboxes.adding": "Añadiendo...", + "account.mailboxes.add": "Añadir bandeja", + "account.permissions.loadFailed": "No se pudieron cargar los permisos", + "account.permissions.updated": "Permisos actualizados", + "account.permissions.updateFailed": "No se pudieron actualizar los permisos", + "account.permissions.transferFailed": "No se pudo transferir la función de administrador principal", + "account.permissions.title": "Permisos", + "account.permissions.description": "Controla qué puede gestionar esta cuenta.", + "account.permissions.primaryAdmin": "Administrador principal", + "account.permissions.primaryNote": "Esta cuenta es propietaria de la administración y no se puede degradar ni desactivar. Transfiere la función para cedérsela a otra.", + "account.permissions.admins": "Los administradores pueden acceder a las páginas de administración y gestionar la configuración Team.", + "account.permissions.onlyPrimaryRoles": "Solo el administrador principal puede cambiar los roles.", + "account.permissions.permission": "Permiso", + "account.permissions.allowed": "Permitido", + "account.permissions.manageMailboxes": "Gestionar buzones", + "account.permissions.manageMailboxesHint": "Permite que esta cuenta añada y quite sus propias bandejas.", + "account.permissions.allowMailboxes": "Permitir la gestión de buzones", + "account.permissions.manageDomains": "Gestionar dominios", + "account.permissions.manageDomainsHint": "Permite que este administrador añada y gestione dominios.", + "account.permissions.allowDomains": "Permitir la gestión de dominios", + "account.permissions.manageUsers": "Gestionar usuarios", + "account.permissions.manageUsersHint": "Permite que este administrador añada y gestione cuentas de usuario.", + "account.permissions.allowUsers": "Permitir la gestión de usuarios", + "account.permissions.save": "Guardar permisos", + "account.permissions.transferTitle": "Transferir el administrador principal", + "account.permissions.transferHint": "Elige una cuenta por su correo para que asuma la administración. Se te pedirá confirmación.", + "account.permissions.selectNext": "Selecciona el próximo administrador principal", + "account.permissions.selectAccount": "Selecciona una cuenta", + "account.permissions.transferQuestion": "¿Transferir el administrador principal?", + "account.permissions.transferWarning": "Perderás el acceso de administrador principal y pasarás a ser un administrador normal.", + "account.permissions.transferring": "Transfiriendo...", + "account.permissions.confirmTransfer": "Confirmar transferencia", + "mailboxes.failed": "Error", + "mailboxes.currentAccount": "Cuenta actual", + "mailboxes.title": "Buzones", + "mailboxes.new": "Buzón nuevo", + "mailboxes.createTitle": "Crear buzón", + "mailboxes.createDescription": "Añade una dirección y aprovisiona su regla de enrutamiento automáticamente.", + "mailboxes.type": "Tipo", + "mailboxes.personalInbox": "Bandeja personal", + "mailboxes.sharedInbox": "Bandeja compartida", + "mailboxes.account": "Cuenta", + "mailboxes.sharedHint": "Tras crear la bandeja compartida, elige qué cuentas Team pueden acceder a ella.", + "mailboxes.namePlaceholder": "Nombre del buzón", + "mailboxes.emailAddress": "Dirección de correo", + "mailboxes.localPlaceholder": "soporte", + "mailboxes.createButton": "Crear buzón", + "mailboxes.none": "Aún no hay buzones", + "mailboxes.profileAlt": "Perfil de {name}", + "mailboxes.shared": "Compartida", + "mailbox.title": "Configuración", + "mailbox.primary": "Principal", + "mailbox.loadFailed": "No se pudo cargar el buzón", + "mailbox.account": "Cuenta", + "mailbox.useAllHint": "Recibe y envía correo con este nombre de usuario en todos los dominios activos de esta cuenta de administración.", + "mailbox.updateFailed": "No se pudo actualizar el buzón", + "mailbox.saved": "Configuración del buzón guardada", + "mailbox.aliases": "Alias", + "mailbox.aliasesDescription": "Direcciones adicionales que entregan en este buzón. También puedes enviar correo desde cualquier alias.", + "mailbox.removeAddress": "Quitar {address}", + "mailbox.noAliases": "Aún no hay alias.", + "mailbox.aliasesLoadFailed": "No se pudieron cargar los alias", + "mailbox.aliasPlaceholder": "alias", + "mailbox.addAlias": "Añadir alias", + "mailbox.aliasAddFailed": "No se pudo añadir el alias", + "mailbox.aliasRemoveFailed": "No se pudo quitar el alias", + "mailbox.sharedAccess": "Acceso compartido", + "mailbox.sharedAccessDescription": "Los miembros del equipo añadidos aquí pueden leer, enviar, organizar y gestionar el correo de esta bandeja.", + "mailbox.noMembers": "Todavía ningún miembro del equipo tiene acceso.", + "mailbox.sharedLoadFailed": "No se pudo cargar el acceso compartido", + "mailbox.chooseAccount": "Elige una cuenta", + "mailbox.addUser": "Añadir usuario", + "mailbox.accountAddFailed": "No se pudo añadir la cuenta", + "mailbox.dangerZone": "Zona de peligro", + "mailbox.dangerDescription": "Al eliminar este buzón se quita su regla de Cloudflare Email Routing, por lo que el correo nuevo enviado a {address} dejará de aceptarse. Los mensajes ya recibidos se conservan en la base de datos, pero dejarán de aparecer en cualquier bandeja. Esta acción no se puede deshacer.", + "mailbox.thisAddress": "esta dirección", + "mailbox.deleteFailed": "No se pudo eliminar el buzón", + "mailbox.deleteConfirm": "¿Eliminar {address}? Esto quita su regla de enrutamiento de correo y no se puede deshacer.", + "mailbox.deleting": "Eliminando...", + "mailbox.delete": "Eliminar buzón", + "domains.removeFailed": "No se pudo quitar", + "domains.dnsLoadFailed": "No se pudo cargar el DNS", + "domains.sendingChangeFailed": "No se pudo cambiar el proveedor de envío", + "domains.receivingChangeFailed": "No se pudo cambiar el proveedor de recepción", + "domains.dnsSetupFailed": "No se pudo configurar el registro DNS", + "domains.title": "Dominios", + "domains.descriptionManaged": "Los dominios deben estar en tu cuenta de Cloudflare, que gestiona su DNS. Elige, por dominio, si Cloudflare, Resend o Amazon SES recibe y envía su correo.", + "domains.descriptionManual": "Añade los dominios para los que este servidor recibe correo. Abre el DNS de un dominio para ver los registros MX, SPF y DMARC que debes crear.", + "domains.new": "Dominio nuevo", + "domains.addTitle": "Añadir dominio", + "domains.addDescription": "Conecta una zona de Cloudflare y elige qué servicio recibe su correo y si Mailflare debe aprovisionar Email Sending.", + "domains.hostname": "Nombre de host", + "domains.receiveWith": "Recibir correo con", + "domains.receiveHintCloudflare": "Cloudflare Email Routing está activado en la zona.", + "domains.receiveHintNone": "El dominio solo envía. Añade un servicio de recepción más adelante.", + "domains.providerHintLater": "Añade tus credenciales y configúralo desde la página del dominio después de añadirlo.", + "domains.cloudflareRouting": "Cloudflare Email Routing", + "domains.cloudflareSending": "Cloudflare Email Sending", + "domains.notSelected": "Sin seleccionar", + "domains.sendWith": "Enviar correo con", + "domains.sendHintCloudflare": "Cloudflare Email Sending está activado en la zona.", + "domains.sendHintNone": "Modo solo recepción. Añade un servicio de envío más adelante.", + "domains.tokenPermissions": "Comprueba que tu token de API de Cloudflare tenga estos permisos:", + "domains.tokenAccounts": "Todas las cuentas — DNS Settings:Edit, Email Routing Addresses:Edit; Email Sending:Edit para el correo saliente", + "domains.tokenZones": "Todas las zonas — DNS Settings:Edit, Email Routing Rules:Edit, Zone Settings:Edit, DNS:Edit", + "domains.none": "Aún no hay dominios", + "dns.status.active": "activo", + "dns.status.pending": "pendiente", + "domains.badge.routing": "enrutamiento", + "domains.badge.sendingOnly": "solo envío", + "domains.badge.receivingVia": "recibiendo mediante {provider}", + "domains.badge.sendingVia": "enviando mediante {provider}", + "domains.badge.receivingOnly": "solo recepción", + "domains.badge.sending": "envío", + "domains.providerSes": "Amazon SES", + "domains.providerResend": "Resend", + "dns.found": "encontrado", + "dns.missing": "ausente", + "dns.notVerified": "sin verificar", + "dns.mx": "Enruta el correo entrante a Mailflare", + "dns.spf": "Autoriza a Mailflare a enviar correo", + "dns.dkim": "Firma el correo saliente para mejorar la entregabilidad", + "dns.dmarc": "Ayuda a evitar la suplantación de correo", + "domains.hideDetails": "Ocultar detalles", + "domains.showDetails": "Mostrar detalles", + "domains.actionsFor": "Acciones de {host}", + "domains.removeConfirm": "¿Quitar {host}? Esto elimina definitivamente todos los buzones de este dominio, incluidos todos sus mensajes, y desactiva Email Routing para la zona.\n\nEscribe {host} para confirmar.", + "domains.removeDomain": "Quitar dominio", + "domains.sendingFor": "El envío de {name} está {state}", + "domains.enabled": "activado", + "domains.disabled": "desactivado", + "domains.sendingConfigured": "El envío de correo está configurado", + "domains.sendingNotConfigured": "El envío de correo no está configurado", + "domains.sendingNotSet": "El envío no se ha configurado para este dominio", + "domains.routingConfigured": "El enrutamiento de correo está configurado", + "domains.recordsMissing.one": "Falta {count} registro DNS", + "domains.recordsMissing.other": "Faltan {count} registros DNS", + "domains.noRoutingRecords": "No se encontraron registros DNS de enrutamiento", + "domains.recordLabel": "Registro {label}", + "domains.manualDns": "El DNS de este dominio se gestiona manualmente", + "domains.createRecord": "Crear el registro {label}", + "domains.settingUp": "Configurando...", + "domains.setup": "Configurar", + "domains.emailSending": "Email Sending", + "domains.emailSendingHint": "Envía correo saliente desde este dominio", + "domains.setupTitle": "Configuración del dominio", + "domains.setupDescription": "Revisa la autenticación DNS que mantiene el correo entregable, sean cuales sean los servicios que lo envían y lo reciben.", + "domains.manualDnsNote": "El DNS de este dominio se gestiona manualmente, así que los registros deben crearse donde estén alojados los servidores de nombres del dominio.", + "domains.setUp": "Configurado", + "domains.needsSetup": "Requiere configuración", + "domains.stillSetUp": "{title} sigue configurado para este dominio, pero no se usa.", + "domains.removing": "Quitando…", + "domains.cleanUp": "Limpiar", + "domains.setupFailed": "Error en la configuración", + "domains.emailRouting": "Email Routing", + "domains.emailRoutingHint": "Enruta el correo entrante a Mailflare", + "domains.requestFailed": "Error en la solicitud", + "domains.opt.cfRouting": "Cloudflare Email Routing", + "domains.opt.cfRoutingDesc": "El correo llega a través de la zona de Cloudflare de este dominio. Es la opción predeterminada.", + "domains.opt.resendReceiveDesc": "Resend recibe el correo y lo entrega a Mailflare mediante webhook.", + "domains.opt.sesReceiveDesc": "SES recibe el correo en S3 y avisa a Mailflare.", + "domains.opt.cfEmail": "Cloudflare Email", + "domains.opt.cfSendDesc": "Cloudflare Email Sending. Configurado en la zona de este dominio.", + "domains.opt.resendSendDesc": "Envía a través de tu cuenta de Resend.", + "domains.opt.sesSendDesc": "Envía a través de tu cuenta de AWS con SES.", + "domains.removeReceivingConfirm": "¿Quitar la configuración de recepción de {title} para {host}? Esto elimina su registro MX y su enrutamiento, así que el correo no llegará a través de él.", + "domains.removeSendingConfirm": "¿Quitar la configuración de {title} para {host}? Esto elimina sus registros DNS.", + "domains.removeConfigFailed": "No se pudo quitar la configuración", + "domains.setupReceiving": "Configurar la recepción de correo", + "domains.setupReceivingDescription": "Elige qué recibe el correo de este dominio. Solo un servicio puede ser propietario del registro MX; al configurar otro se pide confirmación antes de reemplazarlo.", + "domains.noReceiving": "No hay ningún servicio de recepción seleccionado: este dominio solo envía.", + "domains.setupSending": "Configurar el envío de correo", + "domains.sendingNone": "Este dominio solo recibe correo. Activa una opción para enviar desde él.", + "domains.sendingChoose": "Elige qué envía el correo saliente de este dominio. La recepción no se ve afectada.", + "domains.setupReceivingButton": "Configurar recepción", + "domains.resendReceivingHint": "Activa la recepción en el dominio, apunta el MX a Resend y registra el webhook.", + "domains.sesReceivingHint": "Crea el bucket de S3, el tema de SNS y la regla de recepción, y luego apunta el MX a SES.", + "domains.providerUnreachable": "No se pudo acceder al proveedor", + "domains.setupFinished": "Configuración terminada. La propagación del DNS puede tardar unos minutos; usa Comprobar de nuevo para actualizar.", + "domains.checking": "Comprobando…", + "domains.ok": "OK", + "domains.notSetUp": "Sin configurar", + "domains.restrictedKey": "Esta clave de Resend solo puede enviar correo, así que Mailflare no puede configurar la recepción. Usa una clave de acceso total, o activa la recepción, añade el registro MX y crea el webhook {webhook} en el panel de Resend.", + "domains.checkAgain": "Comprobar de nuevo", + "domains.working": "Trabajando…", + "resend.unreachable": "No se pudo acceder a Resend", + "resend.testSent": "Correo de prueba enviado a {to}", + "resend.needsFullKey": "Requiere una clave de API de Resend con acceso total", + "resend.checking": "Comprobando Resend…", + "resend.cannotCheck": "No se puede comprobar: esta clave solo puede enviar correo", + "resend.cannotRead": "No se pudo leer el dominio desde Resend", + "resend.verified": "Dominio verificado en Resend", + "resend.waiting": "Registros DNS añadidos, esperando a que Resend verifique ({status})", + "resend.missingDns.one": "Falta {count} registro DNS en Cloudflare", + "resend.missingDns.other": "Faltan {count} registros DNS en Cloudflare", + "resend.dnsCheck": "Comprobación de DNS: {status}", + "resend.notAdded": "El dominio aún no se ha añadido a Resend", + "resend.btn.setupDomain": "Configurar dominio", + "resend.btn.verify": "Verificar", + "resend.btn.setupDomainDns": "Configurar dominio y DNS", + "resend.btn.createMissing": "Crear el DNS que falta y verificar", + "resend.btn.checkStatus": "Comprobar estado", + "resend.domain": "Dominio", + "resend.domainHint": "Dominio remitente verificado en Resend", + "resend.sending": "Enviando…", + "resend.sendTest": "Enviar correo de prueba", + "resend.manualHint": "Añade este dominio en resend.com/domains y crea los registros DNS que muestra; luego envía un correo de prueba. O sustituye la clave por una de acceso total para que Mailflare lo configure.", + "resend.addRecords": "Añade estos registros donde esté alojado el DNS de este dominio y luego verifica.", + "resend.propagate": "Los cambios de DNS pueden tardar unos minutos en propagarse. Vuelve a comprobar en breve.", + "resend.key": "Clave de API", + "resend.keyHint": "Compartida por todos los dominios que usan Resend", + "resend.replace": "Reemplazar", + "resend.remove": "Quitar", + "resend.saveKey": "Guardar clave", + "resend.keySaved": "Clave de API guardada", + "resend.removeConfirm": "¿Quitar la clave de API de Resend? Todos los dominios que usan Resend dejarán de enviar y recibir.", + "resend.keyInstructions": "Crea una clave en resend.com/api-keys. Una clave de acceso total permite que Mailflare añada por ti el dominio, su DNS y el webhook de recepción; una clave solo de envío sirve para enviar, pero tú añades el dominio en Resend.", + "aws.loadFailed": "No se pudo cargar la configuración de AWS", + "aws.removeConfirm": "¿Quitar las credenciales de AWS? Los dominios que usan Amazon SES dejarán de enviar y recibir. Los recursos ya creados en AWS se conservan.", + "aws.credentials": "Credenciales de AWS", + "aws.credentialsHint": "Compartidas por todos los dominios que usan Amazon SES", + "aws.recheck": "Volver a comprobar", + "aws.accessKeyId": "ID de clave de acceso (AKIA…)", + "aws.secretKey": "Clave de acceso secreta", + "aws.region": "Región (us-east-1)", + "aws.validating": "Validando…", + "aws.validateSave": "Validar y guardar", + "aws.keySummary": "Clave de acceso …{hint} · {region}", + "aws.accountSuffix": " · cuenta {id}", + "aws.envSuffix": " · del entorno", + "aws.sesSending": "Envío de SES", + "aws.sesSendingHint": "Envía correo y gestiona las identidades de remitente", + "aws.allowedIn": "Permitido en {region}", + "aws.missingSes": "Faltan permisos de SES", + "aws.sandbox": "Sandbox de SES", + "aws.sandboxHint": "Las cuentas nuevas de AWS empiezan con restricciones", + "aws.sandboxDetail": "Solo los destinatarios verificados pueden recibir correo hasta que solicites acceso de producción en la consola de SES.", + "aws.sesReceiving": "Recepción de SES", + "aws.sesReceivingHint": "Reglas de recepción para el correo entrante", + "aws.regionCannotReceive": "{region} no puede recibir correo. Usa us-east-1, us-west-2 o eu-west-1.", + "aws.missingReceipt": "Faltan permisos de reglas de recepción de SES", + "aws.s3Hint": "Bucket donde SES almacena los mensajes sin procesar", + "aws.allowed": "Permitido", + "aws.missingS3": "Faltan permisos de S3", + "aws.snsHint": "Avisa a Mailflare de cada mensaje", + "aws.missingSns": "Faltan permisos de SNS", + "aws.missingSummary": "Permisos que faltan y la política de IAM que los concede", + "aws.missingList": "Faltan: {list}", + "aws.createUserHint": "Crea un usuario de IAM con acceso programático en la consola de AWS y adjunta una política con los permisos que necesita Mailflare (se muestran después de guardar, si falta alguno). Las credenciales se comprueban con AWS antes de guardarse.", + "ses.unreachable": "No se pudo acceder a AWS", + "ses.checking": "Comprobando Amazon SES…", + "ses.cannotRead": "No se pudo leer el dominio desde SES", + "ses.verified": "Dominio verificado en SES", + "ses.notAdded": "El dominio aún no se ha añadido a SES", + "ses.waiting": "Registros DNS añadidos, esperando a que SES verifique (DKIM {status})", + "ses.missingDkim.one": "Falta {count} registro DKIM en Cloudflare", + "ses.missingDkim.other": "Faltan {count} registros DKIM en Cloudflare", + "ses.dkim": "DKIM {status}", + "ses.domainHint": "Identidad de remitente verificada en SES", + "ses.sandboxHint": "Restricción que afecta a toda la cuenta", + "ses.sandboxDetail": "En el sandbox, SES solo entrega a direcciones verificadas. Solicita acceso de producción en la consola de SES antes de enviar a otras personas.", + "ses.addCnames": "Añade estos registros CNAME donde esté alojado el DNS de este dominio y luego comprueba el estado.", + "webhooks.event.inbound": "Mensaje entrante", + "webhooks.event.inboundHint": "Se recibió y almacenó un mensaje", + "webhooks.event.outbound": "Mensaje saliente", + "webhooks.event.outboundHint": "Se envió un mensaje", + "webhooks.event.failed": "Error de entrega", + "webhooks.event.failedHint": "Falló un mensaje saliente", + "webhooks.status.pending": "Pendiente", + "webhooks.status.delivered": "Entregado", + "webhooks.status.failed": "Fallido", + "webhooks.status.retrying": "Reintentando", + "webhooks.status.exhausted": "Se rindió", + "webhooks.title": "Webhooks", + "webhooks.description": "Entrega eventos de mensajes a tus propios endpoints, con reintentos automáticos.", + "webhooks.add": "Añadir endpoint", + "webhooks.secretTitle": "Secreto de firma — se muestra una vez", + "webhooks.secretHint": "Verifica el encabezado {header} (HMAC-SHA256 del cuerpo sin procesar) con este secreto.", + "webhooks.dismiss": "Descartar", + "webhooks.none": "Aún no hay endpoints. Añade uno para empezar a recibir eventos.", + "webhooks.enabled": "Activado", + "webhooks.disabled": "Desactivado", + "webhooks.toggleLabel.disable": "Desactivar {url}", + "webhooks.toggleLabel.enable": "Activar {url}", + "webhooks.stat.deliveries": "Entregas", + "webhooks.stat.delivered": "Entregadas", + "webhooks.stat.inFlight": "En curso", + "webhooks.stat.failed": "Fallidas", + "webhooks.stat.maxAttempts": "Máximo de intentos", + "webhooks.hideHistory": "Ocultar historial de entregas", + "webhooks.history": "Historial de entregas", + "webhooks.testDelivery": "Entrega de prueba: {result}", + "webhooks.test": "Probar", + "webhooks.rotateConfirm": "¿Rotar este secreto de firma? El secreto anterior dejará de firmar las nuevas entregas de inmediato.", + "webhooks.rotate": "Rotar secreto", + "webhooks.deleteLabel": "Eliminar {url}", + "webhooks.addDescription": "Las entregas fallidas se reintentan automáticamente con espera exponencial.", + "webhooks.endpointUrl": "URL del endpoint", + "webhooks.descriptionLabel": "Descripción", + "webhooks.optional": "Opcional", + "webhooks.events": "Eventos", + "webhooks.create": "Crear", + "webhooks.col.event": "Evento", + "webhooks.col.status": "Estado", + "webhooks.col.attempts": "Intentos", + "webhooks.col.response": "Respuesta", + "webhooks.col.lastAttempt": "Último intento", + "webhooks.col.nextRetry": "Próximo reintento", + "webhooks.loadingDeliveries": "Cargando entregas…", + "webhooks.noDeliveries": "Aún no se ha registrado ninguna entrega.", + "webhooks.retry": "Reintentar", + "weekday.0": "Domingo", + "weekday.1": "Lunes", + "weekday.2": "Martes", + "weekday.3": "Miércoles", + "weekday.4": "Jueves", + "weekday.5": "Viernes", + "weekday.6": "Sábado", + "backups.status.queued": "en cola", + "backups.status.running": "en ejecución", + "backups.status.completed": "completada", + "backups.status.failed": "fallida", + "backups.restoreConfirm": "¿Restaurar esta copia de seguridad? Esto reemplaza todos los registros actuales de la base de datos y puede cerrar tu sesión.", + "backups.title": "Copias de seguridad de la base de datos", + "backups.description": "Exporta los registros de la base de datos y guárdalos en el bucket R2 configurado.", + "backups.starting": "Iniciando...", + "backups.backUp": "Hacer copia", + "backups.actions": "Acciones de copia de seguridad", + "backups.restoring": "Restaurando...", + "backups.restore": "Restaurar desde una copia de seguridad", + "backups.settings": "Configuración", + "backups.tablesTitle": "Tablas de las que hacer copia", + "backups.tablesDescription": "Elige grupos de tablas relacionadas para las copias manuales y automáticas. Todos los grupos vienen activados por defecto. La restauración requiere una copia que contenga todos los grupos.", + "backups.tables": "Tablas: {list}", + "backups.backUpGroup": "Hacer copia de {group}", + "backups.saveSettingsFailed": "No se pudo guardar la configuración de las copias de seguridad", + "backups.saveSettings": "Guardar configuración", + "backups.operationFailed": "Falló la operación de copia de seguridad", + "backups.setupTitle": "Completa la configuración de las copias de seguridad", + "backups.setupDescription": "Añade los valores que faltan en la configuración de Variables y Secretos del Worker desplegado. Esta comprobación desaparece cuando se completa la configuración de las copias de seguridad.", + "backups.checkAgain": "Comprobar de nuevo", + "backups.automatic": "Copia de seguridad automática", + "backups.scheduleNote": "La programación se ejecuta a las 02:00 UTC. Las programaciones mensuales se limitan a los días 1 a 28.", + "backups.enableAutomatic": "Activar la copia de seguridad automática", + "backups.frequency": "Frecuencia", + "backups.daily": "Diaria", + "backups.weekly": "Día de la semana seleccionado", + "backups.monthly": "Día del mes seleccionado", + "backups.dayOfWeek": "Día de la semana", + "backups.dayOfMonth": "Día del mes", + "backups.deleteOld": "Eliminar automáticamente las copias antiguas", + "backups.deleteOlderThan": "Eliminar copias con más de", + "backups.days": "días", + "backups.history": "Historial de copias de seguridad", + "backups.col.file": "Archivo", + "backups.col.status": "Estado", + "backups.col.size": "Tamaño", + "backups.col.created": "Creada", + "backups.col.actions": "Acciones", + "backups.none": "Aún no hay copias de seguridad.", + "backups.manual": "Manual", + "backups.scheduled": "Programada", + "backups.download": "Descargar copia de seguridad", + "backups.delete": "Eliminar copia de seguridad", + "adminKeys.loadFailed": "No se pudieron cargar las claves de API de administración", + "adminKeys.revokeFailed": "No se pudo revocar la clave de API de administración", + "adminKeys.perm.domains": "Gestionar dominios", + "adminKeys.perm.domainsDesc": "Añadir y quitar dominios, y gestionar su configuración de DNS.", + "adminKeys.perm.accounts": "Gestionar cuentas", + "adminKeys.perm.accountsDesc": "Crear y actualizar cuentas. Requiere una licencia Team.", + "adminKeys.perm.mailboxes": "Gestionar buzones", + "adminKeys.perm.mailboxesDesc": "Crear, actualizar y quitar buzones.", + "adminKeys.namePlaceholder": "Aplicación de producción", + "adminKeys.allowMcpHint": "Usa esta clave con un cliente MCP para gestionar solo las áreas de administración seleccionadas abajo. No puede leer ni enviar correo.", + "adminKeys.createKey": "Crear clave", + "branding.title": "Marca", + "branding.proOnly": "La marca personalizada está disponible con una licencia Pro o Team.", + "branding.licenseRequired": "Se requiere una licencia", + "branding.originalNote": "Esta instalación sigue usando el nombre, el icono de la aplicación y el favicon originales de Mailflare.", + "branding.buyPro": "Comprar Pro · 29 US$", + "branding.buyTeam": "Comprar Team · desde 249 US$", + "branding.updated": "Marca actualizada", + "branding.saveFailed": "No se pudo guardar la marca", + "branding.description": "Personaliza la identidad de la aplicación que ven todos los que usan esta instalación.", + "branding.identity": "Identidad de la aplicación", + "branding.faviconNote": "El icono también se usa como favicon del navegador.", + "branding.appName": "Nombre de la aplicación", + "branding.appIcon": "Icono de la aplicación", + "branding.iconPreview": "Vista previa del icono de la aplicación", + "branding.chooseImage": "Elige PNG, JPEG, WebP o GIF", + "branding.maxSize": "Máximo 2 MB", + "branding.save": "Guardar marca", + "licenses.title": "Licencias", + "licenses.description": "Elige una licencia de pago único. Cada compra incluye las actualizaciones publicadas durante el primer año.", + "licenses.pro.description": "Una licencia de pago único para una cuenta, que incluye un año de actualizaciones del producto.", + "licenses.pro.feature1": "Marca personalizada", + "licenses.pro.feature2": "Todas las futuras funciones Pro", + "licenses.keepVersion": "Conserva la versión con licencia para siempre", + "licenses.team.description": "Una licencia de pago único para varias cuentas con todas las capacidades Pro", + "licenses.team.feature1": "Todo lo de Pro", + "licenses.team.feature2": "Añade y gestiona otras cuentas", + "licenses.team.feature3": "Acceso a buzones compartidos según disponibilidad", + "licenses.get": "Obtener {plan}", + "licenses.communityPlan": "Community", + "licenses.loadFailed": "No se pudo cargar el estado de la licencia", + "licenses.requestFailed": "Error en la solicitud de la licencia", + "licenses.enterKey": "Escribe tu clave de licencia", + "licenses.deactivateConfirm": "¿Desactivar esta licencia en esta instalación?", + "licenses.deactivated": "Licencia desactivada", + "licenses.validated": "Licencia validada", + "licenses.activated": "Licencia activada", + "licenses.activatedBody": "Tu licencia {plan} está activa. Las funciones con licencia están listas para usarse.", + "licenses.deactivating": "Desactivando...", + "licenses.deactivate": "Desactivar licencia", + "licenses.currentState": "Esta licencia está actualmente {state}. Escribe su clave para validarla o desactivarla.", + "licenses.haveLicense": "¿Ya tienes una licencia? Elige tu plan", + "licenses.product": "Producto", + "licenses.proTag": "Para usuarios avanzados individuales", + "licenses.teamTag": "Para equipos y bandejas compartidas", + "licenses.licenseKey": "Clave de licencia", + "licenses.keyPlaceholder": "Escribe tu clave de licencia de Mailflare", + "licenses.validating": "Validando...", + "licenses.validate": "Validar licencia", + "licenses.deactivateShort": "Desactivar", + "licenses.activating": "Activando...", + "licenses.activate": "Activar", + "activity.title": "Actividad", + "activity.description": "Actividad de inicio y cierre de sesión en las cuentas de usuario.", + "activity.col.activity": "Actividad", + "activity.col.user": "Usuario", + "activity.col.device": "Dispositivo", + "activity.col.time": "Hora", + "activity.none": "Aún no hay actividad de inicio ni cierre de sesión", + "activity.login": "Inicio de sesión", + "activity.logout": "Cierre de sesión", + "activity.unknownEmail": "(correo desconocido)", + "activity.unknownCity": "(ciudad desconocida)", + "activity.unknownCountry": "(país desconocido)", + "activity.unknownDevice": "(dispositivo desconocido)", + "activity.unknownPlatform": "(plataforma desconocida)", + "activity.unknownIp": "(IP desconocida)", + "agentAdmin.loadFailed": "No se pudo cargar la configuración del agente", + "agentAdmin.enterUrl": "Escribe una URL base HTTPS para cargar los modelos.", + "agentAdmin.enterKey": "Escribe una clave de API para cargar los modelos.", + "agentAdmin.modelsFailed": "No se pudieron cargar los modelos", + "agentAdmin.saved": "Proveedor del agente guardado. Los ajustes del asistente ya pueden elegir entre estos modelos.", + "agentAdmin.saveFailed": "No se pudo guardar la configuración del agente", + "agentAdmin.title": "Agente", + "agentAdmin.description": "Elige el proveedor de IA y los modelos que usa el asistente de correo para el chat y los borradores.", + "agentAdmin.viewUsage": "Ver uso", + "agentAdmin.enable": "Activar el asistente", + "agentAdmin.enableHint": "Muestra el chat del asistente y permite borradores automáticos para todos.", + "agentAdmin.availabilityFailed": "No se pudo actualizar la disponibilidad del asistente", + "agentAdmin.provider": "Proveedor de IA", + "agentAdmin.providerWarning": "El contenido del correo se envía al proveedor seleccionado cuando alguien usa el asistente. El envío de un borrador sigue requiriendo aprobación humana.", + "agentAdmin.providerLabel": "Proveedor", + "agentAdmin.cloudflareAi": "Cloudflare Workers AI", + "agentAdmin.openaiCompatible": "Proveedor compatible con OpenAI", + "agentAdmin.needsBinding": "Cloudflare Workers AI requiere un binding de AI en esta instalación.", + "agentAdmin.template": "Plantilla de proveedor", + "agentAdmin.baseUrl": "URL base de la API", + "agentAdmin.apiKey": "Clave de API", + "agentAdmin.savedKeyPlaceholder": "Clave guardada (déjalo en blanco para conservarla)", + "agentAdmin.enterKeyPlaceholder": "Escribe la clave de API", + "agentAdmin.keySaved": "Hay una clave de API guardada en el servidor. Escribe una nueva para reemplazarla.", + "agentAdmin.keyNote": "La clave de API se almacena en el servidor y no se vuelve a mostrar.", + "agentAdmin.models": "Modelos", + "agentAdmin.loadingModels": "Cargando modelos…", + "agentAdmin.modelsUnavailable": "Modelos no disponibles", + "agentAdmin.suggested": "Se muestran modelos de Cloudflare sugeridos porque no hay un catálogo completo disponible.", + "agentAdmin.orEnterIds": "O escribe IDs de modelos (separados por comas)", + "agentAdmin.toolCalling": "Elige modelos que admitan llamadas a herramientas para que el asistente pueda leer el correo y crear borradores. El primer modelo es el predeterminado.", + "agentAdmin.rates": "Tarifas de coste estimadas", + "agentAdmin.ratesHint": "USD por cada millón de tokens. Las tarifas publicadas por el proveedor se usan automáticamente; escríbelas tú mismo para los modelos que no publican ninguna. El uso sin ambas tarifas muestra el gasto como no disponible.", + "agentAdmin.rateLine": "Entrada ${input} · Salida ${output} / 1M", + "agentAdmin.fromProvider": "(del proveedor)", + "agentAdmin.input": "Entrada", + "agentAdmin.output": "Salida", + "agentAdmin.usdPerM": "USD / 1M", + "agentAdmin.save": "Guardar configuración del agente", + "aiUsage.loadFailed": "No se pudo cargar el uso de IA", + "aiUsage.pageFailed": "No se pudo cargar la página de uso", + "aiUsage.title": "Uso de IA", + "aiUsage.description": "Solicitudes registradas desde que se añadió el seguimiento del uso.", + "aiUsage.back": "Volver al agente", + "aiUsage.totalTokens": "Total de tokens", + "aiUsage.totalRequests": "Total de solicitudes", + "aiUsage.spend": "Gasto estimado", + "aiUsage.noRate": "{count} solicitudes no tienen tarifa.", + "aiUsage.col.dateTime": "Fecha y hora", + "aiUsage.col.model": "Modelo", + "aiUsage.col.provider": "Proveedor", + "aiUsage.col.input": "Tokens de entrada", + "aiUsage.col.output": "Tokens de salida", + "aiUsage.col.spending": "Gasto", + "aiUsage.none": "Aún no se ha registrado uso de IA.", + "aiUsage.loading": "Cargando uso…", + "aiUsage.pageOf": "Página {page} de {total} · {size} por página", + "aiUsage.previous": "Anterior", + "aiUsage.next": "Siguiente", + "aiUsage.note": "El gasto se estima a partir de las tarifas por modelo guardadas en la configuración del agente. Un guion significa que no había tarifa ni recuento de tokens disponible.", + "aiUsage.byDay": "Uso por día", + "aiUsage.chartHint": "Tokens de entrada y salida en los últimos 30 días ({zone})", + "aiUsage.legendInput": "Entrada", + "aiUsage.legendOutput": "Salida", + "aiUsage.chartLabel": "Uso diario de tokens de IA en los últimos 30 días", + "aiUsage.barTitle": "{day}: {tokens} tokens, {requests} solicitudes", + "calendar.loadFailed": "No se pudieron cargar los eventos del calendario.", + "calendar.invalidTimes": "Introduce horarios de evento válidos.", + "calendar.noFuture": "No quedan ocurrencias futuras que actualizar.", + "calendar.saveFailed": "No se pudo guardar el evento. Inténtalo de nuevo.", + "calendar.deleteFuture": "¿Eliminar las ocurrencias futuras a partir de ahora?", + "calendar.deleteEvent": "¿Eliminar este evento?", + "calendar.deleteFailed": "No se pudo eliminar el evento. Inténtalo de nuevo.", + "calendar.updateTimeFailed": "No se pudo actualizar el horario del evento. Inténtalo de nuevo.", + "calendar.chooseDate": "Elige una fecha del calendario", + "calendar.previousMonth": "Mes anterior", + "calendar.nextMonth": "Mes siguiente", + "calendar.previousView.week": "Semana anterior", + "calendar.previousView.day": "Día anterior", + "calendar.nextView.week": "Semana siguiente", + "calendar.nextView.day": "Día siguiente", + "calendar.today": "Hoy", + "calendar.options": "Opciones del calendario", + "calendar.week": "Semana", + "calendar.day": "Día", + "calendar.view": "Vista del calendario", + "calendar.newEvent": "Evento nuevo", + "calendar.addEventOn": "Añadir evento el {date}", + "calendar.editEvent": "Editar evento", + "calendar.createEvent": "Crear evento", + "calendar.addTitle": "Añadir título", + "calendar.eventName": "Nombre del evento", + "calendar.closeEditor": "Cerrar el editor de eventos", + "calendar.from": "Desde", + "calendar.to": "Hasta", + "calendar.fromLabel": "Fecha y hora de inicio", + "calendar.toLabel": "Fecha y hora de fin", + "calendar.setDuration": "Definir la duración del evento", + "calendar.dur.15": "15 min", + "calendar.dur.30": "30 min", + "calendar.dur.60": "1 hora", + "calendar.dur.1440": "1 día", + "calendar.repeat": "Repetir", + "calendar.repeat.none": "No se repite", + "calendar.repeat.daily": "Todos los días", + "calendar.repeat.weekly": "Cada semana", + "calendar.repeat.monthly": "Cada mes", + "calendar.repeat.weekdays": "Días laborables", + "calendar.repeatOnWeekdays": "Repetir en días de la semana", + "calendar.repeatOn": "Repetir el {day}", + "calendar.weekdayShort.0": "Dom", + "calendar.weekdayShort.1": "Lun", + "calendar.weekdayShort.2": "Mar", + "calendar.weekdayShort.3": "Mié", + "calendar.weekdayShort.4": "Jue", + "calendar.weekdayShort.5": "Vie", + "calendar.weekdayShort.6": "Sáb", + "calendar.addGuests": "Añadir invitados", + "calendar.guestsLabel": "Invitados (correos separados por comas)", + "calendar.addLocation": "Añadir ubicación", + "calendar.location": "Ubicación", + "calendar.addDescription": "Añadir descripción", + "calendar.description": "Descripción", + "calendar.eventColor": "Color del evento", + "calendar.upcoming": "Próximos", + "calendar.upcomingLoadFailed": "No se pudieron cargar los próximos eventos.", + "calendar.noUpcoming": "No hay próximos eventos.", + "calendar.loadingUpcoming": "Cargando próximos eventos", + "calendar.tomorrow": "Mañana", + "calendar.sectionLabel": "Sección del calendario", + "calendar.bookings": "Reservas", + "calendar.calendar": "Calendario", + "calendar.sections": "Secciones del calendario", + "calendar.resizeEdge.start": "Cambiar el inicio de {title}", + "calendar.resizeEdge.end": "Cambiar el fin de {title}", + "booking.hostListFailed": "No se pudo cargar la lista de usuarios.", + "booking.loadFailed": "No se pudieron cargar las reservas.", + "booking.saveFailed": "No se pudo guardar el evento de reserva.", + "booking.saved": "Evento de reserva guardado.", + "booking.created": "Evento de reserva creado.", + "booking.enableFailed": "No se pudo activar el evento de reserva.", + "booking.updateFailed": "No se pudo actualizar el evento de reserva.", + "booking.deleteConfirm": "¿Eliminar “{name}”?", + "booking.deleteFailed": "No se pudo eliminar el evento de reserva.", + "booking.usernameUnavailable": "El nombre de usuario de reservas no está disponible.", + "booking.linkCopied": "Enlace de reserva copiado.", + "booking.copyFailed": "No se pudo copiar el enlace de reserva.", + "booking.events": "Eventos de reserva", + "booking.title": "Reservas", + "booking.description": "Define las reuniones que otras personas pueden reservar contigo.", + "booking.newEvent": "Evento nuevo", + "booking.none": "Aún no hay eventos de reserva", + "booking.noneHint": "Crea un evento para compartir tu disponibilidad.", + "booking.noLocation": "Sin ubicación definida", + "booking.copyLink": "Copiar enlace", + "booking.openPage": "Abrir la página de reservas de {name}", + "booking.turningOn": "Activando…", + "booking.turnOn": "Activar", + "booking.turnOff": "Desactivar", + "booking.moreOptions": "Más opciones para {name}", + "booking.edit": "Editar", + "booking.duration.hour": "1 hora", + "booking.duration.hours": "{count} horas", + "booking.duration.min": "{count} min", + "booking.noDays": "Ningún día seleccionado", + "booking.timeWindows": "{count} franjas horarias", + "booking.host.enterNameOrEmail": "Escribe un nombre o un correo.", + "booking.host.invalidEmail": "Correo no válido", + "booking.host.multiple": "Más de un usuario coincide. Escribe su dirección de correo.", + "booking.host.notFound": "Ningún usuario con ese nombre está en tu lista de usuarios.", + "booking.editor.details": "Detalles del evento", + "booking.editor.editColor": "Editar el color del evento", + "booking.editor.meetingName": "Nombre de la reunión", + "booking.editor.newMeeting": "Reunión nueva", + "booking.editor.toggleDetails": "Alternar los detalles del evento", + "booking.editor.slug": "Slug del enlace", + "booking.editor.slugPlaceholder": "reunion-nueva", + "booking.editor.yourName": "tu-nombre", + "booking.editor.eventSlug": "slug-del-evento", + "booking.editor.descriptionPlaceholder": "Cuenta a los invitados de qué trata esta reunión", + "booking.editor.color": "Color", + "booking.editor.duration": "Duración", + "booking.editor.meetingLength": "Duración de la reunión", + "booking.editor.minutes15": "15 minutos", + "booking.editor.minutes30": "30 minutos", + "booking.editor.minutes45": "45 minutos", + "booking.editor.hour1": "1 hora", + "booking.editor.custom": "Personalizada", + "booking.editor.customMinutes": "Minutos personalizados", + "booking.editor.location": "Ubicación", + "booking.editor.locationPlaceholder": "Llamada, enlace de vídeo o dirección", + "booking.editor.availability": "Disponibilidad", + "booking.editor.availableDays": "Días disponibles", + "booking.editor.times": "Horarios", + "booking.editor.removeTime": "Quitar el horario {n}", + "booking.editor.addTime": "Añadir horario", + "booking.editor.timesUse": "Los horarios usan {zone}.", + "booking.editor.host": "Anfitrión", + "booking.editor.unavailableUser": "Usuario no disponible", + "booking.editor.you": " (tú)", + "booking.editor.alreadyHost": "Este usuario ya es anfitrión.", + "booking.editor.maxHosts": "Una reserva puede tener hasta 20 anfitriones.", + "booking.editor.addHost": "Añadir un anfitrión", + "booking.editor.nameOrEmail": "Nombre o correo", + "booking.editor.add": "Añadir", + "booking.editor.userFallback": "Usuario", + "booking.editor.more": "Más", + "booking.editor.create": "Crear", + "booking.loading": "Cargando reservas", + "booking.loadingEllipsis": "Cargando reservas…", + "public.unavailable": "Esta reunión no está disponible.", + "public.bookFailed": "No se pudo reservar este horario. Inténtalo de nuevo.", + "public.bookFailedShort": "No se pudo reservar este horario.", + "public.backToCalendar": "Volver al calendario", + "public.allMeetings": "Todas las reuniones", + "public.minutes": "{count} min", + "public.booked": "Reunión reservada", + "public.scheduledFor": "Tu reunión está programada para {when}.", + "public.enterDetails": "Introduce tus datos", + "public.name": "Nombre", + "public.email": "Correo electrónico", + "public.guestEmails": "Correos de los invitados", + "public.commaSeparated": "(separados por comas)", + "public.addGuests": "Añadir invitados", + "public.notes": "Comparte cualquier información que ayude a preparar la reunión.", + "public.booking": "Reservando…", + "public.schedule": "Programar evento", + "public.prevMonth": "Mes anterior", + "public.nextMonth": "Mes siguiente", + "public.weekdayHeads": "Lu|Ma|Mi|Ju|Vi|Sá|Do", + "public.today": ", hoy", + "public.availableTimes": ", {count} horarios disponibles", + "public.noTimesDay": ", sin horarios disponibles", + "public.timeZone": "Zona horaria", + "public.noTimes60": "No hay horarios disponibles en los próximos 60 días.", + "public.noTimesDate": "No hay horarios disponibles en esta fecha. Elige otra fecha resaltada.", + "public.listUnavailable": "Esta página de reservas no está disponible.", + "public.bookMeeting": "Reservar una reunión", + "public.bookMeetingWith": "Reservar una reunión con {name}", + "public.chooseMeeting": "Elige una reunión para ver los horarios disponibles.", + "public.noMeetings": "No hay reuniones disponibles para reservar en este momento.", + "public.minutesLong": "{count} minutos", + "public.loadingAvailability": "Cargando disponibilidad", + "public.loadingAvailabilityEllipsis": "Cargando disponibilidad…", + "public.loadingMeetings": "Cargando reuniones", + "public.loadingMeetingsEllipsis": "Cargando reuniones…", + "agent.tool.list_emails.running": "Listando correos...", + "agent.tool.list_emails.completed": "Correos listados", + "agent.tool.list_emails.description": "Listó los correos de la carpeta del buzón seleccionada.", + "agent.tool.get_email.running": "Leyendo correo...", + "agent.tool.get_email.completed": "Correo leído", + "agent.tool.get_email.description": "Leyó un correo y los detalles de sus archivos adjuntos.", + "agent.tool.get_thread.running": "Leyendo conversación...", + "agent.tool.get_thread.completed": "Conversación leída", + "agent.tool.get_thread.description": "Leyó la conversación que contiene un correo.", + "agent.tool.search_emails.running": "Buscando correos...", + "agent.tool.search_emails.completed": "Correos buscados", + "agent.tool.search_emails.description": "Buscó en los asuntos y cuerpos de los correos de este buzón.", + "agent.tool.draft_email.running": "Redactando correo...", + "agent.tool.draft_email.completed": "Correo redactado", + "agent.tool.draft_email.description": "Guardó un borrador de correo nuevo para su revisión. No se envió ningún correo.", + "agent.tool.draft_reply.running": "Redactando respuesta...", + "agent.tool.draft_reply.completed": "Respuesta redactada", + "agent.tool.draft_reply.description": "Guardó un borrador de respuesta para su revisión. No se envió ningún correo.", + "agent.tool.mark_email_read.running": "Preparando el estado de lectura...", + "agent.tool.mark_email_read.completed": "Estado de lectura preparado", + "agent.tool.mark_email_read.description": "Preparó el cambio del estado de lectura de un correo para su aprobación.", + "agent.tool.move_email.running": "Preparando el traslado del correo...", + "agent.tool.move_email.completed": "Traslado de correo preparado", + "agent.tool.move_email.description": "Preparó el traslado de un correo para su aprobación.", + "agent.tool.move_emails.running": "Preparando el traslado de correos...", + "agent.tool.move_emails.completed": "Traslados de correos preparados", + "agent.tool.move_emails.description": "Preparó traslados de correos para su aprobación.", + "agent.tool.discard_draft.running": "Preparando la eliminación del borrador...", + "agent.tool.discard_draft.completed": "Eliminación de borrador preparada", + "agent.tool.discard_draft.description": "Preparó la eliminación de un borrador del asistente para su aprobación.", + "agent.tool.get_schedule.running": "Obteniendo la agenda...", + "agent.tool.get_schedule.completed": "Agenda obtenida", + "agent.tool.get_schedule.description": "Leyó los eventos del calendario en el intervalo solicitado.", + "agent.tool.search_events.running": "Buscando eventos...", + "agent.tool.search_events.completed": "Eventos buscados", + "agent.tool.search_events.description": "Buscó eventos del calendario.", + "agent.tool.get_event.running": "Leyendo evento...", + "agent.tool.get_event.completed": "Evento leído", + "agent.tool.get_event.description": "Leyó un evento del calendario.", + "agent.tool.create_event.running": "Creando evento...", + "agent.tool.create_event.completed": "Evento creado", + "agent.tool.create_event.description": "Creó un evento del calendario.", + "agent.tool.update_events.running": "Actualizando eventos...", + "agent.tool.update_events.completed": "Eventos actualizados", + "agent.tool.update_events.description": "Actualizó eventos del calendario.", + "agent.tool.delete_events.running": "Eliminando eventos...", + "agent.tool.delete_events.completed": "Eventos eliminados", + "agent.tool.delete_events.description": "Eliminó eventos del calendario.", + "agent.tool.find_free_time.running": "Buscando huecos libres...", + "agent.tool.find_free_time.completed": "Huecos libres encontrados", + "agent.tool.find_free_time.description": "Comprobó la disponibilidad del calendario.", + "agent.tool.get_calendars.running": "Obteniendo calendarios...", + "agent.tool.get_calendars.completed": "Calendarios obtenidos", + "agent.tool.get_calendars.description": "Listó los calendarios disponibles.", + "agent.tool.fallbackDescription": "Usó una herramienta de correo.", + "agent.tool.using": "Usando herramienta...", + "agent.tool.searchedCount.one": "Buscó {count} correo", + "agent.tool.searchedCount.other": "Buscó {count} correos", + "agent.tool.listedCount.one": "Listó {count} correo", + "agent.tool.listedCount.other": "Listó {count} correos", + "agent.tool.threadCount.one": "Leyó {count} correo de la conversación", + "agent.tool.threadCount.other": "Leyó {count} correos de la conversación", + "agent.tool.movedCount.one": "Movió {count} correo", + "agent.tool.movedCount.other": "Movió {count} correos", + "agent.tool.preparedCount.one": "Preparó {count} correo para su revisión", + "agent.tool.preparedCount.other": "Preparó {count} correos para su revisión", + "agent.welcome.sumThis": "Resumir este correo", + "agent.welcome.sumThisDetail": "Obtén los puntos clave", + "agent.welcome.reply": "Sugerir una respuesta", + "agent.welcome.replyDetail": "Crea un borrador para revisarlo", + "agent.welcome.actionsThis": "Listar tareas pendientes", + "agent.welcome.actionsThisDetail": "Encuentra los próximos pasos de este correo", + "agent.welcome.sumRecent": "Resumir el correo reciente", + "agent.welcome.sumRecentDetail": "Ponte al día con tu bandeja de entrada", + "agent.welcome.actions": "Encontrar tareas pendientes", + "agent.welcome.actionsDetail": "Mira qué necesita atención", + "agent.panel.settingsLoadFailed": "No se pudo cargar la configuración del asistente", + "agent.panel.conversationLoadFailed": "No se pudo cargar la conversación", + "agent.panel.conversationDeleteFailed": "No se pudo eliminar la conversación", + "agent.panel.unavailable": "Asistente no disponible", + "agent.panel.failed": "Falló el asistente", + "agent.panel.saveFailed": "No se pudo guardar la configuración", + "agent.panel.retryFailed": "No se pudo reintentar el borrador", + "agent.panel.discardFailed": "No se pudo descartar el borrador", + "agent.panel.reviewFailed": "No se pudo abrir la revisión del borrador", + "agent.panel.approveFailed": "No se pudo aprobar la acción", + "agent.panel.label": "Asistente de correo", + "agent.panel.backToAssistant": "Volver al asistente", + "agent.panel.settings": "Configuración", + "agent.panel.assistant": "Asistente", + "agent.panel.menuLabel": "Conversaciones y configuración del asistente", + "agent.panel.newChat": "Chat nuevo", + "agent.panel.previousChats": "Chats anteriores", + "agent.panel.deleteChatLabel": "Eliminar {title}", + "agent.panel.deleteChat": "Eliminar chat", + "agent.panel.noChats": "No hay chats anteriores", + "agent.panel.backToChat": "Volver al chat", + "agent.panel.exitFull": "Salir del asistente a tamaño completo", + "agent.panel.expandFull": "Expandir el asistente a tamaño completo", + "agent.panel.exitFullTitle": "Salir del tamaño completo", + "agent.panel.fullTitle": "Tamaño completo", + "agent.panel.close": "Cerrar asistente", + "agent.panel.configureProvider": "Configura un proveedor de IA para usar el chat y los borradores automáticos.", + "agent.panel.welcome": "¿En qué puedo ayudarte hoy?", + "agent.panel.autoDraftReady": "Borrador automático listo", + "agent.panel.openDraft": "Abrir borrador", + "agent.panel.regenerate": "Regenerar", + "agent.panel.discard": "Descartar", + "agent.panel.working": "Trabajando...", + "agent.panel.promptPlaceholder": "Escribe un mensaje aquí", + "agent.panel.stop": "Detener respuesta", + "agent.panel.send": "Enviar mensaje", + "agent.panel.needPermission": "Se necesita permiso de gestión del buzón para cambiar esta configuración.", + "agent.panel.reviewer": "Revisor de borradores", + "agent.panel.model": "Modelo", + "agent.panel.noModels": "No hay modelos configurados", + "agent.panel.autoDraft": "Redactar respuestas automáticamente", + "agent.panel.disableOoo": "Desactiva las respuestas automáticas de ausencia para activar los borradores de IA.", + "agent.panel.instructions": "Instrucciones de redacción", + "agent.panel.dailyLimit": "Límite diario de borradores automáticos", + "agent.panel.save": "Guardar configuración", + "agent.panel.privacy": "El contenido del correo y de la conversación seleccionados se envía al proveedor de IA configurado cuando usas el chat o los borradores automáticos. Los borradores siempre necesitan tu confirmación antes de enviarse.", + "agent.panel.retry": "Reintentar", + "agent.review.dialog": "Revisar el correo antes de enviarlo", + "agent.review.reviewSchedule": "Revisar y programar", + "agent.review.reviewSend": "Revisar y enviar", + "agent.review.confirmScheduled": "Confirma exactamente este borrador de IA antes de que se programe.", + "agent.review.confirmDelivered": "Confirma exactamente este borrador de IA antes de que se entregue.", + "agent.review.from": "De", + "agent.review.to": "Para", + "agent.review.cc": "Cc", + "agent.review.bcc": "Cco", + "agent.review.subject": "Asunto", + "agent.review.sendAt": "Enviar el", + "agent.review.attachments": "Archivos adjuntos: {list}", + "agent.review.deliveryNeedsReview": "La entrega necesita revisión", + "agent.review.couldNotSend": "No se pudo enviar", + "agent.review.scheduling": "Programando…", + "agent.review.sending": "Enviando…", + "agent.review.confirmSchedule": "Confirmar y programar", + "agent.review.confirmSend": "Confirmar y enviar", + "agent.turn.waiting": "Esperando al modelo...", + "agent.turn.noDetails": "No se proporcionaron detalles de la herramienta.", + "agent.turn.workedFor": "Trabajó durante {duration}", + "agent.turn.workDetails": "Detalles del trabajo", + "agent.activity.attachments": "Archivos adjuntos: {list}", + "agent.activity.attachment": "archivo adjunto", + "agent.activity.editDraft": "Editar borrador", + "agent.activity.schedule": "Programar", + "agent.activity.approveSend": "Aprobar para enviar", + "agent.activity.approving": "Aprobando…", + "agent.activity.approveDiscard": "Aprobar eliminación", + "agent.activity.approveStatus": "Aprobar cambio de estado", + "agent.activity.approveMove": "Aprobar traslado a {destination}", + "agent.queue.label": "Mensajes del asistente en cola", + "agent.queue.edit": "Editar mensaje en cola", + "agent.queue.steerTitle": "Detener la respuesta actual y enviar este mensaje a continuación", + "agent.queue.sendNowTitle": "Enviar ahora este mensaje en cola", + "agent.queue.steer": "Dirigir", + "agent.queue.sendNow": "Enviar ahora", + "agent.queue.remove": "Quitar mensaje en cola", + "agent.loadingConversation": "Cargando conversación", + "importPage.others": "Otras", + "importPage.selectSections": "Selecciona las secciones de origen", + "importPage.selectMailboxFirst": "Primero selecciona un buzón", + "importPage.preparing": "Preparando archivos", + "importPage.uploading": "Subiendo archivos", + "importPage.importingMessages": "Importando mensajes", + "importPage.fileFailed": "Error al importar el archivo", + "importPage.discovering": "Descubriendo carpetas IMAP", + "importPage.importingSource": "Importando {source}", + "importPage.importingSourceProgress": "Importando {source} ({processed}/{total} mensajes)", + "importPage.importedSource": "{source} importado", + "importPage.imapFailed": "Error en la importación IMAP", + "importPage.title": "Importar buzón", + "importPage.description": "Elige qué importar y cómo debe recibirlo Mailflare.", + "importPage.source": "Origen de la importación", + "importPage.backupFile": "Archivo de copia de seguridad", + "importPage.imap": "IMAP", + "importPage.chooseSections": "Elige las secciones que importar", + "importPage.selected": "Seleccionadas", + "importPage.selectFile": "Selecciona el archivo de copia de seguridad", + "importPage.fileHint": "Sube archivos .eml o .mbox exportados. Las exportaciones en archivo no incluyen de forma fiable los metadatos de la sección de origen, así que los archivos se importan una sola vez en {section}", + "importPage.othersNote": "Las otras carpetas se pueden importar automáticamente desde IMAP. La importación de archivos no puede descubrir a qué sección pertenece un mensaje.", + "importPage.importFiles": "Importar los archivos seleccionados", + "importPage.host": "Host", + "importPage.port": "Puerto", + "importPage.username": "Nombre de usuario", + "importPage.passwordOrApp": "Contraseña o contraseña de aplicación", + "importPage.perBatch": "Mensajes por lote", + "importPage.perSource": "Límite de mensajes por origen", + "importPage.importAll": "Importar todos los mensajes (los más recientes primero, por lotes)", + "importPage.useTls": "Usar TLS", + "importPage.imapNote": "IMAP importa automáticamente las secciones de origen seleccionadas. Las carpetas se descubren en la cuenta de origen y se importan a carpetas de Mailflare nuevas o existentes que coincidan.", + "importPage.importSources": "Importar los orígenes seleccionados", + "layout.resizeMenu": "Cambiar el tamaño del menú lateral", + "nav.loadingPage": "Cargando página", + "message.blockRemote": "Bloquear contenido remoto", + "message.allowRemote": "Permitir contenido remoto" +} diff --git a/src/lib/i18n/fr.json b/src/lib/i18n/fr.json new file mode 100644 index 0000000..214fbe0 --- /dev/null +++ b/src/lib/i18n/fr.json @@ -0,0 +1,1863 @@ +{ + "navigation.compose": "Écrire", + "navigation.inbox": "Boîte de réception", + "navigation.starred": "Suivis", + "navigation.snoozed": "Reportés", + "navigation.sent": "Envoyés", + "navigation.drafts": "Brouillons", + "navigation.archived": "Archivés", + "navigation.spam": "Spam", + "navigation.trash": "Corbeille", + "navigation.more": "Plus...", + "navigation.less": "Afficher moins...", + "navigation.folders": "Dossiers", + "navigation.noFolders": "Aucun dossier pour le moment", + "navigation.createFolder": "Créer un dossier", + "navigation.folderDescription": "Ajoutez un dossier à la boîte mail sélectionnée.", + "navigation.folderName": "Nom du dossier", + "navigation.folderExample": "Reçus", + "navigation.color": "Couleur", + "navigation.folderColor": "Couleur du dossier", + "navigation.creating": "Création...", + "navigation.expandMenu": "Développer le menu", + "navigation.collapseMenu": "Réduire le menu", + "navigation.openMenu": "Ouvrir le menu", + "navigation.close": "Fermer", + "navigation.shortcuts": "Raccourcis", + "navigation.poweredBy": "Propulsé par", + "color.blue": "Bleu", + "color.purple": "Violet", + "color.pink": "Rose", + "color.red": "Rouge", + "color.orange": "Orange", + "color.amber": "Ambre", + "color.green": "Vert", + "color.teal": "Sarcelle", + "language.label": "Langue", + "common.archive": "Archiver", + "common.unarchive": "Désarchiver", + "common.notSpam": "Pas du spam", + "common.reportSpam": "Signaler comme spam", + "common.restore": "Restaurer", + "common.delete": "Supprimer", + "common.deleteForever": "Supprimer définitivement", + "common.markRead": "Marquer comme lu", + "common.markUnread": "Marquer comme non lu", + "common.moveSelected": "Déplacer les messages sélectionnés", + "common.moveTo": "Déplacer vers", + "common.clearSelection": "Effacer la sélection", + "common.moreActions": "Plus d'actions", + "common.selectedCount": "{count} sélectionné(s)", + "common.chooseBulkAction": "Choisissez une action à appliquer aux e-mails sélectionnés.", + "common.trash": "Corbeille", + "common.snooze": "Reporter", + "common.unsnooze": "Annuler le report", + "common.snoozing": "Report en cours...", + "snooze.title": "Reporter l'e-mail", + "snooze.description": "Masquer cet e-mail de la boîte de réception jusqu'à l'heure de votre choix.", + "snooze.selectDateTime": "Sélectionnez la date et l'heure ({timeZone})", + "snooze.failed": "Impossible de reporter le message", + "thread.messagesCollapsed.older.one": "{count} message plus ancien", + "thread.messagesCollapsed.older.other": "{count} messages plus anciens", + "thread.messagesCollapsed.newer.one": "{count} message plus récent", + "thread.messagesCollapsed.newer.other": "{count} messages plus récents", + "thread.earlier": "Messages précédents de cette conversation", + "thread.later": "Messages suivants de cette conversation", + "thread.expand": "Développer {label}", + "thread.to": "à {recipients}", + "thread.noPreview": "Aucun aperçu", + "thread.attachmentCount.one": "{count} pièce jointe", + "thread.attachmentCount.other": "{count} pièces jointes", + "snooze.tomorrow": "Demain", + "snooze.nextWeek": "La semaine prochaine", + "snooze.nextMonth": "Le mois prochain", + "message.reply": "Répondre", + "message.replyAll": "Répondre à tous", + "message.forward": "Transférer", + "message.showOriginal": "Afficher l'original", + "message.blockContact": "Bloquer le contact", + "message.star": "Suivre", + "message.removeStar": "Ne plus suivre", + "message.error.star": "Impossible de mettre à jour le suivi", + "message.error.reply": "Impossible de démarrer la réponse", + "message.error.forward": "Impossible de démarrer le transfert", + "message.error.update": "Impossible de mettre à jour le message", + "message.error.block": "Impossible de bloquer le contact", + "message.nav.newer": "E-mail plus récent", + "message.nav.older": "E-mail plus ancien", + "message.nav.unreadPosition": "{position} sur {total} non lus", + "message.nav.backTo": "Retour à {folder}", + "message.nav.hideList": "Masquer la liste des e-mails", + "message.nav.showList": "Afficher la liste des e-mails", + "message.nav.listUnavailable": "Liste des e-mails indisponible", + "message.quote.toggle": "Afficher/masquer l'e-mail cité", + "message.quote.title": "Afficher ou masquer l'e-mail cité", + "message.spam.unavailable": "Analyse du spam indisponible", + "message.spam.score": "Score de spam : {score} · {verdict}", + "message.spam.inbox": "boîte de réception", + "message.spam.failed": "Le filtre n'a pas pu analyser ce message. Il a été distribué normalement.", + "message.spam.why": "Pourquoi Mailflare a attribué ce score", + "message.spam.none": "Aucun signal de spam significatif n'a été détecté.", + "source.title": "Message d'origine", + "source.description": "Détails du message et source complète, y compris les en-têtes et le corps MIME.", + "source.loading": "Chargement de la source…", + "source.loadFailed": "Impossible de charger le message d'origine", + "source.messageId": "ID du message", + "source.createdAt": "Créé le", + "source.from": "De", + "source.to": "À", + "source.subject": "Objet", + "source.unavailable": "Indisponible", + "source.passed": "{method} réussi", + "source.noResult": "Aucun résultat dans les en-têtes du message", + "source.download": "Télécharger l'original", + "source.couldNotCopy": "Impossible de copier", + "source.copied": "Copié", + "source.copy": "Copier dans le presse-papiers", + "actions.error.update": "Impossible de mettre à jour le message", + "actions.error.delete": "Impossible de supprimer le message", + "actions.error.trashRule": "Impossible de créer la règle de corbeille", + "actions.moveToTrash": "Déplacer vers la corbeille", + "actions.moveToTrashHint": "Déplacer vers la corbeille (#)", + "actions.archiveHint": "Archiver (e)", + "actions.reportSpamHint": "Signaler comme spam (!)", + "actions.deleteHint": "Supprimer (#)", + "actions.replyHint": "Répondre (r)", + "actions.unsubscribe": "Se désabonner", + "shortcut.archiveMessage": "Archiver le message", + "shortcut.moveToTrash": "Déplacer vers la corbeille", + "shortcut.replyToMessage": "Répondre au message", + "shortcut.reportSpam": "Signaler comme spam", + "shortcut.backToList": "Retour à la liste", + "folder.empty.inbox": "Aucun e-mail", + "folder.empty.starred": "Aucun e-mail suivi", + "folder.empty.snoozed": "Aucun e-mail reporté", + "folder.empty.archived": "Aucun e-mail archivé", + "folder.empty.spam": "Aucun spam", + "folder.empty.trash": "Aucun e-mail dans la corbeille", + "list.noMatch": "Aucun message ne correspond à ces filtres", + "list.draft": "Brouillon", + "list.unknownSender": "Expéditeur inconnu", + "list.noRecipient": "Aucun destinataire", + "list.noContent": "Aucun contenu", + "list.noSubject": "(sans objet)", + "list.markUnread": "Marquer comme non lu", + "list.markRead": "Marquer comme lu", + "list.starred": "Suivi", + "list.notStarred": "Non suivi", + "list.selectFrom": "Sélectionner le message de {sender}", + "list.selectMessage": "Sélectionner le message", + "list.selectAll": "Sélectionner tous les messages visibles", + "list.range": "{start} - {end} sur {total}", + "list.previousPage": "Page précédente", + "list.nextPage": "Page suivante", + "list.showingUnread": "Affichage des e-mails non lus", + "list.showUnreadOnly": "Afficher uniquement les e-mails non lus", + "list.emptying": "Vidage…", + "list.emptyFolder": "Vider {folder}", + "list.emptyFailed": "Impossible de vider {folder}. Veuillez réessayer.", + "delete.confirm.one": "Supprimer définitivement ce message ? Cette action est irréversible.", + "delete.confirm.other": "Supprimer définitivement ces {count} messages ? Cette action est irréversible.", + "empty.confirm.single": "Supprimer définitivement l'unique message de {folder} ? Cette action est irréversible.", + "empty.confirm.multiple": "Supprimer définitivement les {count} messages de {folder} ? Cette action est irréversible.", + "empty.confirm.all": "Supprimer définitivement tous les messages de {folder} ? Cette action est irréversible.", + "error.updateSelected": "Impossible de mettre à jour les messages sélectionnés", + "error.emptyFolder": "Impossible de vider le dossier", + "list.resize": "Redimensionner la liste des messages", + "compose.error.loadDraft": "Échec du chargement du brouillon", + "compose.error.noRecipient": "Ajoutez au moins un destinataire", + "compose.error.invalidAddress": "« {address} » n'est pas une adresse e-mail valide", + "compose.error.emptyBody": "Rédigez un message avant d'envoyer", + "compose.error.draftAttachments": "Impossible d'ajouter les pièces jointes au brouillon", + "compose.error.saveForReview": "Impossible d'enregistrer le brouillon pour révision", + "compose.error.aiMetadata": "Les métadonnées du brouillon IA sont manquantes", + "compose.error.createReview": "Impossible de créer la révision", + "compose.error.reviewDraft": "Impossible de réviser le brouillon", + "compose.error.sendFailed": "Échec de l'envoi", + "compose.error.deleteDraft": "Impossible de supprimer le brouillon", + "compose.error.removeAttachment": "Impossible de retirer la pièce jointe", + "compose.error.maxAttachments": "Un message peut contenir au maximum 10 pièces jointes", + "compose.error.attachmentSize": "Chaque pièce jointe doit faire {max} Mo ou moins", + "compose.error.totalSize": "Les pièces jointes doivent totaliser {max} Mo ou moins", + "compose.scheduled": "Message programmé", + "compose.sent": "Message envoyé", + "compose.carriedOver": "Repris du message transféré", + "compose.removeAttachment": "Retirer la pièce jointe", + "compose.cloudWarning.will": "Cloudflare limite les e-mails classiques à 5 Mio, encodage compris. Les fichiers de plus de 3 Mo seront ici envoyés sous forme de liens de téléchargement R2 valables 30 jours.", + "compose.cloudWarning.may": "Cloudflare limite les e-mails classiques à 5 Mio, encodage compris. Les fichiers de plus de 3 Mo, ou ceux qui dépassent la limite du message, peuvent être envoyés sous forme de liens de téléchargement R2 valables 30 jours.", + "compose.dialogLabel": "Rédiger un message", + "compose.dropFiles": "Déposez des fichiers pour les joindre", + "compose.title.loading": "Chargement du brouillon", + "compose.title.reply": "Réponse", + "compose.title.forward": "Transfert", + "compose.title.saved": "Brouillon enregistré", + "compose.title.new": "Nouveau message", + "compose.restore": "Restaurer l'éditeur", + "compose.minimize": "Réduire l'éditeur", + "compose.restoreFloating": "Restaurer l'éditeur flottant", + "compose.openModal": "Ouvrir l'éditeur en fenêtre modale", + "compose.close": "Fermer l'éditeur", + "compose.from": "De", + "compose.selectMailboxFirst": "Sélectionnez d'abord une boîte mail", + "compose.to": "À", + "compose.toPlaceholder": "Destinataires, ou « Maya Chen » ", + "compose.cc": "Cc", + "compose.bcc": "Cci", + "compose.ccPlaceholder": "Copie carbone", + "compose.bccPlaceholder": "Copie carbone invisible, masquée aux autres destinataires", + "compose.subject": "Objet", + "compose.body": "Corps", + "compose.bodyPlaceholder": "Rédigez votre message", + "compose.preparing": "Préparation…", + "compose.schedule": "Programmer", + "compose.reviewSend": "Vérifier l'envoi", + "compose.send": "Envoyer", + "compose.attachTooltip": "Joindre des fichiers (jusqu'à {max} Mo au total). Les fichiers de plus de 3 Mo sont envoyés sous forme de liens de téléchargement R2 valables 30 jours.", + "compose.attachFiles": "Joindre des fichiers", + "compose.deleteDraft": "Supprimer le brouillon", + "editor.bold": "Gras (⌘B)", + "editor.italic": "Italique (⌘I)", + "editor.underline": "Souligné (⌘U)", + "editor.strikethrough": "Barré", + "editor.bulletedList": "Liste à puces", + "editor.numberedList": "Liste numérotée", + "editor.quote": "Citation", + "editor.messageBody": "Corps du message", + "editor.hideQuoted": "Masquer le texte cité", + "editor.showQuoted": "Afficher le texte cité", + "editor.insertLinkHint": "Insérer un lien (⌘K)", + "editor.insertLink": "Insérer un lien", + "editor.clearFormatting": "Effacer la mise en forme", + "editor.apply": "Appliquer", + "schedule.optionsLabel": "Options d'envoi programmé", + "schedule.heading": "Programmer", + "schedule.clear": "Supprimer la programmation", + "schedule.pick": "Choisir la date et l'heure ({timeZone})", + "schedule.laterToday": "Plus tard aujourd'hui", + "schedule.in3Hours": "Dans 3 heures", + "schedule.tomorrowMorning": "Demain matin", + "schedule.mondayMorning": "Lundi matin", + "template.menu": "Modèle", + "template.none": "Aucun modèle pour le moment", + "template.untitled": "Sans titre", + "template.delete": "Supprimer le modèle", + "template.new": "Nouveau modèle", + "template.title": "Titre", + "template.content": "Contenu", + "template.saving": "Enregistrement…", + "template.save": "Enregistrer le modèle", + "template.saveFailed": "Impossible d'enregistrer le modèle", + "recipient.remove": "Retirer {address}", + "search.mail": "Rechercher dans les e-mails", + "search.mailHint": "Rechercher dans les e-mails (appuyez sur / pour cibler)", + "search.clear": "Effacer la recherche", + "search.openPalette": "Ouvrir la palette de commandes (⌘K)", + "notification.newEmail": "Nouvel e-mail", + "notification.from": "De {sender}", + "notification.dismiss": "Ignorer la notification", + "attachment.image": "Image", + "attachment.video": "Vidéo", + "attachment.audio": "Audio", + "attachment.pdf": "PDF", + "attachment.spreadsheet": "Feuille de calcul", + "attachment.presentation": "Présentation", + "attachment.archive": "Archive compressée", + "attachment.code": "Code", + "attachment.document": "Document", + "attachment.file": "Fichier", + "attachment.loadFailed": "Impossible de charger cette pièce jointe", + "attachment.unsupported": "Ce type de fichier ne peut pas être prévisualisé en toute sécurité dans le navigateur.", + "attachment.download": "Télécharger", + "auth.logout": "Se déconnecter", + "license.upgrade": "Passer à l'offre supérieure", + "contact.title": "Détails du contact", + "contact.description": "Modifiez la façon dont ce contact apparaît dans votre boîte mail.", + "contact.name": "Nom", + "contact.email": "E-mail", + "contact.source": "Source", + "contact.sourceEmail": "E-mail", + "contact.lastSeen": "Dernière activité", + "contact.unknown": "Inconnu", + "contact.blocked": "Contact bloqué", + "contact.save": "Enregistrer le contact", + "contact.saving": "Enregistrement...", + "contact.loadFailed": "Impossible de charger le contact", + "contact.updateFailed": "Impossible de mettre à jour le contact", + "avatar.change": "Modifier la photo de profil de {name}", + "avatar.upload": "Importer la photo de profil de {name}", + "avatar.title": "Photo de profil", + "avatar.contactHint": "Importez une photo personnalisée pour ce contact.", + "avatar.remove": "Supprimer la photo", + "avatar.uploadFailed": "Échec de l'importation", + "avatar.removeFailed": "Impossible de supprimer la photo de profil", + "account.sharedInbox": "Boîte partagée", + "account.openMenu": "Ouvrir le menu du compte", + "account.fallbackName": "Compte", + "account.calendar": "Agenda", + "account.settings": "Paramètres", + "account.inboxes": "Boîtes ({count})", + "account.otherAccounts": "Autres comptes", + "account.admin": "Administration", + "account.addAnother": "Ajouter un autre compte", + "account.signOut": "Se déconnecter", + "account.profilePicture": "Photo de profil de {name}", + "nav.loading": "Chargement", + "admin.nav.overview": "Vue d'ensemble", + "admin.nav.email": "E-mail", + "admin.nav.mailboxes": "Boîtes mail", + "admin.nav.domains": "Domaines", + "admin.nav.routing": "Routage", + "admin.nav.webhooks": "Webhooks", + "admin.nav.administration": "Administration", + "admin.nav.apiKeys": "Clés d'API", + "admin.nav.general": "Général", + "admin.nav.agent": "Agent", + "admin.nav.accounts": "Comptes", + "admin.nav.activity": "Activité", + "admin.nav.backups": "Sauvegardes", + "admin.nav.product": "Produit", + "admin.nav.branding": "Personnalisation", + "admin.nav.licenses": "Licences", + "settings.nav.menu": "Menu des paramètres", + "settings.nav.settings": "Paramètres", + "settings.nav.account": "Compte", + "settings.nav.inbox": "Boîte de réception", + "settings.nav.security": "Sécurité", + "settings.nav.apiKeys": "Clés d'API", + "settings.nav.appPasswords": "Mots de passe d'application", + "settings.nav.rules": "Règles et routage", + "settings.nav.mailbox": "Boîte mail", + "settings.nav.import": "Importer", + "settings.nav.export": "Exporter", + "accountSettings.menu": "Menu des paramètres du compte", + "accountSettings.title": "Paramètres du compte", + "accountSettings.details": "Détails", + "accountSettings.password": "Mot de passe", + "accountSettings.permissions": "Autorisations", + "accountSettings.mailboxes": "Boîtes mail", + "shortcut.commandPalette": "Palette de commandes", + "shortcut.cheatSheet": "Aide-mémoire des raccourcis", + "shortcut.compose": "Écrire un e-mail", + "shortcut.searchMail": "Rechercher dans les e-mails", + "shortcut.goInbox": "Aller à la boîte de réception", + "shortcut.goStarred": "Aller à Suivis", + "shortcut.goSnoozed": "Aller à Reportés", + "shortcut.goSent": "Aller à Envoyés", + "shortcut.goDrafts": "Aller à Brouillons", + "shortcut.goArchived": "Aller à Archivés", + "shortcut.goSpam": "Aller à Spam", + "shortcut.goTrash": "Aller à la Corbeille", + "shortcut.dismiss": "Fermer la fenêtre / Retirer le focus", + "shortcut.category.Navigation": "Navigation", + "shortcut.category.Actions": "Actions", + "shortcut.category.Composing": "Rédaction", + "shortcut.category.Selection": "Sélection", + "shortcut.category.General": "Général", + "shortcut.category.Settings": "Paramètres", + "shortcut.category.Mailboxes": "Boîtes mail", + "palette.composeTitle": "Rédiger un nouveau message", + "palette.composeSubtitle": "Ouvrir l'éditeur de brouillons", + "palette.accountTitle": "Paramètres du compte", + "palette.accountSubtitle": "Profil, mot de passe et préférences", + "palette.helpTitle": "Aide-mémoire des raccourcis clavier", + "palette.helpSubtitle": "Voir tous les raccourcis", + "palette.placeholder": "Saisissez une commande ou recherchez des actions...", + "palette.noMatch": "Aucune commande trouvée pour « {query} »", + "palette.navigate": "pour naviguer", + "palette.select": "pour sélectionner", + "palette.actions": "Actions Mailflare", + "shortcutsHelp.title": "Raccourcis clavier", + "shortcutsHelp.subtitle": "Raccourcis de type Superhuman et Gmail", + "shortcutsHelp.close": "Fermer", + "shortcutsHelp.pressToToggle": "Appuyez sur {key} pour basculer", + "shortcutsHelp.pressToClose": "Appuyez sur {key} pour fermer", + "shortcutsHelp.ctrl": "Ctrl", + "common.saved": "Enregistré", + "common.saving": "Enregistrement...", + "common.name": "Nom", + "common.cancel": "Annuler", + "common.loading": "Chargement...", + "settings.account.loadFailed": "Échec du chargement du compte", + "settings.account.detailsTitle": "Détails du compte", + "settings.account.detailsDescription": "Gérez votre identité, vos options de récupération et vos préférences d'e-mail.", + "settings.account.forwardingTitle": "E-mail de transfert", + "settings.account.forwardingDescription": "Envoyez une copie des messages entrants à une autre adresse e-mail.", + "settings.account.signatureTitle": "Signature d'e-mail", + "settings.account.signatureDescription": "Configurez la signature de la boîte sélectionnée ci-dessus.", + "settings.profile.updateFailed": "Échec de la mise à jour du compte", + "settings.profile.recoveryFailed": "Échec de la mise à jour de l'e-mail de récupération", + "settings.profile.pictureTitle": "Photo de profil", + "settings.profile.pictureDescription": "Choisissez une photo à afficher sur l'ensemble de votre compte.", + "settings.profile.currentEmail": "E-mail actuel", + "settings.profile.save": "Enregistrer le profil", + "settings.profile.recoveryTitle": "E-mail de récupération", + "settings.profile.recoveryDescription": "Utilisé pour récupérer l'accès si vous ne pouvez pas vous connecter.", + "settings.profile.emailAddress": "Adresse e-mail", + "settings.profile.saveRecovery": "Enregistrer l'e-mail de récupération", + "settings.password.mismatch": "Les nouveaux mots de passe ne correspondent pas", + "settings.password.changed": "Mot de passe modifié", + "settings.password.failed": "Échec de la modification du mot de passe", + "settings.password.current": "Mot de passe actuel", + "settings.password.new": "Nouveau mot de passe", + "settings.password.confirm": "Confirmer le nouveau mot de passe", + "settings.password.changing": "Modification...", + "settings.password.change": "Modifier le mot de passe", + "settings.theme.system": "Suivre le système", + "settings.theme.light": "Clair", + "settings.theme.dark": "Sombre", + "settings.theme.label": "Thème", + "settings.theme.description": "Utilisez une interface claire ou sombre, ou suivez le réglage du système. Enregistré dans ce navigateur.", + "settings.notifications.title": "Notifications du navigateur", + "settings.notifications.description": "Affiche une notification pour les nouveaux e-mails lorsque Mailflare est ouvert dans un onglet en arrière-plan.", + "settings.notifications.saveFailed": "Impossible d'enregistrer la préférence de notification dans ce navigateur.", + "settings.notifications.enableFailed": "Impossible d'activer les notifications du navigateur.", + "settings.notifications.enable": "Activer les notifications du navigateur", + "settings.notifications.blocked": "Les notifications sont bloquées. Autorisez-les dans les paramètres du site de votre navigateur pour activer cette option.", + "settings.notifications.unavailable": "Les notifications du navigateur ne sont pas disponibles ici.", + "settings.mailbox.updateFailed": "Échec de la mise à jour de la boîte mail", + "settings.mailbox.title": "Paramètres", + "settings.mailbox.selectToView": "Sélectionnez une boîte mail pour voir ses paramètres.", + "settings.mailbox.saveChanges": "Enregistrer les modifications", + "settings.forwarding.failed": "Échec de la mise à jour de l'e-mail de transfert", + "settings.forwarding.destination": "E-mail de destination", + "settings.forwarding.hint": "Les e-mails entrants seront aussi envoyés à cette destination Cloudflare Email Routing vérifiée.", + "settings.forwarding.save": "Enregistrer le transfert", + "settings.signature.failed": "Échec de la mise à jour de la signature", + "settings.signature.loadingInbox": "Chargement de la boîte…", + "settings.signature.selectInbox": "Sélectionnez une boîte pour configurer sa signature.", + "settings.signature.for": "Signature de {address}", + "settings.signature.placeholder": "Votre nom\nFonction ou entreprise\nCoordonnées", + "settings.signature.hint": "Cette signature est ajoutée lors de la rédaction depuis la boîte sélectionnée. Le texte brut ou le HTML sont pris en charge ; le HTML est nettoyé.", + "settings.signature.preview": "Aperçu", + "settings.signature.save": "Enregistrer la signature", + "settings.signature.needFullAccess": "Un accès complet est requis pour modifier cette signature.", + "settings.autoReply.needMessage": "Saisissez un message de réponse automatique avant de l'activer.", + "settings.autoReply.failed": "Échec de la mise à jour de la réponse automatique", + "settings.autoReply.selectInbox": "Sélectionnez une boîte pour configurer la réponse automatique.", + "settings.autoReply.enableFor": "Activer la réponse automatique pour {address}", + "settings.autoReply.limit": "Chaque expéditeur reçoit au plus une réponse automatique toutes les 24 heures.", + "settings.autoReply.subject": "Objet", + "settings.autoReply.subjectPlaceholder": "Absent du bureau", + "settings.autoReply.message": "Message", + "settings.autoReply.messagePlaceholder": "Merci pour votre message. Je suis actuellement absent et je répondrai à mon retour.", + "settings.autoReply.save": "Enregistrer", + "settings.autoReply.needFullAccess": "Un accès complet est requis pour modifier la réponse automatique.", + "settings.timeZone.failed": "Impossible d'enregistrer le fuseau horaire", + "settings.timeZone.title": "Fuseau horaire", + "settings.timeZone.description": "Choisissez le fuseau horaire utilisé pour les dates, la recherche et la programmation. Laissez vide pour suivre cet appareil ({zone}).", + "settings.timeZone.placeholder": "Fuseau horaire de l'appareil ({zone})", + "settings.timeZone.current": "Heure actuelle : {time}", + "settings.timeZone.save": "Enregistrer le fuseau horaire", + "common.done": "Terminé", + "common.copied": "Copié", + "common.password": "Mot de passe", + "common.pleaseWait": "Veuillez patienter...", + "common.continue": "Continuer", + "common.revoke": "Révoquer", + "common.revoking": "Révocation…", + "common.none": "Aucun", + "mfa.loadFailed": "Échec du chargement", + "mfa.loading": "Chargement des paramètres d'authentification à deux facteurs...", + "mfa.on": "L'authentification à deux facteurs est activée", + "mfa.off": "L'authentification à deux facteurs est désactivée", + "mfa.onDescription.one": "La connexion demande un code de votre application d'authentification. {count} code de récupération restant.", + "mfa.onDescription.other": "La connexion demande un code de votre application d'authentification. {count} codes de récupération restants.", + "mfa.offDescription": "Ajoutez une seconde étape à la connexion avec une application d'authentification comme 1Password, Google Authenticator ou Authy.", + "mfa.newRecoveryCodes": "Nouveaux codes de récupération", + "mfa.turnOff": "Désactiver", + "mfa.turnOn": "Activer l'authentification à deux facteurs", + "mfa.copyCodes": "Copier les codes", + "mfa.codesHint": "Chaque code ne fonctionne qu'une fois. Conservez-les en lieu sûr ; ils sont le seul moyen d'accès si vous perdez votre application d'authentification.", + "mfa.startFailed": "Impossible de démarrer", + "mfa.confirmFailed": "Impossible de confirmer", + "mfa.enrollTitle": "Activer l'authentification à deux facteurs", + "mfa.enrollDescription": "Confirmez votre mot de passe pour commencer.", + "mfa.scanTitle": "Scannez le code", + "mfa.scanDescription": "Ouvrez votre application d'authentification, ajoutez un compte en scannant ce code, puis saisissez le code à 6 chiffres affiché.", + "mfa.cantScan": "Impossible de scanner ? Saisissez la clé manuellement", + "mfa.sixDigitCode": "Code à 6 chiffres", + "mfa.checking": "Vérification...", + "mfa.verifyAndTurnOn": "Vérifier et activer", + "mfa.saveCodesTitle": "Enregistrez vos codes de récupération", + "mfa.saveCodesDescription": "L'authentification à deux facteurs est activée. Les autres sessions ont été déconnectées.", + "mfa.turnOffFailed": "Impossible de désactiver", + "mfa.turnOffTitle": "Désactiver l'authentification à deux facteurs", + "mfa.turnOffDescription": "Confirmez votre mot de passe et un code actuel ou un code de récupération.", + "mfa.code": "Code", + "mfa.generateFailed": "Impossible de générer les codes", + "mfa.newCodesTitle": "Vos nouveaux codes de récupération", + "mfa.newCodesDescription": "Les codes précédents ne fonctionnent plus.", + "mfa.generateTitle": "Générer de nouveaux codes de récupération", + "mfa.generateDescription": "Cela remplace tous les codes existants. Confirmez votre mot de passe pour continuer.", + "mfa.generate": "Générer", + "avatar.profile": "Profil", + "avatar.changeShort": "Modifier", + "avatar.uploadShort": "Importer", + "apiKeys.mcpRead.label": "Lire les e-mails", + "apiKeys.mcpRead.description": "Lister, rechercher et lire des messages.", + "apiKeys.mcpDraft.label": "Gérer les brouillons", + "apiKeys.mcpDraft.description": "Créer, modifier et supprimer des brouillons.", + "apiKeys.mcpOrganize.label": "Organiser les e-mails", + "apiKeys.mcpOrganize.description": "Marquer des messages comme lus et les déplacer.", + "apiKeys.mcpRequestSend.label": "Demander une validation d'envoi", + "apiKeys.mcpRequestSend.description": "Proposer un envoi que vous devez confirmer dans Mailflare.", + "apiKeys.mcpCalendarRead.label": "Lire l'agenda", + "apiKeys.mcpCalendarRead.description": "Lister, rechercher et consulter les événements et les créneaux libres.", + "apiKeys.mcpCalendarWrite.label": "Gérer l'agenda", + "apiKeys.mcpCalendarWrite.description": "Créer, modifier et supprimer des événements.", + "apiKeys.read.label": "Lire les e-mails", + "apiKeys.read.description": "Lire des messages via l'API.", + "apiKeys.send.label": "Envoyer des e-mails", + "apiKeys.send.description": "Envoyer des messages directement via l'API.", + "apiKeys.calendarRead.label": "Lire l'agenda", + "apiKeys.calendarRead.description": "Lire vos événements d'agenda via l'API.", + "apiKeys.calendarWrite.label": "Gérer l'agenda", + "apiKeys.calendarWrite.description": "Créer, modifier et supprimer vos événements d'agenda via l'API.", + "apiKeys.loadFailed": "Impossible de charger les clés d'API", + "apiKeys.createFailed": "Impossible de créer la clé d'API", + "apiKeys.revokeConfirm": "Révoquer « {name} » ? Les applications qui utilisent cette clé perdront immédiatement l'accès.", + "apiKeys.revokeFailed": "Impossible de révoquer la clé d'API", + "apiKeys.title": "Clés d'API", + "apiKeys.new": "Nouvelle clé d'API", + "apiKeys.createdTitle": "Clé d'API créée", + "apiKeys.createTitle": "Créer une clé d'API", + "apiKeys.copyNow": "Copiez cette clé maintenant. Elle ne s'affichera qu'une seule fois.", + "apiKeys.nameAndAccess": "Nommez votre clé et choisissez l'accès dont elle a besoin.", + "apiKeys.keyName": "Nom de la clé", + "apiKeys.namePlaceholder": "Mon intégration", + "apiKeys.allowMcp": "Autoriser l'accès MCP", + "apiKeys.allowMcpHint": "Utilisez cette clé avec un client MCP. L'envoi nécessite toujours votre confirmation dans Mailflare.", + "apiKeys.allowJmap": "Autoriser l'accès JMAP", + "apiKeys.jmapNeedsStandard": "L'accès JMAP nécessite une clé d'API standard distincte.", + "apiKeys.jmapHint": "Lisez et envoyez des e-mails depuis un client JMAP.", + "apiKeys.permissions": "Autorisations", + "apiKeys.allowedMailboxes": "Boîtes mail autorisées", + "apiKeys.noMailboxes": "Aucune boîte mail accessible.", + "apiKeys.aliasHint": "Les alias partagent la boîte mail principale et y sont inclus.", + "apiKeys.creating": "Création…", + "apiKeys.copyKey": "Copier la clé", + "apiKeys.description": "Créez des clés pour des applications externes, choisissez leurs autorisations et leurs boîtes mail, et révoquez l'accès ici.", + "apiKeys.none": "Aucune clé d'API pour le moment", + "apiKeys.createdOn": "Créée le {date}", + "apiKeys.lastUsed": "Dernière utilisation le {date}", + "apiKeys.neverUsed": "Jamais utilisée", + "apiKeys.mailboxesLabel": "Boîtes mail : {list}", + "apiKeys.allAccessible": "Toutes les boîtes mail accessibles (clé existante)", + "common.copy": "Copier", + "common.copyLabel": "Copier {label}", + "emailClients.defaultName": "Application de messagerie", + "emailClients.createFailed": "Impossible de créer une clé", + "emailClients.description": "Mot de passe d'application pour les clients de messagerie compatibles JMAP. Pointez l'application vers ce serveur et connectez-vous avec votre adresse e-mail et une clé d'API comme mot de passe.", + "emailClients.server": "Serveur", + "emailClients.username": "Nom d'utilisateur", + "emailClients.anyValue": "n'importe quelle valeur", + "emailClients.passwordApiKey": "Mot de passe (clé d'API)", + "emailClients.shownOnce": "Cette clé n'est affichée qu'une seule fois. Vous pouvez la révoquer dans {link}. La découverte de session se trouve à {url}.", + "emailClients.deviceName": "Nom de l'appareil ou de l'application", + "emailClients.devicePlaceholder": "Téléphone", + "emailClients.creating": "Création...", + "emailClients.create": "Créer un mot de passe d'application", + "emailClients.mailboxesLegend": "Boîtes mail que cette application peut utiliser", + "emailClients.loadingMailboxes": "Chargement des boîtes mail...", + "emailClients.aliasLimit": "Les alias partagent la boîte mail principale et y sont inclus. Jusqu'à {max} boîtes mail par clé.", + "import.failed": "Échec de l'importation", + "import.title": "Importer des e-mails", + "import.description": "Importez des fichiers .eml ou .mbox exportés depuis la source {source}. Ils seront enregistrés dans la section correspondante de la boîte mail sélectionnée.", + "import.filesLabel": "Fichiers d'export d'e-mails", + "import.limits": "Importe jusqu'à 100 messages et 25 Mo par envoi. Les valeurs Message-ID en double sont ignorées.", + "import.importing": "Importation...", + "import.submit": "Importer les messages", + "import.summary": "{imported} importé(s), {skipped} ignoré(s)", + "settings.reading.title": "Affichage de lecture sur deux colonnes", + "settings.reading.description": "Affiche la liste des e-mails à côté de l'e-mail ouvert. Désactivez pour lire les e-mails sur une seule colonne.", + "settings.shortcuts.title": "Raccourcis clavier", + "settings.shortcuts.description": "Utilisez des touches rapides pour naviguer, rédiger et gérer les messages sur ce compte.", + "settings.shortcuts.failed": "Échec de la mise à jour des paramètres de raccourcis", + "settings.shortcuts.enable": "Activer les raccourcis clavier", + "settings.threading.groupTitle": "Regrouper les e-mails en conversations", + "settings.threading.groupDescription": "Affiche les messages liés ensemble sous forme d'une seule conversation dans les listes de messages.", + "settings.threading.latestTitle": "Trier les messages les plus récents en premier", + "settings.threading.latestDescription": "Affiche l'e-mail le plus récent en haut d'une conversation. Désactivez pour l'afficher en dernier.", + "settings.spam.loadFailed": "Échec du chargement des paramètres du filtre anti-spam", + "settings.spam.updateFailed": "Échec de la mise à jour des paramètres du filtre anti-spam", + "settings.spam.title": "Filtre anti-spam", + "settings.spam.description": "Analyse localement les messages entrants et détecte le spam avec une grande fiabilité", + "settings.spam.enable": "Activer le filtre anti-spam", + "settings.trash.loadFailed": "Échec du chargement des paramètres de nettoyage", + "settings.trash.updateFailed": "Échec de la mise à jour des paramètres de nettoyage", + "settings.trash.title": "Supprimer automatiquement la Corbeille et le Spam", + "settings.trash.description": "Supprime définitivement les messages une fois qu'ils sont restés aussi longtemps dans la Corbeille ou le Spam. S'applique aux boîtes mail dont vous êtes propriétaire.", + "settings.trash.never": "Jamais", + "settings.trash.afterDay.one": "Après {count} jour", + "settings.trash.afterDay.other": "Après {count} jours", + "settings.recipient.title": "Afficher les adresses complètes des destinataires", + "settings.recipient.description": "Dans À, Cc et Cci, affiche Nom lorsque le message comporte un nom. Désactivé, seule l'adresse e-mail s'affiche. Ce réglage suit votre connexion, sur toutes les boîtes mail.", + "settings.recipient.failed": "Échec de la mise à jour des paramètres d'adresse des destinataires", + "mcp.instructions": "Instructions pour votre agent IA", + "mcp.copyPrompt": "Copier le prompt", + "rules.field.email": "Adresse e-mail", + "rules.field.content": "Contenu", + "rules.field.title": "Titre", + "rules.operator.contains": "contient", + "rules.operator.exact": "correspondance exacte", + "rules.operatorOption.contains": "Contient", + "rules.operatorOption.exact": "Correspondance exacte", + "rules.unknownFolder": "Dossier inconnu", + "rules.mailboxTitle": "Règles de la boîte mail", + "rules.appliedAfterDelivery": "Appliquées après la distribution.", + "rules.new": "Nouvelle règle", + "rules.none": "Aucune règle pour le moment", + "rules.delete": "Supprimer la règle", + "rules.update": "Mettre à jour la règle", + "rules.dialogDescription": "Choisissez ce qu'il faut rechercher et où le message doit aller.", + "rules.fieldLabel": "Champ", + "rules.matchLabel": "Correspondance", + "rules.valueLabel": "Valeur", + "rules.valuePlaceholderEmail": "expediteur@exemple.com", + "rules.valuePlaceholderOther": "Facture", + "rules.destination": "Destination", + "rules.selectDestination": "Sélectionnez une destination", + "rules.saveChanges": "Enregistrer les modifications", + "rules.create": "Créer la règle", + "routing.field.recipient": "Adresse du destinataire", + "routing.field.sender": "Adresse de l'expéditeur", + "routing.field.title": "Objet", + "routing.field.content": "Corps", + "routing.operator.contains": "contient", + "routing.operator.exact": "est exactement", + "routing.operator.starts_with": "commence par", + "routing.operator.ends_with": "se termine par", + "routing.operator.regex": "correspond à l'expression régulière", + "routing.action.store": "Distribuer dans la boîte mail", + "routing.action.forward": "Transférer à une adresse", + "routing.action.reject": "Rejeter / bloquer", + "routing.requestFailed": "Échec de la requête", + "routing.anyMessage": "N'importe quel message", + "routing.describe.reject": "{condition} → rejeter", + "routing.describe.forward": "{condition} → transférer à {to}", + "routing.describe.forwardCopy": "{condition} → transférer à {to} et conserver une copie", + "routing.describe.store": "{condition} → distribuer à {address}", + "routing.never": "Jamais", + "routing.title": "Routage du domaine", + "routing.about": "Bloquez, transférez ou distribuez les e-mails qui arrivent sur ce domaine.", + "routing.aboutLabel": "À propos du routage du domaine", + "routing.rulesFor": "Règles pour {host}", + "routing.selectInbox": "Sélectionnez une boîte", + "routing.addRoute": "Ajouter une route", + "routing.selectInboxFirst": "Sélectionnez une boîte avant de créer des règles de routage.", + "routing.needFullAccess": "Un accès complet à la boîte sélectionnée est requis pour gérer le routage du domaine.", + "routing.blockRules": "Règles de blocage", + "routing.blockRulesDescription": "Évaluées avant la distribution. Les e-mails correspondants sont rejetés en bordure.", + "routing.catchAll": "Fourre-tout et transfert", + "routing.catchAllDescription": "Évaluées uniquement lorsqu'aucune boîte mail du domaine ne correspond au destinataire.", + "routing.editRule": "Modifier la règle", + "routing.addRule": "Ajouter une règle de routage", + "routing.dialogDescription": "Choisissez ce qui arrive aux e-mails correspondants.", + "routing.optionalLabel": "Libellé facultatif", + "routing.action": "Action", + "routing.matchOn": "Correspondre sur", + "routing.condition": "Condition", + "routing.matchValue": "Valeur de correspondance", + "routing.matchAllHint": "Utilisez * pour correspondre à tous les messages.", + "routing.matchAllPlaceholder": "* pour tout faire correspondre", + "routing.priority": "Priorité", + "routing.priorityHint": "Les nombres les plus élevés s'exécutent en premier.", + "routing.keptCopyMailbox": "Boîte mail de la copie conservée", + "routing.destinationMailbox": "Boîte mail de destination", + "routing.selectMailbox": "Sélectionnez une boîte mail", + "routing.disabledSuffix": " (désactivée)", + "routing.forwardTo": "Transférer à", + "routing.keepCopy": "Conserver une copie", + "routing.keepCopyHint": "Enregistre aussi le message dans la boîte sélectionnée.", + "routing.rejectReason": "Motif du rejet", + "routing.rejectPlaceholder": "Message rejeté par une règle de routage", + "routing.noRules": "Aucune règle pour le moment.", + "routing.disabled": "Désactivée", + "routing.stats": "Priorité {priority} · {count}× correspondance · dernière {last}", + "export.failed": "Échec de l'export", + "export.title": "Exporter la boîte mail", + "export.description": "Téléchargez les en-têtes et les corps des messages de la boîte mail sélectionnée dans un fichier .mbox. Les pièces jointes ne sont pas incluses dans cet export.", + "export.preparing": "Préparation...", + "export.download": "Télécharger le .mbox", + "settingsPage.inbox.experience": "Expérience de la boîte de réception", + "settingsPage.inbox.experienceDescription": "Choisissez comment vous lisez vos e-mails et interagissez avec eux.", + "settingsPage.inbox.appearance": "Apparence", + "settingsPage.inbox.appearanceDescription": "Choisissez une interface claire ou sombre.", + "settingsPage.inbox.readingLayout": "Disposition de lecture", + "settingsPage.inbox.readingLayoutDescription": "Choisissez l'affichage des e-mails ouverts.", + "settingsPage.inbox.threading": "Conversations", + "settingsPage.inbox.threadingDescription": "Choisissez comment les e-mails sont organisés dans votre boîte de réception.", + "settingsPage.inbox.addresses": "Adresses", + "settingsPage.inbox.addressesDescription": "Choisissez comment les adresses des destinataires s'affichent lorsque vous lisez vos e-mails.", + "settingsPage.inbox.shortcuts": "Raccourcis", + "settingsPage.inbox.shortcutsDescription": "Choisissez si les raccourcis clavier sont actifs.", + "settingsPage.inbox.notifications": "Notifications", + "settingsPage.inbox.notificationsDescription": "Choisissez comment être informé des nouveaux e-mails.", + "settingsPage.inbox.handling": "Traitement des messages", + "settingsPage.inbox.handlingDescription": "Gérez la protection anti-spam, le nettoyage et les réponses automatiques.", + "settingsPage.inbox.spamProtection": "Protection anti-spam", + "settingsPage.inbox.spamProtectionDescription": "Contrôlez l'analyse locale du spam pour les messages entrants.", + "settingsPage.inbox.cleanup": "Nettoyage de la Corbeille et du Spam", + "settingsPage.inbox.cleanupDescription": "Choisissez combien de temps les messages supprimés et le spam sont conservés.", + "settingsPage.inbox.autoReply": "Réponse automatique", + "settingsPage.inbox.autoReplyDescription": "Configurez l'objet et le message de la boîte sélectionnée ci-dessus.", + "settingsPage.security.title": "Sécurité", + "settingsPage.security.description": "Gérez la façon dont vous vous connectez à votre compte.", + "settingsPage.security.changePassword": "Modifier le mot de passe", + "settingsPage.security.changePasswordDescription": "Utilisez au moins 8 caractères pour votre nouveau mot de passe.", + "settingsPage.security.mfa": "Authentification à deux facteurs", + "settingsPage.security.mfaDescription": "Exiger un code d'une application d'authentification lors de la connexion.", + "settingsPage.appPasswords.title": "Mots de passe d'application", + "settingsPage.appPasswords.description": "Utilisez votre messagerie depuis une application de bureau ou mobile via JMAP.", + "folder.drafts.empty": "Aucun brouillon", + "compose.pageTitle": "Écrire", + "compose.pageDescription": "Rédigez un nouvel e-mail. Les brouillons sont enregistrés automatiquement.", + "agent.review.loadFailed": "Impossible de charger la révision", + "agent.review.title": "Révision du brouillon IA", + "agent.review.loading": "Chargement de la révision…", + "agent.review.stale": "Cette révision est obsolète. Ouvrez le brouillon et demandez une nouvelle révision si nécessaire.", + "agent.review.status": "Cette révision est {status}. Ouvrez le brouillon et demandez une nouvelle révision si nécessaire.", + "agent.assistant.close": "Fermer l'assistant e-mail", + "agent.assistant.open": "Ouvrir l'assistant e-mail", + "message.notFound": "Message introuvable", + "message.cloudFiles": "Fichiers dans le cloud ({count})", + "message.openFrom": "Ouvrir depuis {provider}", + "message.attachments": "Pièces jointes ({count})", + "message.cc": "cc", + "message.bcc": "cci", + "message.previous.received": "Message précédent reçu le {date}", + "message.previous.sent": "Message précédent envoyé le {date}", + "auth.email": "E-mail", + "auth.password": "Mot de passe", + "auth.signIn": "Se connecter", + "auth.signingIn": "Connexion...", + "auth.loginFailed": "Échec de la connexion", + "auth.loginTimeout": "La connexion a expiré. Veuillez réessayer.", + "auth.loginUnreachable": "Impossible de joindre le service de connexion. Veuillez réessayer.", + "auth.codeMismatch": "Ce code ne correspond pas", + "auth.mfaTitle": "Authentification à deux facteurs", + "auth.mfaDescription": "Saisissez le code à 6 chiffres de votre application d'authentification, ou l'un de vos codes de récupération.", + "auth.code": "Code", + "auth.verifying": "Vérification...", + "auth.verify": "Vérifier", + "auth.backToSignIn": "Retour à la connexion", + "auth.addAnother": "Ajouter un autre compte", + "auth.addDescription": "Connectez-vous à un autre compte. Vous pouvez passer d'un compte à l'autre depuis le menu du compte.", + "auth.signInDescription": "Ouvrez votre boîte mail et continuez dans le même espace de travail.", + "auth.forgotPassword": "Mot de passe oublié ?", + "auth.forgot.error": "Une erreur s'est produite. Veuillez réessayer.", + "auth.serverUnreachable": "Impossible de joindre le serveur. Veuillez réessayer.", + "auth.forgot.title": "Réinitialisez votre mot de passe", + "auth.forgot.sent": "Si ce compte a un e-mail de récupération, un lien de réinitialisation est en route. Il est valable 30 minutes.", + "auth.forgot.description": "Saisissez l'adresse avec laquelle vous vous connectez. Nous enverrons un lien de réinitialisation à l'e-mail de récupération du compte.", + "auth.sending": "Envoi...", + "auth.sendReset": "Envoyer le lien de réinitialisation", + "auth.reset.mismatch": "Les mots de passe ne correspondent pas", + "auth.reset.failed": "Impossible de réinitialiser le mot de passe", + "auth.reset.linkMissing": "Lien de réinitialisation manquant", + "auth.reset.linkMissingDescription": "Ouvrez le lien de l'e-mail de réinitialisation pour choisir un nouveau mot de passe.", + "auth.reset.requestNew": "Demander un nouveau lien", + "auth.reset.updated": "Mot de passe mis à jour", + "auth.reset.chooseNew": "Choisissez un nouveau mot de passe", + "auth.reset.doneDescription": "Vous avez été déconnecté partout. Connectez-vous avec votre nouveau mot de passe pour continuer.", + "auth.reset.description": "Utilisez au moins 8 caractères. Toutes les autres sessions de ce compte seront déconnectées.", + "auth.reset.goToSignIn": "Aller à la connexion", + "auth.reset.newPassword": "Nouveau mot de passe", + "auth.reset.confirm": "Confirmer le nouveau mot de passe", + "auth.reset.setNew": "Définir le nouveau mot de passe", + "setup.mxCheckFailed": "Impossible de vérifier les enregistrements MX existants", + "setup.completeConfig": "Terminez la configuration manquante avant de continuer.", + "setup.prepFailed": "Échec de la préparation de l'installation", + "setup.domainFailed": "Échec de la configuration du domaine", + "setup.domainCheckFailed": "Échec de la vérification du domaine", + "setup.domainIncomplete": "La configuration du domaine n'est pas terminée", + "setup.registrationFailed": "Échec de l'inscription", + "setup.closedTitle": "L'inscription de comptes est fermée", + "setup.signInInstead": "Se connecter à la place", + "setup.alreadyHasAccount": "Cette installation possède déjà un compte pour {domain}.", + "setup.thisWorkspace": "cet espace de travail", + "setup.goToLogin": "Aller à la connexion", + "setup.prepareTitle": "Préparer l'installation", + "setup.addDomainTitle": "Ajoutez votre domaine", + "setup.createMailboxTitle": "Créez votre boîte mail", + "setup.stepSystem": "Système", + "setup.stepDomain": "Domaine", + "setup.stepAccount": "Compte", + "setup.prepareIntro": "Mailflare vérifie la configuration Cloudflare requise et initialise une base de données D1 vierge avant de poursuivre la configuration.", + "setup.checking": "Vérification de l'installation", + "setup.migrated": "Base de données vierge migrée avec succès", + "setup.schemaReady": "Le schéma de la base de données est prêt", + "setup.checkingShort": "Vérification...", + "setup.checkAgain": "Vérifier à nouveau", + "setup.primaryDomain": "Domaine principal", + "setup.zoneHint": "Le domaine doit déjà être une zone Cloudflare sur ce compte.", + "setup.enableSending": "Activer l'envoi", + "setup.checkingCloudflare": "Vérification de l'accès à Cloudflare...", + "setup.requiredToSend": "Nécessaire pour envoyer des e-mails.", + "setup.receiveOnly": "Mode réception seule.", + "setup.enterDomain": "Saisissez le domaine puis quittez le champ pour le vérifier.", + "setup.domainFound": "Domaine trouvé dans Cloudflare sous le nom {zone}", + "setup.addingDomain": "Ajout du domaine...", + "setup.checkingMx": "Vérification des enregistrements MX existants", + "setup.noMx": "Aucun enregistrement MX existant trouvé", + "setup.replaceMx": "Remplacer les enregistrements MX existants", + "setup.replaceMxHint": "Cela supprime les enregistrements MX du fournisseur de messagerie actuel et les remplace par Cloudflare Email Routing. L'ancien fournisseur cessera de recevoir les e-mails.", + "setup.username": "Nom d'utilisateur", + "setup.usernamePlaceholder": "vous", + "setup.domainFallback": "domaine", + "setup.recoveryEmail": "E-mail de récupération", + "setup.checkMxAgain": "Vérifier à nouveau les enregistrements MX", + "setup.creating": "Création...", + "setup.createAccount": "Créer un compte", + "onboarding.domainCheckFailed": "Échec de la vérification du domaine", + "onboarding.addDomainFailed": "Échec de l'ajout du domaine", + "onboarding.createMailboxFailed": "Échec de la création de la boîte mail", + "onboarding.connectTitle": "Connecter le routage des e-mails", + "onboarding.firstMailboxTitle": "Créez votre première boîte mail", + "onboarding.connectDescription": "Ajoutez le domaine Cloudflare qui recevra les e-mails et, éventuellement, enverra via cet espace de travail.", + "onboarding.mailboxDescription": "Choisissez l'adresse de boîte mail qui doit s'ouvrir directement sur la boîte de réception.", + "onboarding.stepDomain": "Domaine", + "onboarding.stepMailbox": "Boîte mail", + "onboarding.completesInInbox": "La configuration se termine dans la boîte de réception", + "onboarding.cloudflareDns": "Votre domaine doit utiliser le DNS Cloudflare sur le même compte que {token}.", + "onboarding.domain": "Domaine", + "onboarding.leaveToVerify": "Quittez le champ du domaine pour le vérifier.", + "onboarding.mxConflict": "Des enregistrements MX existants distribuent les e-mails à un autre fournisseur. Si vous continuez, ces enregistrements seront supprimés et remplacés par Cloudflare Email Routing ; l'ancien fournisseur cessera de recevoir les e-mails.", + "onboarding.replacingMx": "Remplacement des enregistrements MX...", + "onboarding.deleteMxContinue": "Supprimer les enregistrements MX et continuer", + "onboarding.adding": "Ajout...", + "onboarding.addDomain": "Ajouter le domaine", + "onboarding.mailboxAddress": "Adresse de la boîte mail", + "onboarding.goToInbox": "Aller à la boîte de réception", + "home.homeLabel": "Accueil {app}", + "home.badge": "Opérations e-mail natives Cloudflare", + "home.headline": "Des boîtes mail qui ressemblent à votre boîte de réception.", + "home.subheadline": "Ajoutez des domaines, routez les e-mails entrants, envoyez via des clés d'API et gérez vos boîtes mail depuis un espace de travail serein, construit autour de la liste des messages.", + "home.mockMail": "E-mail", + "home.mockPriority": "Boîte prioritaire", + "home.mockUpdated": "Mis à jour il y a 2 min", + "home.msg1.subject": "Route correspondante", + "home.msg1.preview": "Un e-mail entrant a été distribué au support après la validation du DNS.", + "home.msg1.badge": "Entrant", + "home.msg2.subject": "Envoi par API accepté", + "home.msg2.preview": "Message mis en file d'attente via la clé d'API de production.", + "home.msg2.badge": "Envoyé", + "home.msg3.subject": "Webhook distribué", + "home.msg3.preview": "La charge utile de l'événement a atteint l'endpoint de votre espace de facturation.", + "home.msg3.badge": "Hook", + "home.msg4.subject": "Boîte mail provisionnée", + "home.msg4.preview": "La nouvelle boîte mail de routage est prête pour les réponses des clients.", + "home.msg4.badge": "Admin", + "home.dashboard": "Tableau de bord", + "home.logIn": "Se connecter", + "home.createAccount": "Créer un compte", + "home.openDashboard": "Ouvrir le tableau de bord", + "home.viewInbox": "Voir la boîte de réception", + "admin.title": "Paramètres d'administration", + "admin.description": "Gérez l'infrastructure e-mail et les intégrations de l'espace de travail.", + "admin.section.agent": "Choisissez le fournisseur d'IA et le modèle de l'assistant e-mail.", + "admin.section.mailboxes": "Créez et gérez des adresses de boîte mail.", + "admin.section.domains": "Ajoutez des domaines Cloudflare et inspectez l'état du DNS.", + "admin.section.branding": "Personnalisez le nom, l'icône et le favicon de l'application.", + "admin.section.licenses": "Comparez les licences à paiement unique Pro et Team.", + "admin.section.accounts": "Ajoutez et gérez des comptes utilisateur avec une licence Team.", + "admin.section.apiKeys": "Gérez l'accès par API aux domaines, comptes et boîtes mail.", + "admin.section.apiKeysTitle": "Clés d'API d'administration", + "admin.page.aiUsage": "Utilisation de l'IA", + "general.loadFailed": "Impossible de charger les paramètres", + "general.saved": "Limite des pièces jointes enregistrée", + "general.saveFailed": "Impossible d'enregistrer les paramètres", + "general.title": "Général", + "general.description": "Définissez des limites pour les e-mails sortants.", + "general.attachments": "Pièces jointes", + "general.maxAttachments": "Taille maximale des pièces jointes par e-mail (Mo)", + "general.appliesTo": "S'applique à chaque fichier et à l'ensemble des fichiers combinés. Maximum : 25 Mo ; jusqu'à 10 fichiers.", + "general.cloudflareLimit": "Cloudflare Email Sending limite l'e-mail complet, pièces jointes et encodage compris, à 5 Mio pour les destinataires classiques. L'exception de 25 Mio ne s'applique qu'aux adresses de destination vérifiées.", + "general.largeFiles": "Les fichiers de plus de 3 Mo, ainsi que les fichiers plus petits qui feraient dépasser à l'e-mail la limite de 5 Mio de Cloudflare, sont stockés dans R2 et envoyés sous forme de liens de téléchargement. Les liens expirent après 30 jours. Toute personne disposant d'un lien peut télécharger le fichier jusqu'à son expiration. Définissez APP_URL sur votre adresse HTTPS publique lors d'envois via l'API ou des flux en arrière-plan.", + "general.save": "Enregistrer les paramètres", + "routingAdmin.title": "Routage", + "routingAdmin.description": "Configurez les règles de distribution, de transfert et de blocage à l'échelle du domaine.", + "routingAdmin.domain": "Domaine", + "routingAdmin.chooseDomain": "Choisissez le domaine auquel s'appliquent ces règles globales.", + "routingAdmin.addDomainFirst": "Ajoutez un domaine avant de configurer des règles de routage.", + "routingAdmin.managedDomain": "Domaine géré", + "accounts.loadFailed": "Impossible de charger les comptes", + "accounts.domainsFailed": "Impossible de charger les domaines", + "accounts.checkDetails": "Vérifiez les détails du compte et des alias, puis réessayez", + "accounts.createFailed": "Impossible de créer le compte", + "accounts.title": "Comptes", + "accounts.description": "Gérez les comptes Team et leurs boîtes de réception.", + "accounts.new": "Nouveau compte", + "accounts.primaryAdmin": "Administrateur principal", + "accounts.role.admin": "administrateur", + "accounts.role.user": "utilisateur", + "accounts.lockedAdmin": "Seul l'administrateur principal peut ouvrir les comptes administrateur", + "accounts.addTitle": "Ajouter un compte utilisateur", + "accounts.addDescription": "L'utilisateur peut se connecter avec cet e-mail et ce mot de passe.", + "accounts.username": "utilisateur", + "accounts.selectDomain": "Sélectionnez un domaine", + "accounts.domain": "Domaine", + "accounts.role": "Rôle", + "accounts.roleUser": "Utilisateur", + "accounts.roleAdmin": "Administrateur", + "accounts.creating": "Création...", + "accounts.create": "Créer un compte", + "aliases.useAll": "Utiliser tous les domaines", + "aliases.useAllHint": "Utilise ce nom d'utilisateur sur tous les domaines disponibles, y compris ceux ajoutés plus tard. Désactivé, seules l'adresse principale et les alias ci-dessous sont attribués.", + "aliases.additional": "Alias supplémentaires", + "aliases.optional": "(facultatif)", + "aliases.hint": "Ces adresses partagent la boîte de réception du nouveau compte et peuvent aussi servir à envoyer des e-mails.", + "aliases.usernameLabel": "Nom d'utilisateur de l'alias {n}", + "aliases.domainLabel": "Domaine de l'alias {n}", + "aliases.remove": "Retirer l'alias {n}", + "aliases.add": "Ajouter un alias", + "license.required": "Licence {tier} requise", + "license.upgradeHint": "Passez à une licence supérieure pour utiliser cette fonctionnalité.", + "license.view": "Voir les licences", + "update.checkFailed": "Impossible de rechercher des mises à jour", + "update.migrationCheckFailed": "Impossible de vérifier les migrations de la base de données", + "update.startFailed": "Impossible de lancer la mise à jour", + "update.migrateFailed": "Impossible d'appliquer les migrations de la base de données", + "update.title": "Mise à jour de l'application", + "update.description": "Synchronisez la dernière version de Mailflare et gardez le schéma de sa base de données à jour.", + "update.completeConfig": "Terminez la configuration requise du Cloudflare Worker :", + "update.configured": "Configuré", + "update.missing": "Manquant", + "update.available": "Mailflare v{target} est disponible. Vous utilisez la v{current}.", + "update.upToDate": "Mailflare v{current} est à jour.", + "update.starting": "Lancement de la mise à jour...", + "update.updateButton": "Mettre à jour Mailflare", + "update.pendingMigrations.one": "{count} migration de la base de données est en attente.", + "update.pendingMigrations.other": "{count} migrations de la base de données sont en attente.", + "update.updatingDatabase": "Mise à jour de la base de données...", + "update.updateDatabase": "Mettre à jour la base de données", + "update.deployMatching": "Déployez la version correspondante de Mailflare avant de modifier cette base de données.", + "update.started": "Mise à jour lancée pour {repo}@{ref}. Actualisez cette page une fois que Cloudflare l'a déployée.", + "update.viewWorkflow": "Voir le workflow", + "account.loadFailed": "Impossible de charger le compte", + "account.updated": "Détails du compte mis à jour", + "account.updateFailed": "Impossible de mettre à jour le compte", + "account.avatarFailed": "Impossible de mettre à jour l'avatar", + "account.loadingAccount": "Chargement du compte...", + "account.detailsTitle": "Détails", + "account.detailsDescription": "Mettez à jour le profil et le statut de ce compte.", + "account.noPermission": "Vous n'avez pas l'autorisation de modifier ce compte. Seul l'administrateur principal peut gérer les comptes administrateur.", + "account.changeAvatar": "Modifier l'avatar", + "account.forwardingOptional": "E-mail de transfert (facultatif)", + "account.enabled": "Compte activé", + "account.primaryAlwaysEnabled": "Le compte de l'administrateur principal reste toujours activé.", + "account.allowSignIn": "Autorise ce compte à se connecter et à accéder à ses boîtes de réception.", + "account.saveDetails": "Enregistrer les détails", + "account.password.title": "Mot de passe", + "account.password.resetFor": "Réinitialisez le mot de passe de {name}.", + "account.password.thisAccount": "ce compte", + "account.password.onlyPrimary": "Seul l'administrateur principal peut réinitialiser le mot de passe d'un compte administrateur.", + "account.password.new": "Nouveau mot de passe", + "account.password.placeholder": "Saisissez au moins 8 caractères", + "account.password.hint": "Définir un mot de passe déconnecte ce compte partout. Transmettez-le à l'utilisateur par un autre canal.", + "account.password.resetting": "Réinitialisation...", + "account.password.reset": "Réinitialiser le mot de passe", + "account.password.resetDone": "Mot de passe réinitialisé. Ce compte a été déconnecté partout.", + "account.password.resetFailed": "Impossible de réinitialiser le mot de passe", + "account.mailboxes.loadFailed": "Impossible de charger les boîtes mail", + "account.mailboxes.addFailed": "Impossible d'ajouter la boîte mail", + "account.mailboxes.removeFailed": "Impossible de retirer la boîte mail", + "account.mailboxes.title": "Boîtes mail", + "account.mailboxes.manage": "Gérez les boîtes de réception appartenant à {name}.", + "account.mailboxes.current": "Boîtes de réception actuelles", + "account.mailboxes.removeInbox": "Retirer la boîte", + "account.mailboxes.none": "Aucune boîte mail pour le moment.", + "account.mailboxes.addTitle": "Ajouter une boîte de réception", + "account.mailboxes.addDescription": "Choisissez un nom de boîte et un domaine pour ce compte.", + "account.mailboxes.inboxName": "Nom de la boîte", + "account.mailboxes.inboxPlaceholder": "boite", + "account.mailboxes.domain": "Domaine", + "account.mailboxes.noDomains": "Aucun domaine disponible", + "account.mailboxes.address": "Adresse :", + "account.mailboxes.adding": "Ajout...", + "account.mailboxes.add": "Ajouter la boîte", + "account.permissions.loadFailed": "Impossible de charger les autorisations", + "account.permissions.updated": "Autorisations mises à jour", + "account.permissions.updateFailed": "Impossible de mettre à jour les autorisations", + "account.permissions.transferFailed": "Impossible de transférer le rôle d'administrateur principal", + "account.permissions.title": "Autorisations", + "account.permissions.description": "Contrôlez ce que ce compte peut gérer.", + "account.permissions.primaryAdmin": "Administrateur principal", + "account.permissions.primaryNote": "Ce compte possède l'administration et ne peut être ni rétrogradé ni désactivé. Transférez le rôle pour le céder.", + "account.permissions.admins": "Les administrateurs peuvent accéder aux pages d'administration et gérer les paramètres Team.", + "account.permissions.onlyPrimaryRoles": "Seul l'administrateur principal peut modifier les rôles.", + "account.permissions.permission": "Autorisation", + "account.permissions.allowed": "Autorisé", + "account.permissions.manageMailboxes": "Gérer les boîtes mail", + "account.permissions.manageMailboxesHint": "Autorise ce compte à ajouter et retirer ses propres boîtes de réception.", + "account.permissions.allowMailboxes": "Autoriser la gestion des boîtes mail", + "account.permissions.manageDomains": "Gérer les domaines", + "account.permissions.manageDomainsHint": "Autorise cet administrateur à ajouter et gérer des domaines.", + "account.permissions.allowDomains": "Autoriser la gestion des domaines", + "account.permissions.manageUsers": "Gérer les utilisateurs", + "account.permissions.manageUsersHint": "Autorise cet administrateur à ajouter et gérer des comptes utilisateur.", + "account.permissions.allowUsers": "Autoriser la gestion des utilisateurs", + "account.permissions.save": "Enregistrer les autorisations", + "account.permissions.transferTitle": "Transférer l'administrateur principal", + "account.permissions.transferHint": "Choisissez un compte par e-mail pour qu'il reprenne l'administration. Une confirmation vous sera demandée.", + "account.permissions.selectNext": "Sélectionnez le prochain administrateur principal", + "account.permissions.selectAccount": "Sélectionnez un compte", + "account.permissions.transferQuestion": "Transférer l'administrateur principal ?", + "account.permissions.transferWarning": "Vous perdrez l'accès d'administrateur principal et deviendrez un administrateur ordinaire.", + "account.permissions.transferring": "Transfert...", + "account.permissions.confirmTransfer": "Confirmer le transfert", + "mailboxes.failed": "Échec", + "mailboxes.currentAccount": "Compte actuel", + "mailboxes.title": "Boîtes mail", + "mailboxes.new": "Nouvelle boîte mail", + "mailboxes.createTitle": "Créer une boîte mail", + "mailboxes.createDescription": "Ajoutez une adresse et provisionnez automatiquement sa règle de routage.", + "mailboxes.type": "Type", + "mailboxes.personalInbox": "Boîte personnelle", + "mailboxes.sharedInbox": "Boîte partagée", + "mailboxes.account": "Compte", + "mailboxes.sharedHint": "Après avoir créé la boîte partagée, choisissez quels comptes Team peuvent y accéder.", + "mailboxes.namePlaceholder": "Nom de la boîte mail", + "mailboxes.emailAddress": "Adresse e-mail", + "mailboxes.localPlaceholder": "support", + "mailboxes.createButton": "Créer la boîte mail", + "mailboxes.none": "Aucune boîte mail pour le moment", + "mailboxes.profileAlt": "Profil de {name}", + "mailboxes.shared": "Partagée", + "mailbox.title": "Paramètres", + "mailbox.primary": "Principale", + "mailbox.loadFailed": "Échec du chargement de la boîte mail", + "mailbox.account": "Compte", + "mailbox.useAllHint": "Recevez et envoyez des e-mails avec ce nom d'utilisateur sur tous les domaines actifs de ce compte d'administration.", + "mailbox.updateFailed": "Échec de la mise à jour de la boîte mail", + "mailbox.saved": "Paramètres de la boîte mail enregistrés", + "mailbox.aliases": "Alias", + "mailbox.aliasesDescription": "Adresses supplémentaires qui distribuent dans cette boîte mail. Vous pouvez aussi envoyer des e-mails depuis n'importe quel alias.", + "mailbox.removeAddress": "Retirer {address}", + "mailbox.noAliases": "Aucun alias pour le moment.", + "mailbox.aliasesLoadFailed": "Échec du chargement des alias", + "mailbox.aliasPlaceholder": "alias", + "mailbox.addAlias": "Ajouter un alias", + "mailbox.aliasAddFailed": "Échec de l'ajout de l'alias", + "mailbox.aliasRemoveFailed": "Échec de la suppression de l'alias", + "mailbox.sharedAccess": "Accès partagé", + "mailbox.sharedAccessDescription": "Les membres de l'équipe ajoutés ici peuvent lire, envoyer, organiser et gérer les e-mails de cette boîte de réception.", + "mailbox.noMembers": "Aucun membre de l'équipe n'a encore accès.", + "mailbox.sharedLoadFailed": "Échec du chargement de l'accès partagé", + "mailbox.chooseAccount": "Choisissez un compte", + "mailbox.addUser": "Ajouter un utilisateur", + "mailbox.accountAddFailed": "Échec de l'ajout du compte", + "mailbox.dangerZone": "Zone de danger", + "mailbox.dangerDescription": "La suppression de cette boîte mail retire sa règle Cloudflare Email Routing : les nouveaux e-mails envoyés à {address} ne seront plus acceptés. Les messages déjà reçus sont conservés dans la base de données, mais n'apparaîtront plus dans aucune boîte de réception. Cette action est irréversible.", + "mailbox.thisAddress": "cette adresse", + "mailbox.deleteFailed": "Échec de la suppression de la boîte mail", + "mailbox.deleteConfirm": "Supprimer {address} ? Cela retire sa règle de routage d'e-mails et est irréversible.", + "mailbox.deleting": "Suppression...", + "mailbox.delete": "Supprimer la boîte mail", + "domains.removeFailed": "Échec de la suppression", + "domains.dnsLoadFailed": "Échec du chargement du DNS", + "domains.sendingChangeFailed": "Échec du changement de fournisseur d'envoi", + "domains.receivingChangeFailed": "Échec du changement de fournisseur de réception", + "domains.dnsSetupFailed": "Échec de la configuration de l'enregistrement DNS", + "domains.title": "Domaines", + "domains.descriptionManaged": "Les domaines doivent se trouver sur votre compte Cloudflare, qui gère leur DNS. Choisissez pour chaque domaine si Cloudflare, Resend ou Amazon SES reçoit et envoie ses e-mails.", + "domains.descriptionManual": "Ajoutez les domaines pour lesquels ce serveur reçoit des e-mails. Ouvrez le DNS d'un domaine pour voir les enregistrements MX, SPF et DMARC à créer.", + "domains.new": "Nouveau domaine", + "domains.addTitle": "Ajouter un domaine", + "domains.addDescription": "Connectez une zone Cloudflare, puis choisissez quel service reçoit ses e-mails et si Mailflare doit provisionner Email Sending.", + "domains.hostname": "Nom d'hôte", + "domains.receiveWith": "Recevoir les e-mails avec", + "domains.receiveHintCloudflare": "Cloudflare Email Routing est activé sur la zone.", + "domains.receiveHintNone": "Le domaine ne fait qu'envoyer. Ajoutez un service de réception plus tard.", + "domains.providerHintLater": "Ajoutez vos identifiants et configurez-le depuis la page du domaine après l'ajout.", + "domains.cloudflareRouting": "Cloudflare Email Routing", + "domains.cloudflareSending": "Cloudflare Email Sending", + "domains.notSelected": "Non sélectionné", + "domains.sendWith": "Envoyer les e-mails avec", + "domains.sendHintCloudflare": "Cloudflare Email Sending est activé sur la zone.", + "domains.sendHintNone": "Mode réception seule. Ajoutez un service d'envoi plus tard.", + "domains.tokenPermissions": "Vérifiez que votre jeton d'API Cloudflare dispose de ces autorisations :", + "domains.tokenAccounts": "Tous les comptes — DNS Settings:Edit, Email Routing Addresses:Edit ; Email Sending:Edit pour les e-mails sortants", + "domains.tokenZones": "Toutes les zones — DNS Settings:Edit, Email Routing Rules:Edit, Zone Settings:Edit, DNS:Edit", + "domains.none": "Aucun domaine pour le moment", + "dns.status.active": "actif", + "dns.status.pending": "en attente", + "domains.badge.routing": "routage", + "domains.badge.sendingOnly": "envoi uniquement", + "domains.badge.receivingVia": "réception via {provider}", + "domains.badge.sendingVia": "envoi via {provider}", + "domains.badge.receivingOnly": "réception uniquement", + "domains.badge.sending": "envoi", + "domains.providerSes": "Amazon SES", + "domains.providerResend": "Resend", + "dns.found": "trouvé", + "dns.missing": "manquant", + "dns.notVerified": "non vérifié", + "dns.mx": "Route les e-mails entrants vers Mailflare", + "dns.spf": "Autorise Mailflare à envoyer des e-mails", + "dns.dkim": "Signe les e-mails sortants pour améliorer la délivrabilité", + "dns.dmarc": "Aide à prévenir l'usurpation d'e-mails", + "domains.hideDetails": "Masquer les détails", + "domains.showDetails": "Afficher les détails", + "domains.actionsFor": "Actions pour {host}", + "domains.removeConfirm": "Supprimer {host} ? Cela supprime définitivement toutes les boîtes mail de ce domaine, y compris tous leurs messages, et désactive Email Routing pour la zone.\n\nSaisissez {host} pour confirmer.", + "domains.removeDomain": "Supprimer le domaine", + "domains.sendingFor": "L'envoi pour {name} est {state}", + "domains.enabled": "activé", + "domains.disabled": "désactivé", + "domains.sendingConfigured": "L'envoi d'e-mails est configuré", + "domains.sendingNotConfigured": "L'envoi d'e-mails n'est pas configuré", + "domains.sendingNotSet": "L'envoi n'a pas été configuré pour ce domaine", + "domains.routingConfigured": "Le routage des e-mails est configuré", + "domains.recordsMissing.one": "{count} enregistrement DNS manquant", + "domains.recordsMissing.other": "{count} enregistrements DNS manquants", + "domains.noRoutingRecords": "Aucun enregistrement DNS de routage trouvé", + "domains.recordLabel": "Enregistrement {label}", + "domains.manualDns": "Le DNS de ce domaine est géré manuellement", + "domains.createRecord": "Créer l'enregistrement {label}", + "domains.settingUp": "Configuration...", + "domains.setup": "Configurer", + "domains.emailSending": "Email Sending", + "domains.emailSendingHint": "Envoie les e-mails sortants depuis ce domaine", + "domains.setupTitle": "Configuration du domaine", + "domains.setupDescription": "Vérifiez l'authentification DNS qui garantit la délivrabilité des e-mails, quels que soient les services qui les envoient et les reçoivent.", + "domains.manualDnsNote": "Le DNS de ce domaine est géré manuellement ; les enregistrements doivent donc être créés là où sont hébergés les serveurs de noms du domaine.", + "domains.setUp": "Configuré", + "domains.needsSetup": "À configurer", + "domains.stillSetUp": "{title} est toujours configuré pour ce domaine mais n'est pas utilisé.", + "domains.removing": "Suppression…", + "domains.cleanUp": "Nettoyer", + "domains.setupFailed": "Échec de la configuration", + "domains.emailRouting": "Email Routing", + "domains.emailRoutingHint": "Route les e-mails entrants vers Mailflare", + "domains.requestFailed": "Échec de la requête", + "domains.opt.cfRouting": "Cloudflare Email Routing", + "domains.opt.cfRoutingDesc": "Les e-mails arrivent par la zone Cloudflare de ce domaine. Option par défaut.", + "domains.opt.resendReceiveDesc": "Resend reçoit les e-mails et les remet à Mailflare par webhook.", + "domains.opt.sesReceiveDesc": "SES reçoit les e-mails dans S3 et en informe Mailflare.", + "domains.opt.cfEmail": "Cloudflare Email", + "domains.opt.cfSendDesc": "Cloudflare Email Sending. Configuré sur la zone de ce domaine.", + "domains.opt.resendSendDesc": "Envoyez via votre compte Resend.", + "domains.opt.sesSendDesc": "Envoyez via votre compte AWS avec SES.", + "domains.removeReceivingConfirm": "Supprimer la configuration de réception {title} pour {host} ? Cela supprime son enregistrement MX et son routage ; les e-mails n'arriveront plus par ce biais.", + "domains.removeSendingConfirm": "Supprimer la configuration {title} pour {host} ? Cela supprime ses enregistrements DNS.", + "domains.removeConfigFailed": "Impossible de supprimer la configuration", + "domains.setupReceiving": "Configurer la réception des e-mails", + "domains.setupReceivingDescription": "Choisissez ce qui reçoit les e-mails de ce domaine. Un seul service peut posséder l'enregistrement MX ; en configurer un autre demande confirmation avant de le remplacer.", + "domains.noReceiving": "Aucun service de réception sélectionné : ce domaine ne fait qu'envoyer.", + "domains.setupSending": "Configurer l'envoi des e-mails", + "domains.sendingNone": "Ce domaine ne fait que recevoir. Activez une option pour envoyer depuis celui-ci.", + "domains.sendingChoose": "Choisissez ce qui envoie les e-mails sortants de ce domaine. La réception n'est pas affectée.", + "domains.setupReceivingButton": "Configurer la réception", + "domains.resendReceivingHint": "Active la réception sur le domaine, pointe le MX vers Resend et enregistre le webhook.", + "domains.sesReceivingHint": "Crée le bucket S3, la rubrique SNS et la règle de réception, puis pointe le MX vers SES.", + "domains.providerUnreachable": "Impossible de joindre le fournisseur", + "domains.setupFinished": "Configuration terminée. La propagation du DNS peut prendre quelques minutes ; utilisez Vérifier à nouveau pour actualiser.", + "domains.checking": "Vérification…", + "domains.ok": "OK", + "domains.notSetUp": "Non configuré", + "domains.restrictedKey": "Cette clé Resend ne peut qu'envoyer des e-mails, donc Mailflare ne peut pas configurer la réception. Utilisez une clé à accès complet, ou activez la réception, ajoutez l'enregistrement MX et créez le webhook {webhook} dans le tableau de bord Resend.", + "domains.checkAgain": "Vérifier à nouveau", + "domains.working": "Traitement…", + "resend.unreachable": "Impossible de joindre Resend", + "resend.testSent": "E-mail de test envoyé à {to}", + "resend.needsFullKey": "Nécessite une clé d'API Resend à accès complet", + "resend.checking": "Vérification de Resend…", + "resend.cannotCheck": "Vérification impossible : cette clé ne peut qu'envoyer des e-mails", + "resend.cannotRead": "Impossible de lire le domaine depuis Resend", + "resend.verified": "Domaine vérifié dans Resend", + "resend.waiting": "Enregistrements DNS ajoutés, en attente de la vérification par Resend ({status})", + "resend.missingDns.one": "{count} enregistrement DNS manquant dans Cloudflare", + "resend.missingDns.other": "{count} enregistrements DNS manquants dans Cloudflare", + "resend.dnsCheck": "Vérification DNS : {status}", + "resend.notAdded": "Le domaine n'a pas encore été ajouté à Resend", + "resend.btn.setupDomain": "Configurer le domaine", + "resend.btn.verify": "Vérifier", + "resend.btn.setupDomainDns": "Configurer le domaine et le DNS", + "resend.btn.createMissing": "Créer le DNS manquant et vérifier", + "resend.btn.checkStatus": "Vérifier l'état", + "resend.domain": "Domaine", + "resend.domainHint": "Domaine expéditeur vérifié dans Resend", + "resend.sending": "Envoi…", + "resend.sendTest": "Envoyer un e-mail de test", + "resend.manualHint": "Ajoutez ce domaine sur resend.com/domains et créez les enregistrements DNS indiqués, puis envoyez un e-mail de test. Ou remplacez la clé par une clé à accès complet pour que Mailflare puisse tout configurer.", + "resend.addRecords": "Ajoutez ces enregistrements là où le DNS de ce domaine est hébergé, puis vérifiez.", + "resend.propagate": "Les modifications DNS peuvent prendre quelques minutes à se propager. Revérifiez dans un instant.", + "resend.key": "Clé d'API", + "resend.keyHint": "Partagée par tous les domaines qui utilisent Resend", + "resend.replace": "Remplacer", + "resend.remove": "Supprimer", + "resend.saveKey": "Enregistrer la clé", + "resend.keySaved": "Clé d'API enregistrée", + "resend.removeConfirm": "Supprimer la clé d'API Resend ? Tous les domaines utilisant Resend cesseront d'envoyer et de recevoir.", + "resend.keyInstructions": "Créez une clé sur resend.com/api-keys. Une clé à accès complet permet à Mailflare d'ajouter pour vous le domaine, son DNS et le webhook de réception ; une clé d'envoi seul fonctionne pour l'envoi, mais vous ajoutez vous-même le domaine dans Resend.", + "aws.loadFailed": "Impossible de charger les paramètres AWS", + "aws.removeConfirm": "Supprimer les identifiants AWS ? Les domaines utilisant Amazon SES cesseront d'envoyer et de recevoir. Les ressources déjà créées dans AWS sont conservées.", + "aws.credentials": "Identifiants AWS", + "aws.credentialsHint": "Partagés par tous les domaines qui utilisent Amazon SES", + "aws.recheck": "Revérifier", + "aws.accessKeyId": "ID de clé d'accès (AKIA…)", + "aws.secretKey": "Clé d'accès secrète", + "aws.region": "Région (us-east-1)", + "aws.validating": "Validation…", + "aws.validateSave": "Valider et enregistrer", + "aws.keySummary": "Clé d'accès …{hint} · {region}", + "aws.accountSuffix": " · compte {id}", + "aws.envSuffix": " · depuis l'environnement", + "aws.sesSending": "Envoi SES", + "aws.sesSendingHint": "Envoyez des e-mails et gérez les identités d'expéditeur", + "aws.allowedIn": "Autorisé dans {region}", + "aws.missingSes": "Autorisations SES manquantes", + "aws.sandbox": "Sandbox SES", + "aws.sandboxHint": "Les nouveaux comptes AWS démarrent avec des restrictions", + "aws.sandboxDetail": "Seuls les destinataires vérifiés peuvent recevoir des e-mails tant que vous n'avez pas demandé l'accès à la production dans la console SES.", + "aws.sesReceiving": "Réception SES", + "aws.sesReceivingHint": "Règles de réception pour les e-mails entrants", + "aws.regionCannotReceive": "{region} ne peut pas recevoir d'e-mails. Utilisez us-east-1, us-west-2 ou eu-west-1.", + "aws.missingReceipt": "Autorisations de règles de réception SES manquantes", + "aws.s3Hint": "Bucket où SES stocke les messages bruts", + "aws.allowed": "Autorisé", + "aws.missingS3": "Autorisations S3 manquantes", + "aws.snsHint": "Informe Mailflare de chaque message", + "aws.missingSns": "Autorisations SNS manquantes", + "aws.missingSummary": "Autorisations manquantes et politique IAM qui les accorde", + "aws.missingList": "Manquantes : {list}", + "aws.createUserHint": "Créez un utilisateur IAM avec accès programmatique dans la console AWS et attachez-lui une politique contenant les autorisations dont Mailflare a besoin (affichées après l'enregistrement, s'il en manque). Les identifiants sont vérifiés auprès d'AWS avant d'être stockés.", + "ses.unreachable": "Impossible de joindre AWS", + "ses.checking": "Vérification d'Amazon SES…", + "ses.cannotRead": "Impossible de lire le domaine depuis SES", + "ses.verified": "Domaine vérifié dans SES", + "ses.notAdded": "Le domaine n'a pas encore été ajouté à SES", + "ses.waiting": "Enregistrements DNS ajoutés, en attente de la vérification par SES (DKIM {status})", + "ses.missingDkim.one": "{count} enregistrement DKIM manquant dans Cloudflare", + "ses.missingDkim.other": "{count} enregistrements DKIM manquants dans Cloudflare", + "ses.dkim": "DKIM {status}", + "ses.domainHint": "Identité d'expéditeur vérifiée dans SES", + "ses.sandboxHint": "Restriction à l'échelle du compte", + "ses.sandboxDetail": "Dans le sandbox, SES ne distribue qu'aux adresses vérifiées. Demandez l'accès à la production dans la console SES avant d'écrire à d'autres personnes.", + "ses.addCnames": "Ajoutez ces enregistrements CNAME là où le DNS de ce domaine est hébergé, puis vérifiez l'état.", + "webhooks.event.inbound": "Message entrant", + "webhooks.event.inboundHint": "Un message a été reçu et stocké", + "webhooks.event.outbound": "Message sortant", + "webhooks.event.outboundHint": "Un message a été envoyé", + "webhooks.event.failed": "Échec de distribution", + "webhooks.event.failedHint": "Un message sortant a échoué", + "webhooks.status.pending": "En attente", + "webhooks.status.delivered": "Distribué", + "webhooks.status.failed": "Échoué", + "webhooks.status.retrying": "Nouvelle tentative", + "webhooks.status.exhausted": "Abandonné", + "webhooks.title": "Webhooks", + "webhooks.description": "Distribuez les événements de messages à vos propres endpoints, avec des nouvelles tentatives automatiques.", + "webhooks.add": "Ajouter un endpoint", + "webhooks.secretTitle": "Secret de signature — affiché une seule fois", + "webhooks.secretHint": "Vérifiez l'en-tête {header} (HMAC-SHA256 du corps brut) avec ce secret.", + "webhooks.dismiss": "Ignorer", + "webhooks.none": "Aucun endpoint pour le moment. Ajoutez-en un pour commencer à recevoir des événements.", + "webhooks.enabled": "Activé", + "webhooks.disabled": "Désactivé", + "webhooks.toggleLabel.disable": "Désactiver {url}", + "webhooks.toggleLabel.enable": "Activer {url}", + "webhooks.stat.deliveries": "Distributions", + "webhooks.stat.delivered": "Distribuées", + "webhooks.stat.inFlight": "En cours", + "webhooks.stat.failed": "Échouées", + "webhooks.stat.maxAttempts": "Tentatives max.", + "webhooks.hideHistory": "Masquer l'historique des distributions", + "webhooks.history": "Historique des distributions", + "webhooks.testDelivery": "Distribution de test : {result}", + "webhooks.test": "Tester", + "webhooks.rotateConfirm": "Renouveler ce secret de signature ? L'ancien secret cessera immédiatement de signer les nouvelles distributions.", + "webhooks.rotate": "Renouveler le secret", + "webhooks.deleteLabel": "Supprimer {url}", + "webhooks.addDescription": "Les distributions échouées sont réessayées automatiquement avec un délai exponentiel.", + "webhooks.endpointUrl": "URL de l'endpoint", + "webhooks.descriptionLabel": "Description", + "webhooks.optional": "Facultatif", + "webhooks.events": "Événements", + "webhooks.create": "Créer", + "webhooks.col.event": "Événement", + "webhooks.col.status": "Statut", + "webhooks.col.attempts": "Tentatives", + "webhooks.col.response": "Réponse", + "webhooks.col.lastAttempt": "Dernière tentative", + "webhooks.col.nextRetry": "Prochaine tentative", + "webhooks.loadingDeliveries": "Chargement des distributions…", + "webhooks.noDeliveries": "Aucune distribution enregistrée pour le moment.", + "webhooks.retry": "Réessayer", + "weekday.0": "Dimanche", + "weekday.1": "Lundi", + "weekday.2": "Mardi", + "weekday.3": "Mercredi", + "weekday.4": "Jeudi", + "weekday.5": "Vendredi", + "weekday.6": "Samedi", + "backups.status.queued": "en file d'attente", + "backups.status.running": "en cours", + "backups.status.completed": "terminée", + "backups.status.failed": "échouée", + "backups.restoreConfirm": "Restaurer cette sauvegarde ? Cela remplace tous les enregistrements actuels de la base de données et peut vous déconnecter.", + "backups.title": "Sauvegardes de la base de données", + "backups.description": "Exportez les enregistrements de la base de données et stockez-les dans le bucket R2 configuré.", + "backups.starting": "Démarrage...", + "backups.backUp": "Sauvegarder", + "backups.actions": "Actions de sauvegarde", + "backups.restoring": "Restauration...", + "backups.restore": "Restaurer depuis une sauvegarde", + "backups.settings": "Paramètres", + "backups.tablesTitle": "Tables à sauvegarder", + "backups.tablesDescription": "Choisissez des groupes de tables liées pour les sauvegardes manuelles et automatiques. Tous les groupes sont activés par défaut. La restauration exige une sauvegarde contenant tous les groupes.", + "backups.tables": "Tables : {list}", + "backups.backUpGroup": "Sauvegarder {group}", + "backups.saveSettingsFailed": "Échec de l'enregistrement des paramètres de sauvegarde", + "backups.saveSettings": "Enregistrer les paramètres", + "backups.operationFailed": "Échec de l'opération de sauvegarde", + "backups.setupTitle": "Terminez la configuration des sauvegardes", + "backups.setupDescription": "Ajoutez les valeurs manquantes dans les paramètres Variables et Secrets du Worker déployé. Cette vérification disparaît une fois la configuration des sauvegardes terminée.", + "backups.checkAgain": "Vérifier à nouveau", + "backups.automatic": "Sauvegarde automatique", + "backups.scheduleNote": "La planification s'exécute à 02:00 UTC. Les planifications mensuelles sont limitées aux jours 1 à 28.", + "backups.enableAutomatic": "Activer la sauvegarde automatique", + "backups.frequency": "Fréquence", + "backups.daily": "Quotidienne", + "backups.weekly": "Jour de la semaine sélectionné", + "backups.monthly": "Jour du mois sélectionné", + "backups.dayOfWeek": "Jour de la semaine", + "backups.dayOfMonth": "Jour du mois", + "backups.deleteOld": "Supprimer automatiquement les anciennes sauvegardes", + "backups.deleteOlderThan": "Supprimer les sauvegardes de plus de", + "backups.days": "jours", + "backups.history": "Historique des sauvegardes", + "backups.col.file": "Fichier", + "backups.col.status": "Statut", + "backups.col.size": "Taille", + "backups.col.created": "Créée", + "backups.col.actions": "Actions", + "backups.none": "Aucune sauvegarde pour le moment.", + "backups.manual": "Manuelle", + "backups.scheduled": "Planifiée", + "backups.download": "Télécharger la sauvegarde", + "backups.delete": "Supprimer la sauvegarde", + "adminKeys.loadFailed": "Impossible de charger les clés d'API d'administration", + "adminKeys.revokeFailed": "Impossible de révoquer la clé d'API d'administration", + "adminKeys.perm.domains": "Gérer les domaines", + "adminKeys.perm.domainsDesc": "Ajouter et supprimer des domaines, et gérer leur configuration DNS.", + "adminKeys.perm.accounts": "Gérer les comptes", + "adminKeys.perm.accountsDesc": "Créer et mettre à jour des comptes. Nécessite une licence Team.", + "adminKeys.perm.mailboxes": "Gérer les boîtes mail", + "adminKeys.perm.mailboxesDesc": "Créer, mettre à jour et supprimer des boîtes mail.", + "adminKeys.namePlaceholder": "Application de production", + "adminKeys.allowMcpHint": "Utilisez cette clé avec un client MCP pour gérer uniquement les zones d'administration sélectionnées ci-dessous. Elle ne peut ni lire ni envoyer d'e-mails.", + "adminKeys.createKey": "Créer la clé", + "branding.title": "Personnalisation", + "branding.proOnly": "La personnalisation de la marque est disponible avec une licence Pro ou Team.", + "branding.licenseRequired": "Licence requise", + "branding.originalNote": "Cette installation continue d'utiliser le nom, l'icône d'application et le favicon d'origine de Mailflare.", + "branding.buyPro": "Acheter Pro · 29 $", + "branding.buyTeam": "Acheter Team · à partir de 249 $", + "branding.updated": "Personnalisation mise à jour", + "branding.saveFailed": "Impossible d'enregistrer la personnalisation", + "branding.description": "Personnalisez l'identité de l'application affichée à toutes les personnes qui utilisent cette installation.", + "branding.identity": "Identité de l'application", + "branding.faviconNote": "L'icône est aussi utilisée comme favicon du navigateur.", + "branding.appName": "Nom de l'application", + "branding.appIcon": "Icône de l'application", + "branding.iconPreview": "Aperçu de l'icône de l'application", + "branding.chooseImage": "Choisissez un PNG, JPEG, WebP ou GIF", + "branding.maxSize": "Maximum 2 Mo", + "branding.save": "Enregistrer la personnalisation", + "licenses.title": "Licences", + "licenses.description": "Choisissez une licence à paiement unique. Chaque achat inclut les mises à jour publiées pendant la première année.", + "licenses.pro.description": "Une licence à paiement unique pour un compte, incluant un an de mises à jour du produit.", + "licenses.pro.feature1": "Personnalisation de la marque", + "licenses.pro.feature2": "Toutes les futures fonctionnalités Pro", + "licenses.keepVersion": "Conservez la version sous licence pour toujours", + "licenses.team.description": "Une licence à paiement unique multi-comptes avec toutes les fonctionnalités Pro", + "licenses.team.feature1": "Tout ce qui est dans Pro", + "licenses.team.feature2": "Ajoutez et gérez d'autres comptes", + "licenses.team.feature3": "Accès aux boîtes mail partagées selon disponibilité", + "licenses.get": "Obtenir {plan}", + "licenses.communityPlan": "Community", + "licenses.loadFailed": "Impossible de charger l'état de la licence", + "licenses.requestFailed": "Échec de la requête de licence", + "licenses.enterKey": "Saisissez votre clé de licence", + "licenses.deactivateConfirm": "Désactiver cette licence sur cette installation ?", + "licenses.deactivated": "Licence désactivée", + "licenses.validated": "Licence validée", + "licenses.activated": "Licence activée", + "licenses.activatedBody": "Votre licence {plan} est active. Les fonctionnalités sous licence sont prêtes à l'emploi.", + "licenses.deactivating": "Désactivation...", + "licenses.deactivate": "Désactiver la licence", + "licenses.currentState": "Cette licence est actuellement {state}. Saisissez sa clé pour la valider ou la désactiver.", + "licenses.haveLicense": "Vous avez déjà une licence ? Choisissez votre offre", + "licenses.product": "Produit", + "licenses.proTag": "Pour les utilisateurs avancés individuels", + "licenses.teamTag": "Pour les équipes et les boîtes partagées", + "licenses.licenseKey": "Clé de licence", + "licenses.keyPlaceholder": "Saisissez votre clé de licence Mailflare", + "licenses.validating": "Validation...", + "licenses.validate": "Valider la licence", + "licenses.deactivateShort": "Désactiver", + "licenses.activating": "Activation...", + "licenses.activate": "Activer", + "activity.title": "Activité", + "activity.description": "Activité de connexion et de déconnexion sur les comptes utilisateur.", + "activity.col.activity": "Activité", + "activity.col.user": "Utilisateur", + "activity.col.device": "Appareil", + "activity.col.time": "Heure", + "activity.none": "Aucune activité de connexion ou de déconnexion pour le moment", + "activity.login": "Connexion", + "activity.logout": "Déconnexion", + "activity.unknownEmail": "(e-mail inconnu)", + "activity.unknownCity": "(ville inconnue)", + "activity.unknownCountry": "(pays inconnu)", + "activity.unknownDevice": "(appareil inconnu)", + "activity.unknownPlatform": "(plateforme inconnue)", + "activity.unknownIp": "(IP inconnue)", + "agentAdmin.loadFailed": "Impossible de charger les paramètres de l'agent", + "agentAdmin.enterUrl": "Saisissez une URL de base HTTPS pour charger les modèles.", + "agentAdmin.enterKey": "Saisissez une clé d'API pour charger les modèles.", + "agentAdmin.modelsFailed": "Impossible de charger les modèles", + "agentAdmin.saved": "Fournisseur de l'agent enregistré. Les paramètres de l'assistant peuvent désormais choisir parmi ces modèles.", + "agentAdmin.saveFailed": "Impossible d'enregistrer les paramètres de l'agent", + "agentAdmin.title": "Agent", + "agentAdmin.description": "Choisissez le fournisseur d'IA et les modèles utilisés par l'assistant e-mail pour le chat et les brouillons.", + "agentAdmin.viewUsage": "Voir l'utilisation", + "agentAdmin.enable": "Activer l'assistant", + "agentAdmin.enableHint": "Affiche le chat de l'assistant et autorise les brouillons automatiques pour tout le monde.", + "agentAdmin.availabilityFailed": "Impossible de mettre à jour la disponibilité de l'assistant", + "agentAdmin.provider": "Fournisseur d'IA", + "agentAdmin.providerWarning": "Le contenu des e-mails est envoyé au fournisseur sélectionné lorsque quelqu'un utilise l'assistant. L'envoi d'un brouillon nécessite toujours une validation humaine.", + "agentAdmin.providerLabel": "Fournisseur", + "agentAdmin.cloudflareAi": "Cloudflare Workers AI", + "agentAdmin.openaiCompatible": "Fournisseur compatible OpenAI", + "agentAdmin.needsBinding": "Cloudflare Workers AI nécessite un binding AI sur cette installation.", + "agentAdmin.template": "Modèle de fournisseur", + "agentAdmin.baseUrl": "URL de base de l'API", + "agentAdmin.apiKey": "Clé d'API", + "agentAdmin.savedKeyPlaceholder": "Clé enregistrée (laissez vide pour la conserver)", + "agentAdmin.enterKeyPlaceholder": "Saisissez la clé d'API", + "agentAdmin.keySaved": "Une clé d'API est enregistrée sur le serveur. Saisissez-en une nouvelle pour la remplacer.", + "agentAdmin.keyNote": "La clé d'API est stockée sur le serveur et n'est plus jamais affichée.", + "agentAdmin.models": "Modèles", + "agentAdmin.loadingModels": "Chargement des modèles…", + "agentAdmin.modelsUnavailable": "Modèles indisponibles", + "agentAdmin.suggested": "Affichage de modèles Cloudflare suggérés car aucun catalogue complet n'est disponible.", + "agentAdmin.orEnterIds": "Ou saisissez des ID de modèles (séparés par des virgules)", + "agentAdmin.toolCalling": "Choisissez des modèles compatibles avec l'appel d'outils pour que l'assistant puisse lire les e-mails et créer des brouillons. Le premier modèle est celui par défaut.", + "agentAdmin.rates": "Tarifs de coût estimés", + "agentAdmin.ratesHint": "USD par million de tokens. Les tarifs publiés par le fournisseur sont utilisés automatiquement ; saisissez-les vous-même pour les modèles qui n'en publient pas. Sans les deux tarifs, les dépenses s'affichent comme indisponibles.", + "agentAdmin.rateLine": "Entrée {input} $ · Sortie {output} $ / 1M", + "agentAdmin.fromProvider": "(du fournisseur)", + "agentAdmin.input": "Entrée", + "agentAdmin.output": "Sortie", + "agentAdmin.usdPerM": "USD / 1M", + "agentAdmin.save": "Enregistrer les paramètres de l'agent", + "aiUsage.loadFailed": "Impossible de charger l'utilisation de l'IA", + "aiUsage.pageFailed": "Impossible de charger la page d'utilisation", + "aiUsage.title": "Utilisation de l'IA", + "aiUsage.description": "Requêtes enregistrées depuis l'ajout du suivi de l'utilisation.", + "aiUsage.back": "Retour à l'agent", + "aiUsage.totalTokens": "Total de tokens", + "aiUsage.totalRequests": "Total de requêtes", + "aiUsage.spend": "Dépenses estimées", + "aiUsage.noRate": "{count} requêtes n'ont pas de tarif.", + "aiUsage.col.dateTime": "Date et heure", + "aiUsage.col.model": "Modèle", + "aiUsage.col.provider": "Fournisseur", + "aiUsage.col.input": "Tokens d'entrée", + "aiUsage.col.output": "Tokens de sortie", + "aiUsage.col.spending": "Dépenses", + "aiUsage.none": "Aucune utilisation de l'IA enregistrée pour le moment.", + "aiUsage.loading": "Chargement de l'utilisation…", + "aiUsage.pageOf": "Page {page} sur {total} · {size} par page", + "aiUsage.previous": "Précédent", + "aiUsage.next": "Suivant", + "aiUsage.note": "Les dépenses sont estimées à partir des tarifs par modèle enregistrés dans les paramètres de l'agent. Un tiret signifie qu'aucun tarif ni nombre de tokens n'était disponible.", + "aiUsage.byDay": "Utilisation par jour", + "aiUsage.chartHint": "Tokens d'entrée et de sortie au cours des 30 derniers jours ({zone})", + "aiUsage.legendInput": "Entrée", + "aiUsage.legendOutput": "Sortie", + "aiUsage.chartLabel": "Utilisation quotidienne de tokens d'IA sur les 30 derniers jours", + "aiUsage.barTitle": "{day} : {tokens} tokens, {requests} requêtes", + "calendar.loadFailed": "Impossible de charger les événements de l'agenda.", + "calendar.invalidTimes": "Saisissez des horaires d'événement valides.", + "calendar.noFuture": "Il ne reste aucune occurrence future à mettre à jour.", + "calendar.saveFailed": "Impossible d'enregistrer l'événement. Veuillez réessayer.", + "calendar.deleteFuture": "Supprimer les occurrences futures à partir de maintenant ?", + "calendar.deleteEvent": "Supprimer cet événement ?", + "calendar.deleteFailed": "Impossible de supprimer l'événement. Veuillez réessayer.", + "calendar.updateTimeFailed": "Impossible de mettre à jour l'horaire de l'événement. Veuillez réessayer.", + "calendar.chooseDate": "Choisir une date de l'agenda", + "calendar.previousMonth": "Mois précédent", + "calendar.nextMonth": "Mois suivant", + "calendar.previousView.week": "Semaine précédente", + "calendar.previousView.day": "Jour précédent", + "calendar.nextView.week": "Semaine suivante", + "calendar.nextView.day": "Jour suivant", + "calendar.today": "Aujourd'hui", + "calendar.options": "Options de l'agenda", + "calendar.week": "Semaine", + "calendar.day": "Jour", + "calendar.view": "Vue de l'agenda", + "calendar.newEvent": "Nouvel événement", + "calendar.addEventOn": "Ajouter un événement le {date}", + "calendar.editEvent": "Modifier l'événement", + "calendar.createEvent": "Créer un événement", + "calendar.addTitle": "Ajouter un titre", + "calendar.eventName": "Nom de l'événement", + "calendar.closeEditor": "Fermer l'éditeur d'événement", + "calendar.from": "De", + "calendar.to": "À", + "calendar.fromLabel": "Date et heure de début", + "calendar.toLabel": "Date et heure de fin", + "calendar.setDuration": "Définir la durée de l'événement", + "calendar.dur.15": "15 min", + "calendar.dur.30": "30 min", + "calendar.dur.60": "1 heure", + "calendar.dur.1440": "1 jour", + "calendar.repeat": "Répéter", + "calendar.repeat.none": "Ne se répète pas", + "calendar.repeat.daily": "Tous les jours", + "calendar.repeat.weekly": "Toutes les semaines", + "calendar.repeat.monthly": "Tous les mois", + "calendar.repeat.weekdays": "Jours de semaine", + "calendar.repeatOnWeekdays": "Répéter certains jours de la semaine", + "calendar.repeatOn": "Répéter le {day}", + "calendar.weekdayShort.0": "Dim", + "calendar.weekdayShort.1": "Lun", + "calendar.weekdayShort.2": "Mar", + "calendar.weekdayShort.3": "Mer", + "calendar.weekdayShort.4": "Jeu", + "calendar.weekdayShort.5": "Ven", + "calendar.weekdayShort.6": "Sam", + "calendar.addGuests": "Ajouter des invités", + "calendar.guestsLabel": "Invités (e-mails séparés par des virgules)", + "calendar.addLocation": "Ajouter un lieu", + "calendar.location": "Lieu", + "calendar.addDescription": "Ajouter une description", + "calendar.description": "Description", + "calendar.eventColor": "Couleur de l'événement", + "calendar.upcoming": "À venir", + "calendar.upcomingLoadFailed": "Impossible de charger les événements à venir.", + "calendar.noUpcoming": "Aucun événement à venir.", + "calendar.loadingUpcoming": "Chargement des événements à venir", + "calendar.tomorrow": "Demain", + "calendar.sectionLabel": "Section de l'agenda", + "calendar.bookings": "Réservations", + "calendar.calendar": "Agenda", + "calendar.sections": "Sections de l'agenda", + "calendar.resizeEdge.start": "Redimensionner le début de {title}", + "calendar.resizeEdge.end": "Redimensionner la fin de {title}", + "booking.hostListFailed": "Impossible de charger la liste des utilisateurs.", + "booking.loadFailed": "Impossible de charger les réservations.", + "booking.saveFailed": "Impossible d'enregistrer l'événement de réservation.", + "booking.saved": "Événement de réservation enregistré.", + "booking.created": "Événement de réservation créé.", + "booking.enableFailed": "Impossible d'activer l'événement de réservation.", + "booking.updateFailed": "Impossible de mettre à jour l'événement de réservation.", + "booking.deleteConfirm": "Supprimer « {name} » ?", + "booking.deleteFailed": "Impossible de supprimer l'événement de réservation.", + "booking.usernameUnavailable": "Le nom d'utilisateur de réservation n'est pas disponible.", + "booking.linkCopied": "Lien de réservation copié.", + "booking.copyFailed": "Impossible de copier le lien de réservation.", + "booking.events": "Événements de réservation", + "booking.title": "Réservations", + "booking.description": "Définissez les réunions que les gens peuvent réserver avec vous.", + "booking.newEvent": "Nouvel événement", + "booking.none": "Aucun événement de réservation pour le moment", + "booking.noneHint": "Créez un événement pour partager vos disponibilités.", + "booking.noLocation": "Aucun lieu défini", + "booking.copyLink": "Copier le lien", + "booking.openPage": "Ouvrir la page de réservation de {name}", + "booking.turningOn": "Activation…", + "booking.turnOn": "Activer", + "booking.turnOff": "Désactiver", + "booking.moreOptions": "Plus d'options pour {name}", + "booking.edit": "Modifier", + "booking.duration.hour": "1 heure", + "booking.duration.hours": "{count} heures", + "booking.duration.min": "{count} min", + "booking.noDays": "Aucun jour sélectionné", + "booking.timeWindows": "{count} plages horaires", + "booking.host.enterNameOrEmail": "Saisissez un nom ou un e-mail.", + "booking.host.invalidEmail": "E-mail invalide", + "booking.host.multiple": "Plusieurs utilisateurs correspondent. Saisissez leur adresse e-mail.", + "booking.host.notFound": "Aucun utilisateur de ce nom n'est dans votre liste d'utilisateurs.", + "booking.editor.details": "Détails de l'événement", + "booking.editor.editColor": "Modifier la couleur de l'événement", + "booking.editor.meetingName": "Nom de la réunion", + "booking.editor.newMeeting": "Nouvelle réunion", + "booking.editor.toggleDetails": "Afficher/masquer les détails de l'événement", + "booking.editor.slug": "Slug du lien", + "booking.editor.slugPlaceholder": "nouvelle-reunion", + "booking.editor.yourName": "votre-nom", + "booking.editor.eventSlug": "slug-evenement", + "booking.editor.descriptionPlaceholder": "Dites aux invités de quoi parle cette réunion", + "booking.editor.color": "Couleur", + "booking.editor.duration": "Durée", + "booking.editor.meetingLength": "Durée de la réunion", + "booking.editor.minutes15": "15 minutes", + "booking.editor.minutes30": "30 minutes", + "booking.editor.minutes45": "45 minutes", + "booking.editor.hour1": "1 heure", + "booking.editor.custom": "Personnalisée", + "booking.editor.customMinutes": "Minutes personnalisées", + "booking.editor.location": "Lieu", + "booking.editor.locationPlaceholder": "Appel téléphonique, lien vidéo ou adresse", + "booking.editor.availability": "Disponibilité", + "booking.editor.availableDays": "Jours disponibles", + "booking.editor.times": "Horaires", + "booking.editor.removeTime": "Retirer l'horaire {n}", + "booking.editor.addTime": "Ajouter un horaire", + "booking.editor.timesUse": "Les horaires utilisent {zone}.", + "booking.editor.host": "Organisateur", + "booking.editor.unavailableUser": "Utilisateur indisponible", + "booking.editor.you": " (vous)", + "booking.editor.alreadyHost": "Cet utilisateur est déjà organisateur.", + "booking.editor.maxHosts": "Une réservation peut avoir jusqu'à 20 organisateurs.", + "booking.editor.addHost": "Ajouter un organisateur", + "booking.editor.nameOrEmail": "Nom ou e-mail", + "booking.editor.add": "Ajouter", + "booking.editor.userFallback": "Utilisateur", + "booking.editor.more": "Plus", + "booking.editor.create": "Créer", + "booking.loading": "Chargement des réservations", + "booking.loadingEllipsis": "Chargement des réservations…", + "public.unavailable": "Cette réunion n'est pas disponible.", + "public.bookFailed": "Impossible de réserver ce créneau. Veuillez réessayer.", + "public.bookFailedShort": "Impossible de réserver ce créneau.", + "public.backToCalendar": "Retour à l'agenda", + "public.allMeetings": "Toutes les réunions", + "public.minutes": "{count} min", + "public.booked": "Réunion réservée", + "public.scheduledFor": "Votre réunion est programmée pour {when}.", + "public.enterDetails": "Saisissez vos informations", + "public.name": "Nom", + "public.email": "E-mail", + "public.guestEmails": "E-mails des invités", + "public.commaSeparated": "(séparés par des virgules)", + "public.addGuests": "Ajouter des invités", + "public.notes": "Partagez tout ce qui peut aider à préparer notre réunion.", + "public.booking": "Réservation…", + "public.schedule": "Programmer l'événement", + "public.prevMonth": "Mois précédent", + "public.nextMonth": "Mois suivant", + "public.weekdayHeads": "Lu|Ma|Me|Je|Ve|Sa|Di", + "public.today": ", aujourd'hui", + "public.availableTimes": ", {count} créneaux disponibles", + "public.noTimesDay": ", aucun créneau disponible", + "public.timeZone": "Fuseau horaire", + "public.noTimes60": "Aucun créneau n'est disponible dans les 60 prochains jours.", + "public.noTimesDate": "Aucun créneau n'est disponible à cette date. Choisissez une autre date en surbrillance.", + "public.listUnavailable": "Cette page de réservation n'est pas disponible.", + "public.bookMeeting": "Réserver une réunion", + "public.bookMeetingWith": "Réserver une réunion avec {name}", + "public.chooseMeeting": "Choisissez une réunion pour voir les créneaux disponibles.", + "public.noMeetings": "Aucune réunion n'est disponible à la réservation pour le moment.", + "public.minutesLong": "{count} minutes", + "public.loadingAvailability": "Chargement des disponibilités", + "public.loadingAvailabilityEllipsis": "Chargement des disponibilités…", + "public.loadingMeetings": "Chargement des réunions", + "public.loadingMeetingsEllipsis": "Chargement des réunions…", + "agent.tool.list_emails.running": "Liste des e-mails...", + "agent.tool.list_emails.completed": "E-mails listés", + "agent.tool.list_emails.description": "A listé les e-mails du dossier de la boîte mail sélectionné.", + "agent.tool.get_email.running": "Lecture de l'e-mail...", + "agent.tool.get_email.completed": "E-mail lu", + "agent.tool.get_email.description": "A lu un e-mail et les détails de ses pièces jointes.", + "agent.tool.get_thread.running": "Lecture de la conversation...", + "agent.tool.get_thread.completed": "Conversation lue", + "agent.tool.get_thread.description": "A lu la conversation contenant un e-mail.", + "agent.tool.search_emails.running": "Recherche d'e-mails...", + "agent.tool.search_emails.completed": "E-mails recherchés", + "agent.tool.search_emails.description": "A recherché dans les objets et corps des e-mails de cette boîte mail.", + "agent.tool.draft_email.running": "Rédaction de l'e-mail...", + "agent.tool.draft_email.completed": "E-mail rédigé", + "agent.tool.draft_email.description": "A enregistré un nouveau brouillon d'e-mail pour révision. Aucun e-mail n'a été envoyé.", + "agent.tool.draft_reply.running": "Rédaction de la réponse...", + "agent.tool.draft_reply.completed": "Réponse rédigée", + "agent.tool.draft_reply.description": "A enregistré un brouillon de réponse pour révision. Aucun e-mail n'a été envoyé.", + "agent.tool.mark_email_read.running": "Préparation du statut de lecture...", + "agent.tool.mark_email_read.completed": "Statut de lecture préparé", + "agent.tool.mark_email_read.description": "A préparé une modification du statut de lecture d'un e-mail pour approbation.", + "agent.tool.move_email.running": "Préparation du déplacement de l'e-mail...", + "agent.tool.move_email.completed": "Déplacement d'e-mail préparé", + "agent.tool.move_email.description": "A préparé le déplacement d'un e-mail pour approbation.", + "agent.tool.move_emails.running": "Préparation du déplacement des e-mails...", + "agent.tool.move_emails.completed": "Déplacements d'e-mails préparés", + "agent.tool.move_emails.description": "A préparé des déplacements d'e-mails pour approbation.", + "agent.tool.discard_draft.running": "Préparation de la suppression du brouillon...", + "agent.tool.discard_draft.completed": "Suppression de brouillon préparée", + "agent.tool.discard_draft.description": "A préparé la suppression d'un brouillon de l'assistant pour approbation.", + "agent.tool.get_schedule.running": "Récupération de l'agenda...", + "agent.tool.get_schedule.completed": "Agenda récupéré", + "agent.tool.get_schedule.description": "A lu les événements de l'agenda sur la période demandée.", + "agent.tool.search_events.running": "Recherche d'événements...", + "agent.tool.search_events.completed": "Événements recherchés", + "agent.tool.search_events.description": "A recherché des événements de l'agenda.", + "agent.tool.get_event.running": "Lecture de l'événement...", + "agent.tool.get_event.completed": "Événement lu", + "agent.tool.get_event.description": "A lu un événement de l'agenda.", + "agent.tool.create_event.running": "Création de l'événement...", + "agent.tool.create_event.completed": "Événement créé", + "agent.tool.create_event.description": "A créé un événement d'agenda.", + "agent.tool.update_events.running": "Mise à jour des événements...", + "agent.tool.update_events.completed": "Événements mis à jour", + "agent.tool.update_events.description": "A mis à jour des événements de l'agenda.", + "agent.tool.delete_events.running": "Suppression des événements...", + "agent.tool.delete_events.completed": "Événements supprimés", + "agent.tool.delete_events.description": "A supprimé des événements de l'agenda.", + "agent.tool.find_free_time.running": "Recherche de créneaux libres...", + "agent.tool.find_free_time.completed": "Créneaux libres trouvés", + "agent.tool.find_free_time.description": "A vérifié la disponibilité de l'agenda.", + "agent.tool.get_calendars.running": "Récupération des agendas...", + "agent.tool.get_calendars.completed": "Agendas récupérés", + "agent.tool.get_calendars.description": "A listé les agendas disponibles.", + "agent.tool.fallbackDescription": "A utilisé un outil de messagerie.", + "agent.tool.using": "Utilisation d'un outil...", + "agent.tool.searchedCount.one": "A recherché {count} e-mail", + "agent.tool.searchedCount.other": "A recherché {count} e-mails", + "agent.tool.listedCount.one": "A listé {count} e-mail", + "agent.tool.listedCount.other": "A listé {count} e-mails", + "agent.tool.threadCount.one": "A lu {count} e-mail de la conversation", + "agent.tool.threadCount.other": "A lu {count} e-mails de la conversation", + "agent.tool.movedCount.one": "A déplacé {count} e-mail", + "agent.tool.movedCount.other": "A déplacé {count} e-mails", + "agent.tool.preparedCount.one": "A préparé {count} e-mail pour révision", + "agent.tool.preparedCount.other": "A préparé {count} e-mails pour révision", + "agent.welcome.sumThis": "Résumer cet e-mail", + "agent.welcome.sumThisDetail": "Obtenez les points clés", + "agent.welcome.reply": "Suggérer une réponse", + "agent.welcome.replyDetail": "Créez un brouillon à relire", + "agent.welcome.actionsThis": "Lister les actions à mener", + "agent.welcome.actionsThisDetail": "Trouvez les prochaines étapes dans cet e-mail", + "agent.welcome.sumRecent": "Résumer les e-mails récents", + "agent.welcome.sumRecentDetail": "Rattrapez votre boîte de réception", + "agent.welcome.actions": "Trouver les actions à mener", + "agent.welcome.actionsDetail": "Voyez ce qui demande votre attention", + "agent.panel.settingsLoadFailed": "Impossible de charger les paramètres de l'assistant", + "agent.panel.conversationLoadFailed": "Impossible de charger la conversation", + "agent.panel.conversationDeleteFailed": "Impossible de supprimer la conversation", + "agent.panel.unavailable": "Assistant indisponible", + "agent.panel.failed": "Échec de l'assistant", + "agent.panel.saveFailed": "Impossible d'enregistrer les paramètres", + "agent.panel.retryFailed": "Impossible de relancer le brouillon", + "agent.panel.discardFailed": "Impossible d'abandonner le brouillon", + "agent.panel.reviewFailed": "Impossible d'ouvrir la révision du brouillon", + "agent.panel.approveFailed": "Impossible d'approuver l'action", + "agent.panel.label": "Assistant e-mail", + "agent.panel.backToAssistant": "Retour à l'assistant", + "agent.panel.settings": "Paramètres", + "agent.panel.assistant": "Assistant", + "agent.panel.menuLabel": "Conversations et paramètres de l'assistant", + "agent.panel.newChat": "Nouvelle discussion", + "agent.panel.previousChats": "Discussions précédentes", + "agent.panel.deleteChatLabel": "Supprimer {title}", + "agent.panel.deleteChat": "Supprimer la discussion", + "agent.panel.noChats": "Aucune discussion précédente", + "agent.panel.backToChat": "Retour à la discussion", + "agent.panel.exitFull": "Quitter l'assistant en plein écran", + "agent.panel.expandFull": "Agrandir l'assistant en plein écran", + "agent.panel.exitFullTitle": "Quitter le plein écran", + "agent.panel.fullTitle": "Plein écran", + "agent.panel.close": "Fermer l'assistant", + "agent.panel.configureProvider": "Configurez un fournisseur d'IA pour utiliser le chat et les brouillons automatiques.", + "agent.panel.welcome": "Comment puis-je vous aider aujourd'hui ?", + "agent.panel.autoDraftReady": "Brouillon automatique prêt", + "agent.panel.openDraft": "Ouvrir le brouillon", + "agent.panel.regenerate": "Régénérer", + "agent.panel.discard": "Abandonner", + "agent.panel.working": "En cours...", + "agent.panel.promptPlaceholder": "Saisissez un message ici", + "agent.panel.stop": "Arrêter la réponse", + "agent.panel.send": "Envoyer le message", + "agent.panel.needPermission": "L'autorisation de gérer la boîte mail est requise pour modifier ces paramètres.", + "agent.panel.reviewer": "Relecteur des brouillons", + "agent.panel.model": "Modèle", + "agent.panel.noModels": "Aucun modèle configuré", + "agent.panel.autoDraft": "Rédiger automatiquement les réponses", + "agent.panel.disableOoo": "Désactivez les réponses automatiques d'absence pour activer les brouillons IA.", + "agent.panel.instructions": "Instructions de rédaction", + "agent.panel.dailyLimit": "Limite quotidienne de brouillons automatiques", + "agent.panel.save": "Enregistrer les paramètres", + "agent.panel.privacy": "Le contenu de l'e-mail et de la conversation sélectionnés est envoyé au fournisseur d'IA configuré lorsque vous utilisez le chat ou les brouillons automatiques. Les brouillons nécessitent toujours votre confirmation avant l'envoi.", + "agent.panel.retry": "Réessayer", + "agent.review.dialog": "Vérifier l'e-mail avant l'envoi", + "agent.review.reviewSchedule": "Vérifier et programmer", + "agent.review.reviewSend": "Vérifier et envoyer", + "agent.review.confirmScheduled": "Confirmez exactement ce brouillon IA avant qu'il soit programmé.", + "agent.review.confirmDelivered": "Confirmez exactement ce brouillon IA avant qu'il soit distribué.", + "agent.review.from": "De", + "agent.review.to": "À", + "agent.review.cc": "Cc", + "agent.review.bcc": "Cci", + "agent.review.subject": "Objet", + "agent.review.sendAt": "Envoyer le", + "agent.review.attachments": "Pièces jointes : {list}", + "agent.review.deliveryNeedsReview": "La distribution nécessite une vérification", + "agent.review.couldNotSend": "Impossible d'envoyer", + "agent.review.scheduling": "Programmation…", + "agent.review.sending": "Envoi…", + "agent.review.confirmSchedule": "Confirmer et programmer", + "agent.review.confirmSend": "Confirmer et envoyer", + "agent.turn.waiting": "En attente du modèle...", + "agent.turn.noDetails": "Aucun détail sur l'outil n'a été fourni.", + "agent.turn.workedFor": "A travaillé pendant {duration}", + "agent.turn.workDetails": "Détails du travail", + "agent.activity.attachments": "Pièces jointes : {list}", + "agent.activity.attachment": "pièce jointe", + "agent.activity.editDraft": "Modifier le brouillon", + "agent.activity.schedule": "Programmer", + "agent.activity.approveSend": "Approuver pour envoyer", + "agent.activity.approving": "Approbation…", + "agent.activity.approveDiscard": "Approuver la suppression", + "agent.activity.approveStatus": "Approuver le changement de statut", + "agent.activity.approveMove": "Approuver le déplacement vers {destination}", + "agent.queue.label": "Messages de l'assistant en file d'attente", + "agent.queue.edit": "Modifier le message en file d'attente", + "agent.queue.steerTitle": "Arrêter la réponse en cours et envoyer ce message ensuite", + "agent.queue.sendNowTitle": "Envoyer maintenant ce message en file d'attente", + "agent.queue.steer": "Rediriger", + "agent.queue.sendNow": "Envoyer maintenant", + "agent.queue.remove": "Retirer le message en file d'attente", + "agent.loadingConversation": "Chargement de la conversation", + "importPage.others": "Autres", + "importPage.selectSections": "Sélectionnez les sections source", + "importPage.selectMailboxFirst": "Sélectionnez d'abord une boîte mail", + "importPage.preparing": "Préparation des fichiers", + "importPage.uploading": "Envoi des fichiers", + "importPage.importingMessages": "Importation des messages", + "importPage.fileFailed": "Échec de l'importation du fichier", + "importPage.discovering": "Découverte des dossiers IMAP", + "importPage.importingSource": "Importation de {source}", + "importPage.importingSourceProgress": "Importation de {source} ({processed}/{total} messages)", + "importPage.importedSource": "{source} importé", + "importPage.imapFailed": "Échec de l'importation IMAP", + "importPage.title": "Importer la boîte mail", + "importPage.description": "Choisissez ce que vous importez et comment Mailflare doit le recevoir.", + "importPage.source": "Source de l'importation", + "importPage.backupFile": "Fichier de sauvegarde", + "importPage.imap": "IMAP", + "importPage.chooseSections": "Choisissez les sections à importer", + "importPage.selected": "Sélectionnées", + "importPage.selectFile": "Sélectionnez le fichier de sauvegarde", + "importPage.fileHint": "Importez des fichiers .eml ou .mbox exportés. Les exports de fichiers n'incluent pas de façon fiable les métadonnées de section source ; les fichiers sont donc importés en une seule fois dans {section}", + "importPage.othersNote": "Les autres dossiers peuvent être importés automatiquement depuis IMAP. L'importation de fichiers ne peut pas déterminer à quelle section appartient un message.", + "importPage.importFiles": "Importer les fichiers sélectionnés", + "importPage.host": "Hôte", + "importPage.port": "Port", + "importPage.username": "Nom d'utilisateur", + "importPage.passwordOrApp": "Mot de passe ou mot de passe d'application", + "importPage.perBatch": "Messages par lot", + "importPage.perSource": "Limite de messages par source", + "importPage.importAll": "Importer tous les messages (les plus récents d'abord, par lots)", + "importPage.useTls": "Utiliser TLS", + "importPage.imapNote": "IMAP importe automatiquement les sections source sélectionnées. Les dossiers sont découverts sur le compte source et importés dans des dossiers Mailflare correspondants, nouveaux ou existants.", + "importPage.importSources": "Importer les sources sélectionnées", + "layout.resizeMenu": "Redimensionner le menu de gauche", + "nav.loadingPage": "Chargement de la page", + "message.blockRemote": "Bloquer le contenu distant", + "message.allowRemote": "Autoriser le contenu distant" +} diff --git a/src/lib/i18n/locales.ts b/src/lib/i18n/locales.ts index b4431f3..0977133 100644 --- a/src/lib/i18n/locales.ts +++ b/src/lib/i18n/locales.ts @@ -14,6 +14,8 @@ type LocaleEntry = { export const locales = { en: { label: "English", load: async () => en }, "pt-BR": { label: "Português (Brasil)", load: async () => (await import("./pt-BR.json")).default }, + es: { label: "Español", load: async () => (await import("./es.json")).default }, + fr: { label: "Français", load: async () => (await import("./fr.json")).default }, } satisfies Record; export type Locale = keyof typeof locales; diff --git a/tests/i18n.test.mjs b/tests/i18n.test.mjs index 6d0adc9..5fe6492 100644 --- a/tests/i18n.test.mjs +++ b/tests/i18n.test.mjs @@ -49,7 +49,7 @@ async function bundleI18n(outfile, extraLocale = false) { setup(builder) { if (extraLocale) builder.onLoad({ filter: /\/i18n\/locales\.ts$/ }, ({ path }) => ({ contents: readFileSync(path, "utf8").replace("export const locales = {", `export const locales = { - es: { label: "Español", dir: "rtl", load: async () => ({ ...en, "navigation.inbox": "Entrada", "navigation.inbox.one": "{count} entrada", "navigation.inbox.other": "{count} entradas", "language.label": "Idioma" }) },`), + xx: { label: "Testlandic", dir: "rtl", load: async () => ({ ...en, "navigation.inbox": "Entrada", "navigation.inbox.one": "{count} entrada", "navigation.inbox.other": "{count} entradas", "language.label": "Idioma" }) },`), loader: "ts", })); builder.onResolve({ filter: /^(next\/headers|next\/font\/google|@\/components\/providers)$/ }, (args) => ({ path: args.path, namespace: "stub" })); @@ -139,17 +139,17 @@ test("a locale registered once reaches resolution, translation, cookie, selector const extraFile = join(outDir, "with-spanish.mjs"); await bundleI18n(extraFile, true); const extended = await import(pathToFileURL(extraFile).href); - assert.equal(extended.resolveLocale("es"), "es"); - assert.equal(extended.translate(await extended.loadMessages("es"), "navigation.inbox"), "Entrada"); - assert.match(extended.serializeLocaleCookie("es", true), /^mailflare-locale=es;/); - const selector = await extended.renderLanguage("es"); - assert.match(selector, /value="es" lang="es" selected="">Español<\/option>/); + assert.equal(extended.resolveLocale("xx"), "xx"); + assert.equal(extended.translate(await extended.loadMessages("xx"), "navigation.inbox"), "Entrada"); + assert.match(extended.serializeLocaleCookie("xx", true), /^mailflare-locale=xx;/); + const selector = await extended.renderLanguage("xx"); + assert.match(selector, /value="xx" lang="xx" selected="">Testlandic<\/option>/); assert.match(selector, />Entrada<\/span>/); - const layout = await extended.renderLayout("es"); - assert.match(layout, /Entrada<\/span>/); - assert.match(layout, /