Regras. A tela pedia um tipo de correspondência do Sieve pelo nome - :contains, :is, :matches (regex) - e colava o valor escrito diretamente num script. Punha uma linguagem de padrões à frente de quem só queria dizer "o que vem do banco vai para Faturas", e bastava uma aspa no valor para o script deixar de fazer parse, desativando silenciosamente todas as regras de uma vez. O vocabulário passa a ser o de quem escreve: um campo, uma condição em português, um valor e uma ação. Os curingas são gerados a partir de "começa com" e "termina com" - ninguém os escreve, e um asterisco escrito por acaso continua a ser um asterisco. A pasta de destino é escolhida de uma lista das pastas que existem mesmo, em vez de ser escrita à mão: antes uma regra podia nomear uma pasta inexistente e nunca disparar, sem dizer porquê. A ordem passa a ser visível e alterável, porque a primeira regra que arquiva uma mensagem decide para onde ela vai. Um script que esta tela não consegue exprimir - escrito à mão, ou por um cliente de secretária sobre ManageSieve - é mostrado tal como está, em vez de ser reescrito na coisa mais parecida que este formulário sabe dizer, o que mudaria em silêncio o que o correio de alguém faz. Pastas próprias. Existiam na base de dados e as regras podiam arquivar nelas, mas a barra lateral listava só as seis fixas, portanto não havia como ver uma - nem como criar. Criar fica onde a vontade aparece, na própria barra; apagar avisa que leva as mensagens junto, porque leva. Encontrado a escrever isto: o motor tratava "\\*" como barra seguida de curinga em vez de um asterisco literal. Como é esta tela que gera os curingas, uma regra sobre um assunto com "50% *" teria correspondido a todos os assuntos começados por "50% ". Corrigido no motor, com testes dos dois lados. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
365 lines
16 KiB
JSON
365 lines
16 KiB
JSON
{
|
|
"admin": {
|
|
"addAlias": "Añadir apelido",
|
|
"aliasTarget": "Dirección de destino",
|
|
"aliasesTitle": "Alias",
|
|
"auditLog": "Registro de auditoría",
|
|
"backToWebmail": "Volver al webmail",
|
|
"cancelJob": "Cancelar",
|
|
"certificateState": "Certificado",
|
|
"checksPassed": "{passed} de {total} aprobadas",
|
|
"createAccount": "Crear cuenta",
|
|
"createAlias": "Crear un alias de enrutamiento",
|
|
"csvImportFailed": "La importación del CSV falló",
|
|
"csvImported": "{count} buzones importados.",
|
|
"csvIntro": "Pega el CSV para crear varias cuentas con sus carpetas de la RFC 6154. Columnas: email, rol, cuota_mb.",
|
|
"csvPreview": "Vista previa",
|
|
"csvRun": "Ejecutar la importación",
|
|
"csvTitle": "Importar buzones en masa (CSV)",
|
|
"dashboardSubtitle": "Cifras en vivo leídas de la base de datos.",
|
|
"dashboardTitle": "Resumen",
|
|
"dkimAlgorithm": "Tipo de clave",
|
|
"dkimOverlap": "Ambas claves firman el correo saliente durante {days} días para que nada falle mientras el DNS se propaga.",
|
|
"dkimPublishRecord": "Publique este registro en DNS:",
|
|
"dkimRotate": "Generar una nueva clave",
|
|
"dkimSelector": "Selector",
|
|
"dkimTitle": "Rotación de clave DKIM",
|
|
"dmarcSubtitle": "Desglose de los informes XML agregados procesados.",
|
|
"dmarcTitle": "Informes DMARC",
|
|
"dnsRecordsFor": "Registros DNS de {domain}",
|
|
"dnsStatusDrift": "Divergente",
|
|
"dnsStatusPartial": "Parcial",
|
|
"dnsStatusVerified": "Verificado",
|
|
"domainName": "Nombre del dominio",
|
|
"domainsTitle": "Dominios",
|
|
"expiresInDays": "Caduca en {days} días",
|
|
"freezeDomain": "Congelar dominio",
|
|
"greylistScore": "Puntuación de greylist",
|
|
"headerScore": "Puntuación de etiquetado de cabecera",
|
|
"jobCancelled": "El trabajo {id} fue cancelado.",
|
|
"jobRetried": "El trabajo {id} se volvió a poner en cola para otro intento.",
|
|
"lastChecked": "Última comprobación: {when}",
|
|
"lastReload": "Última recarga",
|
|
"lockAccount": "Bloquear",
|
|
"mailHost": "Host de correo",
|
|
"mailboxCount": "{count} buzones",
|
|
"mailboxesSubtitle": "Cuentas, alias, importación CSV y la política de segundo factor.",
|
|
"mailboxesTitle": "Buzones",
|
|
"mfaAdmins": "Obligatorio para administradores",
|
|
"mfaEveryone": "Obligatorio para todos",
|
|
"mfaOptional": "Opcional",
|
|
"mfaPolicyIntro": "Elija con qué rigor este dominio exige un segundo factor.",
|
|
"mfaPolicyTitle": "Requisito de segundo factor",
|
|
"noCertificate": "No hay certificado cargado para este host.",
|
|
"noChecks": "No se informaron verificaciones.",
|
|
"noDomains": "Aún no se ha dado de alta ningún dominio.",
|
|
"notPublished": "No publicado",
|
|
"onboardIntro": "Crea el dominio y sus alias estándar RFC 2142, apuntados a su dirección.",
|
|
"onboardTitle": "Añadir un dominio",
|
|
"openAdmin": "Consola de administración",
|
|
"preflightTitle": "Verificaciones de preparación",
|
|
"presentProxied": "Presente (con proxy)",
|
|
"queueEmpty": "La cola de salida está vacía.",
|
|
"queueSubtitle": "Inspeccione la cola de salida, reintente un trabajo o cancele uno.",
|
|
"queueTitle": "Cola de salida",
|
|
"quotaMb": "Cuota (MB)",
|
|
"readinessIntro": "Verificaciones que el servidor informa sobre sí mismo antes de transportar correo en producción.",
|
|
"reconcileDns": "Reconciliar DNS",
|
|
"reconcileNotImplemented": "La verificación de registros DNS individuales aún no está implementada: esto registra la solicitud y relee el estado almacenado, no consulta un resolutor.",
|
|
"rejectScore": "Puntuación de rechazo",
|
|
"retryJob": "Reintentar",
|
|
"rspamdIntro": "Puntuaciones que activan greylisting, etiquetado de cabecera y rechazo.",
|
|
"rspamdSaved": "Umbrales guardados.",
|
|
"saveThresholds": "Guardar umbrales",
|
|
"securitySubtitle": "Verificaciones de preparación, estado TLS, umbrales de spam y el registro de auditoría.",
|
|
"securityTitle": "Seguridad",
|
|
"tabAccounts": "Cuentas",
|
|
"tabAliases": "Alias",
|
|
"tabAudit": "Registro de auditoría",
|
|
"tabCsv": "Importación masiva",
|
|
"tabReadiness": "Preparación",
|
|
"tabRspamd": "Umbrales de spam",
|
|
"tabTls": "TLS",
|
|
"tlsMode": "Modo TLS",
|
|
"tlsTitle": "Certificado y transporte",
|
|
"traceNoResults": "No se encontró rastro para ese ID de cola.",
|
|
"tracePlaceholder": "ID de la cola",
|
|
"traceResultFor": "Rastreo de {id}",
|
|
"traceStep": "Paso {n}",
|
|
"traceTitle": "Rastrear un mensaje",
|
|
"unknownSni": "Solicitudes SNI desconocidas",
|
|
"unlockAccount": "Desbloquear",
|
|
"verifyIntro": "Resuelve cada registro esperado en resolutores públicos e informa uno por uno.",
|
|
"watcherHealthy": "Monitor de certificado",
|
|
"openAdminShort": "Admin"
|
|
},
|
|
"auth": {
|
|
"adminLoginTitle": "Consola de administración",
|
|
"adminStepUpNote": "La consola de administración vuelve a pedir su segundo factor, aunque ya haya iniciado sesión en el webmail.",
|
|
"authFailed": "Fallo en la autenticación",
|
|
"cantScanQr": "¿No puede escanear? Introduzca esta clave manualmente:",
|
|
"emailLabel": "Dirección de correo",
|
|
"enrolmentFailed": "No se pudo iniciar la configuración del segundo factor",
|
|
"enrolmentIntro": "La consola de administración requiere un segundo factor. Configure uno ahora para continuar.",
|
|
"genericError": "Algo salió mal",
|
|
"invalidCredentials": "Correo o contraseña inválidos",
|
|
"mfaRequired": "Introduzca el código de seis dígitos de su aplicación de autenticación.",
|
|
"orRecoveryCode": "¿Perdiste el teléfono? Aquí también sirve un código de recuperación.",
|
|
"passwordLabel": "Contraseña",
|
|
"qrCodeAlt": "Código QR para configurar la verificación en dos pasos",
|
|
"scanQr": "Escanee este código con Google Authenticator, Aegis, Authy o 1Password.",
|
|
"signInButton": "Iniciar sesión",
|
|
"signOutOfAdmin": "Salir de administración",
|
|
"stepUpIntro": "Ya has iniciado sesión, así que solo hace falta tu segundo factor. No se te pide la contraseña otra vez.",
|
|
"stepUpSignedInAs": "Sesión iniciada como {email}",
|
|
"stepUpTitle": "Abrir la consola de administración",
|
|
"totpCodeLabel": "Código de autenticación",
|
|
"userLoginTitle": "Acceda a su buzón",
|
|
"verificationFailed": "Fallo en la verificación",
|
|
"verifyCodeButton": "Verificar código"
|
|
},
|
|
"common": {
|
|
"actions": "Acciones",
|
|
"add": "Añadir",
|
|
"adminPortal": "Administración",
|
|
"appName": "LambdaMail",
|
|
"back": "Volver",
|
|
"cancel": "Cancelar",
|
|
"confirm": "Confirmar",
|
|
"continue": "Continuar",
|
|
"copied": "Copiado",
|
|
"copy": "Copiar",
|
|
"delete": "Eliminar",
|
|
"loading": "Cargando...",
|
|
"logout": "Cerrar sesión",
|
|
"never": "Nunca",
|
|
"none": "Ninguno",
|
|
"refresh": "Actualizar",
|
|
"retry": "Reintentar",
|
|
"save": "Guardar",
|
|
"search": "Buscar",
|
|
"status": "Estado",
|
|
"unavailable": "No disponible",
|
|
"userPortal": "Webmail"
|
|
},
|
|
"errors": {
|
|
"forbidden": "No tiene acceso a esto",
|
|
"loadFailed": "No se pudieron cargar los datos",
|
|
"serverError": "Algo salió mal en el servidor",
|
|
"unauthorized": "Inicie sesión de nuevo"
|
|
},
|
|
"mail": {
|
|
"addFiles": "Añadir archivos...",
|
|
"allMessages": "Todas",
|
|
"archive": "Archivo",
|
|
"attachments": "Adjuntos ({count})",
|
|
"attachmentsFilter": "Con adjuntos",
|
|
"attachmentsUnsupported": "Los adjuntos se listan solo por nombre; la subida de archivos aún no está implementada.",
|
|
"backToList": "Volver a la lista de mensajes",
|
|
"bold": "Negrita",
|
|
"bulletList": "Lista con viñetas",
|
|
"compose": "Redactar",
|
|
"discard": "Descartar",
|
|
"draftSaveFailed": "No se pudo guardar el borrador",
|
|
"draftSaved": "Borrador guardado automáticamente",
|
|
"draftSaving": "Guardando borrador...",
|
|
"drafts": "Borradores",
|
|
"deleteForever": "Eliminar definitivamente",
|
|
"continueDraft": "Seguir escribiendo",
|
|
"emptyBody": "Este mensaje no tiene cuerpo de texto.",
|
|
"forward": "Reenviar",
|
|
"imagesEnabled": "Imágenes cargadas",
|
|
"hideCcBcc": "- Ocultar Cc/Cco",
|
|
"inbox": "Bandeja de entrada",
|
|
"insertLink": "Insertar enlace",
|
|
"insertUrl": "Introduzca la URL:",
|
|
"italic": "Cursiva",
|
|
"junk": "Spam",
|
|
"reports": "Informes",
|
|
"loadImages": "Cargar imágenes",
|
|
"markRead": "Marcar como leído",
|
|
"markUnread": "Marcar como no leído",
|
|
"messagesInFolder": "{count} mensajes",
|
|
"noMatches": "Nada coincide con esa búsqueda",
|
|
"noMessages": "Sin mensajes",
|
|
"noSubject": "(Sin asunto)",
|
|
"numberedList": "Lista numerada",
|
|
"remoteContentBlocked": "Se bloquearon las imágenes remotas para que este mensaje no pueda rastrearte.",
|
|
"reply": "Responder",
|
|
"searchMatches": "{count} encontrados",
|
|
"searchPlaceholder": "Buscar (from:, subject:)...",
|
|
"selectAMessage": "Selecciona un mensaje para leerlo",
|
|
"sendMessage": "Enviar mensaje",
|
|
"sending": "Enviando...",
|
|
"sent": "Enviados",
|
|
"showCcBcc": "+ Añadir Cc/Cco",
|
|
"strikethrough": "Tachado",
|
|
"trash": "Papelera",
|
|
"underline": "Subrayado",
|
|
"undoSend": "Enviando en {seconds}s",
|
|
"undoSendAction": "Deshacer",
|
|
"unreadCount": "{count} sin leer",
|
|
"unreadFilter": "Sin leer",
|
|
"ccLabel": "Cc",
|
|
"bccLabel": "Cco",
|
|
"hideImages": "Ocultar imágenes",
|
|
"alwaysFromSender": "Siempre de este remitente",
|
|
"forgetSender": "Dejar de confiar",
|
|
"moveTo": "Mover a"
|
|
},
|
|
"settings": {
|
|
"actionDiscard": "Descartar",
|
|
"actionFlag": "Marcar mensaje",
|
|
"actionMove": "Mover al Archivo",
|
|
"addRule": "Añadir regla",
|
|
"appPasswordPlaceholder": "Thunderbird / Outlook Mobile",
|
|
"appPasswords": "Contraseñas de aplicación",
|
|
"autoReplySaveFailed": "No se pudo guardar la respuesta automática",
|
|
"enableMfa": "Activar verificación en dos pasos",
|
|
"fieldFrom": "De",
|
|
"fieldHeader": "Cabecera",
|
|
"fieldSubject": "Asunto",
|
|
"generateAppPassword": "Generar",
|
|
"langEn": "English",
|
|
"langEs": "Español",
|
|
"langPtBR": "Português (Brasil)",
|
|
"language": "Idioma",
|
|
"matchContains": "contiene",
|
|
"matchEquals": "es exactamente",
|
|
"matchRegex": "coincide con regex",
|
|
"mfaDisabled": "Desactivada",
|
|
"mfaEnabled": "Activada",
|
|
"mfaStatus": "Estado de la verificación en dos pasos",
|
|
"recoveryCodesTitle": "Códigos de recuperación",
|
|
"ruleIf": "SI",
|
|
"ruleThen": "ENTONCES",
|
|
"saveAutoReply": "Guardar respuesta automática",
|
|
"saveRecoveryCodes": "Guárdelos en un lugar seguro. Cada uno funciona una sola vez y solo se muestran ahora.",
|
|
"security": "Seguridad",
|
|
"sessions": "Sesiones",
|
|
"settingsSaved": "Configuración guardada.",
|
|
"sieveIntro": "Reglas que organizan el correo entrante automáticamente.",
|
|
"sieveTitle": "Filtros (Sieve)",
|
|
"signOut": "Cerrar sesión",
|
|
"signatureIntro": "Se añade automáticamente a los mensajes que redacta.",
|
|
"signaturePlaceholder": "Saludos cordiales,\nSu nombre\nSu cargo",
|
|
"signatureSaveFailed": "No se pudo guardar la firma",
|
|
"signatureSaved": "Firma guardada.",
|
|
"signatureTitle": "Firma de correo",
|
|
"sixDigitCode": "Código de seis dígitos",
|
|
"startOverMfa": "¿Perdió el registro? Empiece de nuevo con una clave nueva",
|
|
"subtitle": "Verificación en dos pasos, filtros, respuesta automática y su firma.",
|
|
"title": "Configuración",
|
|
"twoFactorIntro": "Proteja su cuenta con Google Authenticator, Aegis, Authy o 1Password.",
|
|
"vacationBodyLabel": "Mensaje de la respuesta",
|
|
"vacationDefaultBody": "Gracias por su mensaje. Estoy ausente en este momento y responderé a mi regreso.",
|
|
"vacationDefaultSubject": "Fuera de la oficina",
|
|
"vacationIntro": "Responde automáticamente al correo entrante mientras esté ausente.",
|
|
"vacationSubjectLabel": "Asunto de la respuesta",
|
|
"vacationTitle": "Respuesta automática de ausencia",
|
|
"valuePlaceholder": "Valor a coincidir...",
|
|
"ruleField": "Campo",
|
|
"ruleCondition": "Condición",
|
|
"ruleValue": "Valor",
|
|
"ruleValuePlaceholder": "p. ej. factura",
|
|
"fieldTo": "Para",
|
|
"fieldCc": "Cc",
|
|
"condContains": "Contiene",
|
|
"condIs": "Es exactamente",
|
|
"condStartsWith": "Empieza por",
|
|
"condEndsWith": "Termina en",
|
|
"condNotContains": "No contiene",
|
|
"actionMarkRead": "Marcar como leída",
|
|
"ruleMoveUp": "Subir",
|
|
"ruleMoveDown": "Bajar",
|
|
"ruleOrderNote": "Las reglas se aplican en orden, y la primera que archiva un mensaje decide dónde va.",
|
|
"foreignScriptTitle": "Reglas escritas en otro sitio",
|
|
"foreignScriptIntro": "Estas reglas se escribieron a mano o desde un cliente de correo y usan funciones que esta pantalla no puede mostrar. Se siguen aplicando. Editarlas aquí cambiaría lo que hacen, por eso se muestran tal cual."
|
|
},
|
|
"ui": {
|
|
"accountLocked": "Bloqueada",
|
|
"accountStatus": "Estado de la cuenta",
|
|
"actions": "Acciones",
|
|
"active": "Activo",
|
|
"activeSessions": "Sesiones activas",
|
|
"actor": "Autor",
|
|
"actualRecord": "Valor actual",
|
|
"allChecksPassed": "Todas las verificaciones pasaron",
|
|
"appPasswordGenerated": "Contraseña de aplicación generada",
|
|
"appPasswordsSection": "Contraseñas de aplicación",
|
|
"attempts": "Intentos",
|
|
"bounceRate": "Tasa de rebote",
|
|
"ccRecipients": "Cc",
|
|
"changePassword": "Cambiar contraseña",
|
|
"clientIp": "IP del cliente",
|
|
"copyPasswordNow": "Cópiela ahora. No se mostrará de nuevo.",
|
|
"coreInfra": "Servicios principales",
|
|
"currentPassword": "Contraseña actual",
|
|
"currentSession": "Este dispositivo",
|
|
"daneVerified": "DANE verificado",
|
|
"destination": "Destino",
|
|
"diskUsed": "Almacenamiento usado",
|
|
"dkimAlignment": "Alineación DKIM",
|
|
"dkimResult": "DKIM",
|
|
"dmarcEnforcement": "Política DMARC",
|
|
"domainVerification": "Verificación de dominio",
|
|
"domainsVerified": "Dominios verificados",
|
|
"emailAddress": "Dirección de correo",
|
|
"eventAction": "Acción",
|
|
"expectedValue": "Valor esperado",
|
|
"healthy": "Correcto",
|
|
"imapEngine": "Servicio IMAP",
|
|
"inboundVolume": "Recibidas (24h)",
|
|
"jobId": "Trabajo",
|
|
"lastError": "Último error",
|
|
"liveMetrics": "Métricas en vivo",
|
|
"localDisk": "Disco local",
|
|
"mailboxesActive": "Buzones activos",
|
|
"messageBody": "Mensaje",
|
|
"messageVolume": "Mensajes",
|
|
"mfaActive": "TOTP activo",
|
|
"mfaNone": "Sin segundo factor",
|
|
"newPassword": "Nueva contraseña",
|
|
"noAppPasswords": "Aún no hay contraseñas de aplicación.",
|
|
"noData": "Aún sin datos",
|
|
"online": "En línea",
|
|
"outboundDelivered": "Enviadas (24h)",
|
|
"passwordChanged": "Contraseña cambiada.",
|
|
"postgresRunner": "Cola basada en Postgres",
|
|
"preflightTitle": "Preparación",
|
|
"provisionMailbox": "Crear buzón",
|
|
"queueDepth": "Tamaño de la cola",
|
|
"recipient": "Destinatario",
|
|
"recordName": "Registro",
|
|
"reportingOrg": "Organización informante",
|
|
"role": "Rol",
|
|
"scanners": "Análisis de spam y virus",
|
|
"sender": "Remitente",
|
|
"signOutOthers": "Cerrar sesión en otros dispositivos",
|
|
"smtpListener": "Servicio SMTP",
|
|
"sourceIp": "IP de origen",
|
|
"spfRatio": "Tasa de aprobación SPF",
|
|
"spfResult": "SPF",
|
|
"storageQuota": "Cuota de almacenamiento",
|
|
"subject": "Asunto",
|
|
"targetObject": "Objetivo",
|
|
"timestamp": "Hora",
|
|
"toRecipients": "Para",
|
|
"toggleMenu": "Alternar menú",
|
|
"totalEvaluated": "Mensajes evaluados",
|
|
"twoFactorSection": "Verificación en dos pasos",
|
|
"watching": "Vigilando",
|
|
"bold": "Negrita",
|
|
"italic": "Cursiva",
|
|
"underline": "Subrayado",
|
|
"insertLink": "Enlace",
|
|
"insertImage": "Imagen"
|
|
},
|
|
"folders": {
|
|
"new": "Nueva carpeta",
|
|
"newPlaceholder": "Nueva carpeta…",
|
|
"delete": "Eliminar {name}",
|
|
"deleteConfirm": "¿Eliminar la carpeta \"{name}\" y todos sus mensajes? Esto no se puede deshacer desde la interfaz."
|
|
}
|
|
}
|