feat: add Stalwart account security management

- Add Stalwart API client library (lib/stalwart/client.ts)
- Add server-side proxy routes for auth, crypto, password, principal, probe
- Add account security Zustand store with full state management
- Add Security settings tab with password change, display name, TOTP 2FA,
  app passwords, and encryption-at-rest controls
- Add stalwartFeaturesEnabled config flag (opt-out via STALWART_FEATURES=false)
- Add i18n translations for all 8 locales (en, de, es, fr, it, ja, nl, pt)
- Add tests for Stalwart client (24 tests) and security store (29 tests)
This commit is contained in:
Linus Rath
2026-03-12 02:20:56 +01:00
parent 68d4a9a641
commit ab72fc06ff
26 changed files with 3143 additions and 310 deletions
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "Filter",
"templates": "Vorlagen",
"folders": "Ordner",
"keywords": "Schlüsselwörter"
"keywords": "Schlüsselwörter",
"security": "Sicherheit"
},
"tab_groups": {
"general": "Allgemein",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "Kontosicherheit",
"description": "Verwalten Sie Ihr Passwort, Zwei-Faktor-Authentifizierung und Sicherheitseinstellungen",
"detecting": "Serverfunktionen werden erkannt...",
"not_available": "Kontosicherheitsverwaltung ist für diesen Mailserver nicht verfügbar.",
"password": {
"title": "Passwort ändern",
"current": "Aktuelles Passwort",
"new": "Neues Passwort",
"confirm": "Neues Passwort bestätigen",
"submit": "Passwort ändern",
"success": "Passwort erfolgreich geändert",
"error_title": "Passwortänderung fehlgeschlagen",
"error_mismatch": "Neue Passwörter stimmen nicht überein",
"error_min_length": "Das Passwort muss mindestens 8 Zeichen lang sein",
"error_generic": "Passwort konnte nicht geändert werden"
},
"display_name": {
"label": "Anzeigename",
"description": "Ihr Name, wie er auf dem Server angezeigt wird",
"save": "Speichern",
"success": "Anzeigename aktualisiert",
"error": "Anzeigename konnte nicht aktualisiert werden"
},
"totp": {
"section_title": "Zwei-Faktor-Authentifizierung",
"label": "TOTP-Authentifizierung",
"description": "Fügen Sie eine zusätzliche Sicherheitsebene mit einem zeitbasierten Einmalpasswort hinzu",
"active": "Aktiviert",
"inactive": "Deaktiviert",
"enabled": "Zwei-Faktor-Authentifizierung aktiviert",
"disabled": "Zwei-Faktor-Authentifizierung deaktiviert",
"enable_error": "2FA konnte nicht aktiviert werden",
"disable_error": "2FA konnte nicht deaktiviert werden",
"setup_instructions": "Kopieren Sie diese URL in Ihre Authenticator-App (Google Authenticator, Authy, etc.):"
},
"app_passwords": {
"title": "App-Passwörter",
"description": "Erstellen Sie Passwörter für Apps, die keine Zwei-Faktor-Authentifizierung unterstützen",
"add": "Hinzufügen",
"create": "Erstellen",
"cancel": "Abbrechen",
"generate": "Generieren",
"name_label": "App-Name",
"name_placeholder": "z.B. Thunderbird, iPhone Mail",
"password_label": "Passwort (leer lassen für Auto-Generierung)",
"password_placeholder": "Automatisch generiert, wenn leer",
"added": "App-Passwort erstellt",
"removed": "App-Passwort entfernt",
"add_error": "App-Passwort konnte nicht erstellt werden",
"remove_error": "App-Passwort konnte nicht entfernt werden",
"none": "Keine App-Passwörter konfiguriert"
},
"encryption": {
"section_title": "Verschlüsselung im Ruhezustand",
"label": "E-Mail-Verschlüsselung",
"description": "Verschlüsseln Sie gespeicherte E-Mails auf dem Server für zusätzlichen Datenschutz",
"active": "{type}-Verschlüsselung aktiviert",
"inactive": "Deaktiviert",
"enabled": "Verschlüsselung im Ruhezustand aktiviert",
"disabled_success": "Verschlüsselung im Ruhezustand deaktiviert",
"error": "Verschlüsselungseinstellungen konnten nicht aktualisiert werden"
}
},
"identities": {
"title": "Sendeidentitäten",
"description": "Verwalten Sie E-Mail-Adressen, von denen Sie senden können",
+66 -1
View File
@@ -464,7 +464,8 @@
"filters": "Filters",
"templates": "Templates",
"folders": "Folders",
"keywords": "Keywords"
"keywords": "Keywords",
"security": "Security"
},
"tab_groups": {
"general": "General",
@@ -678,6 +679,70 @@
"value": "{time}"
}
},
"security": {
"title": "Account Security",
"description": "Manage your password, two-factor authentication, and security settings",
"detecting": "Detecting server capabilities...",
"not_available": "Account security management is not available for this mail server.",
"password": {
"title": "Change Password",
"current": "Current Password",
"new": "New Password",
"confirm": "Confirm New Password",
"submit": "Change Password",
"success": "Password changed successfully",
"error_title": "Password change failed",
"error_mismatch": "New passwords do not match",
"error_min_length": "Password must be at least 8 characters",
"error_generic": "Failed to change password"
},
"display_name": {
"label": "Display Name",
"description": "Your name as it appears on the server",
"save": "Save",
"success": "Display name updated",
"error": "Failed to update display name"
},
"totp": {
"section_title": "Two-Factor Authentication",
"label": "TOTP Authentication",
"description": "Add an extra layer of security with a time-based one-time password",
"active": "Enabled",
"inactive": "Disabled",
"enabled": "Two-factor authentication enabled",
"disabled": "Two-factor authentication disabled",
"enable_error": "Failed to enable 2FA",
"disable_error": "Failed to disable 2FA",
"setup_instructions": "Copy this URL into your authenticator app (Google Authenticator, Authy, etc.):"
},
"app_passwords": {
"title": "App Passwords",
"description": "Create passwords for apps that don't support two-factor authentication",
"add": "Add",
"create": "Create",
"cancel": "Cancel",
"generate": "Generate",
"name_label": "App Name",
"name_placeholder": "e.g. Thunderbird, iPhone Mail",
"password_label": "Password (leave empty to auto-generate)",
"password_placeholder": "Auto-generated if empty",
"added": "App password created",
"removed": "App password removed",
"add_error": "Failed to create app password",
"remove_error": "Failed to remove app password",
"none": "No app passwords configured"
},
"encryption": {
"section_title": "Encryption at Rest",
"label": "Email Encryption",
"description": "Encrypt stored emails on the server for additional privacy",
"active": "{type} encryption enabled",
"inactive": "Disabled",
"enabled": "Encryption at rest enabled",
"disabled_success": "Encryption at rest disabled",
"error": "Failed to update encryption settings"
}
},
"identities": {
"title": "Sending Identities",
"description": "Manage email addresses you can send from",
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "Filtros",
"templates": "Plantillas",
"folders": "Carpetas",
"keywords": "Palabras clave"
"keywords": "Palabras clave",
"security": "Seguridad"
},
"tab_groups": {
"general": "General",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "Seguridad de la cuenta",
"description": "Administre su contraseña, autenticación de dos factores y configuración de seguridad",
"detecting": "Detectando capacidades del servidor...",
"not_available": "La gestión de seguridad de la cuenta no está disponible para este servidor de correo.",
"password": {
"title": "Cambiar contraseña",
"current": "Contraseña actual",
"new": "Nueva contraseña",
"confirm": "Confirmar nueva contraseña",
"submit": "Cambiar contraseña",
"success": "Contraseña cambiada exitosamente",
"error_title": "Error al cambiar la contraseña",
"error_mismatch": "Las nuevas contraseñas no coinciden",
"error_min_length": "La contraseña debe tener al menos 8 caracteres",
"error_generic": "No se pudo cambiar la contraseña"
},
"display_name": {
"label": "Nombre para mostrar",
"description": "Su nombre tal como aparece en el servidor",
"save": "Guardar",
"success": "Nombre para mostrar actualizado",
"error": "No se pudo actualizar el nombre para mostrar"
},
"totp": {
"section_title": "Autenticación de dos factores",
"label": "Autenticación TOTP",
"description": "Añada una capa adicional de seguridad con una contraseña de un solo uso basada en tiempo",
"active": "Habilitado",
"inactive": "Deshabilitado",
"enabled": "Autenticación de dos factores habilitada",
"disabled": "Autenticación de dos factores deshabilitada",
"enable_error": "No se pudo habilitar 2FA",
"disable_error": "No se pudo deshabilitar 2FA",
"setup_instructions": "Copie esta URL en su aplicación de autenticación (Google Authenticator, Authy, etc.):"
},
"app_passwords": {
"title": "Contraseñas de aplicación",
"description": "Cree contraseñas para aplicaciones que no admiten autenticación de dos factores",
"add": "Agregar",
"create": "Crear",
"cancel": "Cancelar",
"generate": "Generar",
"name_label": "Nombre de la aplicación",
"name_placeholder": "p. ej. Thunderbird, iPhone Mail",
"password_label": "Contraseña (dejar vacío para auto-generar)",
"password_placeholder": "Auto-generada si está vacío",
"added": "Contraseña de aplicación creada",
"removed": "Contraseña de aplicación eliminada",
"add_error": "No se pudo crear la contraseña de aplicación",
"remove_error": "No se pudo eliminar la contraseña de aplicación",
"none": "No hay contraseñas de aplicación configuradas"
},
"encryption": {
"section_title": "Cifrado en reposo",
"label": "Cifrado de correo electrónico",
"description": "Cifre los correos almacenados en el servidor para mayor privacidad",
"active": "Cifrado {type} habilitado",
"inactive": "Deshabilitado",
"enabled": "Cifrado en reposo habilitado",
"disabled_success": "Cifrado en reposo deshabilitado",
"error": "No se pudieron actualizar las configuraciones de cifrado"
}
},
"identities": {
"title": "Identidades de Envío",
"description": "Administre las direcciones de correo desde las que puede enviar",
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "Filtres",
"templates": "Modèles",
"folders": "Dossiers",
"keywords": "Mots-clés"
"keywords": "Mots-clés",
"security": "Sécurité"
},
"tab_groups": {
"general": "Général",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "Sécurité du compte",
"description": "Gérez votre mot de passe, l'authentification à deux facteurs et les paramètres de sécurité",
"detecting": "Détection des capacités du serveur...",
"not_available": "La gestion de la sécurité du compte n'est pas disponible pour ce serveur de messagerie.",
"password": {
"title": "Changer le mot de passe",
"current": "Mot de passe actuel",
"new": "Nouveau mot de passe",
"confirm": "Confirmer le nouveau mot de passe",
"submit": "Changer le mot de passe",
"success": "Mot de passe changé avec succès",
"error_title": "Échec du changement de mot de passe",
"error_mismatch": "Les nouveaux mots de passe ne correspondent pas",
"error_min_length": "Le mot de passe doit comporter au moins 8 caractères",
"error_generic": "Impossible de changer le mot de passe"
},
"display_name": {
"label": "Nom d'affichage",
"description": "Votre nom tel qu'il apparaît sur le serveur",
"save": "Enregistrer",
"success": "Nom d'affichage mis à jour",
"error": "Impossible de mettre à jour le nom d'affichage"
},
"totp": {
"section_title": "Authentification à deux facteurs",
"label": "Authentification TOTP",
"description": "Ajoutez une couche de sécurité supplémentaire avec un mot de passe à usage unique basé sur le temps",
"active": "Activé",
"inactive": "Désactivé",
"enabled": "Authentification à deux facteurs activée",
"disabled": "Authentification à deux facteurs désactivée",
"enable_error": "Impossible d'activer la 2FA",
"disable_error": "Impossible de désactiver la 2FA",
"setup_instructions": "Copiez cette URL dans votre application d'authentification (Google Authenticator, Authy, etc.) :"
},
"app_passwords": {
"title": "Mots de passe d'application",
"description": "Créez des mots de passe pour les applications qui ne prennent pas en charge l'authentification à deux facteurs",
"add": "Ajouter",
"create": "Créer",
"cancel": "Annuler",
"generate": "Générer",
"name_label": "Nom de l'application",
"name_placeholder": "ex. Thunderbird, iPhone Mail",
"password_label": "Mot de passe (laisser vide pour auto-générer)",
"password_placeholder": "Auto-généré si vide",
"added": "Mot de passe d'application créé",
"removed": "Mot de passe d'application supprimé",
"add_error": "Impossible de créer le mot de passe d'application",
"remove_error": "Impossible de supprimer le mot de passe d'application",
"none": "Aucun mot de passe d'application configuré"
},
"encryption": {
"section_title": "Chiffrement au repos",
"label": "Chiffrement des e-mails",
"description": "Chiffrez les e-mails stockés sur le serveur pour une confidentialité accrue",
"active": "Chiffrement {type} activé",
"inactive": "Désactivé",
"enabled": "Chiffrement au repos activé",
"disabled_success": "Chiffrement au repos désactivé",
"error": "Impossible de mettre à jour les paramètres de chiffrement"
}
},
"identities": {
"title": "Identités d'envoi",
"description": "Gérer les adresses email depuis lesquelles vous pouvez envoyer",
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "Filtri",
"templates": "Modelli",
"folders": "Cartelle",
"keywords": "Parole chiave"
"keywords": "Parole chiave",
"security": "Sicurezza"
},
"tab_groups": {
"general": "Generale",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "Sicurezza dell'account",
"description": "Gestisci la tua password, l'autenticazione a due fattori e le impostazioni di sicurezza",
"detecting": "Rilevamento delle funzionalità del server...",
"not_available": "La gestione della sicurezza dell'account non è disponibile per questo server di posta.",
"password": {
"title": "Cambia password",
"current": "Password attuale",
"new": "Nuova password",
"confirm": "Conferma nuova password",
"submit": "Cambia password",
"success": "Password cambiata con successo",
"error_title": "Cambio password fallito",
"error_mismatch": "Le nuove password non corrispondono",
"error_min_length": "La password deve contenere almeno 8 caratteri",
"error_generic": "Impossibile cambiare la password"
},
"display_name": {
"label": "Nome visualizzato",
"description": "Il tuo nome come appare sul server",
"save": "Salva",
"success": "Nome visualizzato aggiornato",
"error": "Impossibile aggiornare il nome visualizzato"
},
"totp": {
"section_title": "Autenticazione a due fattori",
"label": "Autenticazione TOTP",
"description": "Aggiungi un ulteriore livello di sicurezza con una password monouso basata sul tempo",
"active": "Abilitato",
"inactive": "Disabilitato",
"enabled": "Autenticazione a due fattori abilitata",
"disabled": "Autenticazione a due fattori disabilitata",
"enable_error": "Impossibile abilitare la 2FA",
"disable_error": "Impossibile disabilitare la 2FA",
"setup_instructions": "Copia questo URL nella tua app di autenticazione (Google Authenticator, Authy, ecc.):"
},
"app_passwords": {
"title": "Password per le app",
"description": "Crea password per le app che non supportano l'autenticazione a due fattori",
"add": "Aggiungi",
"create": "Crea",
"cancel": "Annulla",
"generate": "Genera",
"name_label": "Nome dell'app",
"name_placeholder": "es. Thunderbird, iPhone Mail",
"password_label": "Password (lascia vuoto per auto-generare)",
"password_placeholder": "Auto-generata se vuoto",
"added": "Password per l'app creata",
"removed": "Password per l'app rimossa",
"add_error": "Impossibile creare la password per l'app",
"remove_error": "Impossibile rimuovere la password per l'app",
"none": "Nessuna password per le app configurata"
},
"encryption": {
"section_title": "Crittografia a riposo",
"label": "Crittografia email",
"description": "Crittografa le email archiviate sul server per una maggiore privacy",
"active": "Crittografia {type} abilitata",
"inactive": "Disabilitato",
"enabled": "Crittografia a riposo abilitata",
"disabled_success": "Crittografia a riposo disabilitata",
"error": "Impossibile aggiornare le impostazioni di crittografia"
}
},
"identities": {
"title": "Identità di invio",
"description": "Gestisci gli indirizzi email da cui puoi inviare",
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "フィルター",
"templates": "テンプレート",
"folders": "フォルダー",
"keywords": "キーワード"
"keywords": "キーワード",
"security": "セキュリティ"
},
"tab_groups": {
"general": "一般",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "アカウントセキュリティ",
"description": "パスワード、二要素認証、セキュリティ設定を管理します",
"detecting": "サーバー機能を検出中...",
"not_available": "このメールサーバーではアカウントセキュリティ管理は利用できません。",
"password": {
"title": "パスワードの変更",
"current": "現在のパスワード",
"new": "新しいパスワード",
"confirm": "新しいパスワードの確認",
"submit": "パスワードを変更",
"success": "パスワードが正常に変更されました",
"error_title": "パスワードの変更に失敗しました",
"error_mismatch": "新しいパスワードが一致しません",
"error_min_length": "パスワードは8文字以上である必要があります",
"error_generic": "パスワードを変更できませんでした"
},
"display_name": {
"label": "表示名",
"description": "サーバー上に表示される名前",
"save": "保存",
"success": "表示名が更新されました",
"error": "表示名を更新できませんでした"
},
"totp": {
"section_title": "二要素認証",
"label": "TOTP認証",
"description": "時間ベースのワンタイムパスワードで追加のセキュリティレイヤーを追加",
"active": "有効",
"inactive": "無効",
"enabled": "二要素認証が有効になりました",
"disabled": "二要素認証が無効になりました",
"enable_error": "2FAを有効にできませんでした",
"disable_error": "2FAを無効にできませんでした",
"setup_instructions": "このURLを認証アプリ(Google Authenticator、Authyなど)にコピーしてください:"
},
"app_passwords": {
"title": "アプリパスワード",
"description": "二要素認証に対応していないアプリ用のパスワードを作成",
"add": "追加",
"create": "作成",
"cancel": "キャンセル",
"generate": "生成",
"name_label": "アプリ名",
"name_placeholder": "例:Thunderbird、iPhone Mail",
"password_label": "パスワード(空欄で自動生成)",
"password_placeholder": "空欄の場合自動生成",
"added": "アプリパスワードが作成されました",
"removed": "アプリパスワードが削除されました",
"add_error": "アプリパスワードを作成できませんでした",
"remove_error": "アプリパスワードを削除できませんでした",
"none": "アプリパスワードは設定されていません"
},
"encryption": {
"section_title": "保存時の暗号化",
"label": "メール暗号化",
"description": "サーバー上の保存メールを暗号化してプライバシーを強化",
"active": "{type}暗号化が有効",
"inactive": "無効",
"enabled": "保存時の暗号化が有効になりました",
"disabled_success": "保存時の暗号化が無効になりました",
"error": "暗号化設定を更新できませんでした"
}
},
"identities": {
"title": "送信者情報",
"description": "送信に使用するメールアドレスを管理",
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "Filters",
"templates": "Sjablonen",
"folders": "Mappen",
"keywords": "Sleutelwoorden"
"keywords": "Sleutelwoorden",
"security": "Beveiliging"
},
"tab_groups": {
"general": "Algemeen",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "Accountbeveiliging",
"description": "Beheer uw wachtwoord, tweefactorauthenticatie en beveiligingsinstellingen",
"detecting": "Servermogelijkheden worden gedetecteerd...",
"not_available": "Accountbeveiligingsbeheer is niet beschikbaar voor deze mailserver.",
"password": {
"title": "Wachtwoord wijzigen",
"current": "Huidig wachtwoord",
"new": "Nieuw wachtwoord",
"confirm": "Bevestig nieuw wachtwoord",
"submit": "Wachtwoord wijzigen",
"success": "Wachtwoord succesvol gewijzigd",
"error_title": "Wachtwoord wijzigen mislukt",
"error_mismatch": "Nieuwe wachtwoorden komen niet overeen",
"error_min_length": "Wachtwoord moet minimaal 8 tekens bevatten",
"error_generic": "Kan wachtwoord niet wijzigen"
},
"display_name": {
"label": "Weergavenaam",
"description": "Uw naam zoals weergegeven op de server",
"save": "Opslaan",
"success": "Weergavenaam bijgewerkt",
"error": "Kan weergavenaam niet bijwerken"
},
"totp": {
"section_title": "Tweefactorauthenticatie",
"label": "TOTP-authenticatie",
"description": "Voeg een extra beveiligingslaag toe met een op tijd gebaseerd eenmalig wachtwoord",
"active": "Ingeschakeld",
"inactive": "Uitgeschakeld",
"enabled": "Tweefactorauthenticatie ingeschakeld",
"disabled": "Tweefactorauthenticatie uitgeschakeld",
"enable_error": "Kan 2FA niet inschakelen",
"disable_error": "Kan 2FA niet uitschakelen",
"setup_instructions": "Kopieer deze URL naar uw authenticator-app (Google Authenticator, Authy, etc.):"
},
"app_passwords": {
"title": "App-wachtwoorden",
"description": "Maak wachtwoorden aan voor apps die geen tweefactorauthenticatie ondersteunen",
"add": "Toevoegen",
"create": "Aanmaken",
"cancel": "Annuleren",
"generate": "Genereren",
"name_label": "App-naam",
"name_placeholder": "bijv. Thunderbird, iPhone Mail",
"password_label": "Wachtwoord (leeg laten voor automatisch genereren)",
"password_placeholder": "Automatisch gegenereerd als leeg",
"added": "App-wachtwoord aangemaakt",
"removed": "App-wachtwoord verwijderd",
"add_error": "Kan app-wachtwoord niet aanmaken",
"remove_error": "Kan app-wachtwoord niet verwijderen",
"none": "Geen app-wachtwoorden geconfigureerd"
},
"encryption": {
"section_title": "Versleuteling in rust",
"label": "E-mailversleuteling",
"description": "Versleutel opgeslagen e-mails op de server voor extra privacy",
"active": "{type}-versleuteling ingeschakeld",
"inactive": "Uitgeschakeld",
"enabled": "Versleuteling in rust ingeschakeld",
"disabled_success": "Versleuteling in rust uitgeschakeld",
"error": "Kan versleutelingsinstellingen niet bijwerken"
}
},
"identities": {
"title": "Verzendidentiteiten",
"description": "Beheer e-mailadressen van waaruit je kunt verzenden",
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "Filtros",
"templates": "Modelos",
"folders": "Pastas",
"keywords": "Palavras-chave"
"keywords": "Palavras-chave",
"security": "Segurança"
},
"tab_groups": {
"general": "Geral",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "Segurança da conta",
"description": "Gerencie sua senha, autenticação de dois fatores e configurações de segurança",
"detecting": "Detectando recursos do servidor...",
"not_available": "O gerenciamento de segurança da conta não está disponível para este servidor de e-mail.",
"password": {
"title": "Alterar senha",
"current": "Senha atual",
"new": "Nova senha",
"confirm": "Confirmar nova senha",
"submit": "Alterar senha",
"success": "Senha alterada com sucesso",
"error_title": "Falha ao alterar a senha",
"error_mismatch": "As novas senhas não coincidem",
"error_min_length": "A senha deve ter pelo menos 8 caracteres",
"error_generic": "Não foi possível alterar a senha"
},
"display_name": {
"label": "Nome de exibição",
"description": "Seu nome como aparece no servidor",
"save": "Salvar",
"success": "Nome de exibição atualizado",
"error": "Não foi possível atualizar o nome de exibição"
},
"totp": {
"section_title": "Autenticação de dois fatores",
"label": "Autenticação TOTP",
"description": "Adicione uma camada extra de segurança com uma senha única baseada em tempo",
"active": "Habilitado",
"inactive": "Desabilitado",
"enabled": "Autenticação de dois fatores habilitada",
"disabled": "Autenticação de dois fatores desabilitada",
"enable_error": "Não foi possível habilitar a 2FA",
"disable_error": "Não foi possível desabilitar a 2FA",
"setup_instructions": "Copie esta URL para seu aplicativo de autenticação (Google Authenticator, Authy, etc.):"
},
"app_passwords": {
"title": "Senhas de aplicativo",
"description": "Crie senhas para aplicativos que não suportam autenticação de dois fatores",
"add": "Adicionar",
"create": "Criar",
"cancel": "Cancelar",
"generate": "Gerar",
"name_label": "Nome do aplicativo",
"name_placeholder": "ex. Thunderbird, iPhone Mail",
"password_label": "Senha (deixe vazio para auto-gerar)",
"password_placeholder": "Auto-gerada se vazio",
"added": "Senha de aplicativo criada",
"removed": "Senha de aplicativo removida",
"add_error": "Não foi possível criar a senha de aplicativo",
"remove_error": "Não foi possível remover a senha de aplicativo",
"none": "Nenhuma senha de aplicativo configurada"
},
"encryption": {
"section_title": "Criptografia em repouso",
"label": "Criptografia de e-mail",
"description": "Criptografe e-mails armazenados no servidor para maior privacidade",
"active": "Criptografia {type} habilitada",
"inactive": "Desabilitado",
"enabled": "Criptografia em repouso habilitada",
"disabled_success": "Criptografia em repouso desabilitada",
"error": "Não foi possível atualizar as configurações de criptografia"
}
},
"identities": {
"title": "Identidades de Envio",
"description": "Gerencie endereços de e-mail que você pode usar para enviar",