Files
LambdaMail/services/webmail/messages/pt-BR.json
T
Lucas RayanandClaude Opus 5 3e60852551 #21: put real mail on the webmail screens
The mail list rendered two hardcoded messages and the reader showed their
canned HTML; compose ran a countdown and then navigated away without ever
submitting anything. Both now use the API, including search, the unread
badges in the sidebar (which were the literals "3" and "1", so an empty
inbox still advertised unread mail), and marking a message read on open.

The undo window now means what it says: the message is held in the browser
and only submitted when the countdown elapses, so cancelling it means
nothing was ever queued rather than trying to recall it afterwards.

Message bodies render in an iframe with an empty sandbox - no scripts, no
same-origin - and remote references are stripped until the reader asks for
images, so a tracking pixel cannot fire on open. The previous sandbox
allowed popups.

The admin page titles and the language switcher labels now come from the
bundles. The labels live there rather than in the source because PLAN.md
R9 keeps non-ASCII out of code, and each language should be named the way
that language names it.

ADR-001 assigned the mail API to the TypeScript storage service; the
reasoning for putting it in Go instead is recorded in PLAN.md, which
.gitignore deliberately keeps out of the repository, so that revision
lives only in the working copy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 10:04:05 -03:00

84 lines
2.9 KiB
JSON

{
"common": {
"appName": "LambdaMail",
"userPortal": "Webmail",
"adminPortal": "Console de Gestão",
"loading": "Carregando...",
"save": "Salvar Alterações",
"cancel": "Cancelar",
"delete": "Excluir",
"confirm": "Confirmar",
"search": "Buscar",
"status": "Status",
"actions": "Ações",
"refresh": "Atualizar",
"logout": "Sair"
},
"auth": {
"userLoginTitle": "Entrar no Webmail",
"adminLoginTitle": "Entrar no Console Admin",
"emailLabel": "Endereço de E-mail",
"passwordLabel": "Senha",
"signInButton": "Entrar",
"totpCodeLabel": "Código do Autenticador (6 dígitos)",
"verifyCodeButton": "Verificar Código",
"invalidCredentials": "E-mail ou senha inválidos",
"mfaRequired": "Código de autenticação em dois fatores obrigatório"
},
"mail": {
"inbox": "Caixa de Entrada",
"sent": "Enviados",
"drafts": "Rascunhos",
"trash": "Lixeira",
"junk": "Spam",
"archive": "Arquivo",
"compose": "Escrever E-mail",
"noMessages": "Nenhuma mensagem nesta pasta",
"unreadCount": "{count, plural, =0 {Nenhuma mensagem não lida} one {# mensagem não lida} other {# mensagens não lidas}}",
"loadImages": "Carregar Imagens Remotas",
"reply": "Responder",
"forward": "Encaminhar",
"undoSend": "Desfazer Envio ({seconds}s restantes)"
},
"settings": {
"title": "Configurações da Conta",
"security": "Segurança e 2FA",
"appPasswords": "Senhas de Aplicativo",
"sessions": "Sessões Ativas",
"mfaStatus": "Status da Autenticação em Dois Fatores",
"mfaEnabled": "2FA está Ativo",
"mfaDisabled": "2FA está Desativado",
"enableMfa": "Ativar 2FA",
"generateAppPassword": "Gerar Senha de Aplicativo",
"recoveryCodesTitle": "Códigos de Recuperação",
"saveRecoveryCodes": "Guarde estes códigos de recuperação em local seguro. Eles não serão exibidos novamente.",
"language": "Idioma",
"signOut": "Sair",
"langEn": "Inglês",
"langPtBR": "Português (Brasil)",
"langEs": "Espanhol"
},
"admin": {
"dashboardTitle": "Painel do Sistema",
"domainsTitle": "Domínios e DNS (13 Registros)",
"mailboxesTitle": "Caixas Postais e Contas",
"aliasesTitle": "Aliases e Roteamento",
"queueTitle": "Fila de Entrega de Saída",
"dmarcTitle": "Análise DMARC",
"securityTitle": "Segurança e Log de Auditoria",
"preflightTitle": "Diagnóstico Preflight",
"reconcileDns": "Reconciliar Registros DNS",
"dnsStatusVerified": "VERIFICADO",
"dnsStatusDrift": "DESVIO DETECTADO",
"dnsStatusPartial": "PARCIAL",
"retryJob": "Tentar Entrega Novamente",
"cancelJob": "Cancelar Trabalho",
"freezeDomain": "Congelar Destino"
},
"errors": {
"unauthorized": "Sessão expirada ou não autorizada",
"forbidden": "Acesso proibido para esta superfície de conta",
"serverError": "Ocorreu um erro interno no servidor"
}
}