The console demanded a second factor and refused to open without one, but
enrolment lived on the other surface - so an operator whose only account
was the administrator had no way in. The password was already verified at
that point, so the refusal now carries a short-lived grant that permits
enrolling a factor and nothing else, and the admin login screen walks
through it: secret, confirmation, recovery codes, sign in. Two tests cover
it, including that the grant opens no other endpoint.
The rewrite also undid work that was already in place:
- The postcss override was dropped and the advisory came back, along
with a critical one in vitest. postcss is a direct dependency now, so
the fix is the version plus an override scoped to Next's own copy;
vitest moves to 3.2.7. The lockfile needed regenerating for either to
take effect. Zero advisories now.
- 100 language-lint violations: the admin console had been rewritten
with its strings in Portuguese, hardcoded. That fails CI, and it also
puts those strings beyond the reach of the translation bundles - an
English or Spanish user would have read Portuguese. They are English
in the source again.
- The mail screen put a fixed 320px list beside the reader with no
breakpoint, so on a phone the viewport overflowed and the message was
a few pixels wide. One pane at a time below md, with a way back.
- The icon-only navigation toggles had nothing for a screen reader to
announce.
The layouts' own mobile navigation and every previously fixed behaviour
survived the rewrite - checked rather than assumed.
Also fixes a marker collision I introduced: the E2E helper locates the
repository by a migrations directory, and services/migrations satisfied
that one directory too early. It now requires the SQL to actually be
there.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
149 lines
5.7 KiB
JSON
149 lines
5.7 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"
|
|
},
|
|
"ui": {
|
|
"accountStatus": "Situacao da conta",
|
|
"actions": "Acoes",
|
|
"active": "ATIVA",
|
|
"activeSessions": "Sessoes ativas do webmail",
|
|
"actor": "Autor / conta",
|
|
"actualRecord": "Registro DNS atual (Cloudflare)",
|
|
"allChecksPassed": "TODAS AS CHECAGENS PASSARAM",
|
|
"appPasswordGenerated": "Senha de aplicativo gerada:",
|
|
"appPasswordsSection": "Senhas de aplicativo (clientes IMAP / SMTP)",
|
|
"attempts": "Tentativas",
|
|
"clientIp": "IP do cliente",
|
|
"copyPasswordNow": "Copie esta senha agora. Ela nao sera exibida novamente.",
|
|
"coreInfra": "Estado da infraestrutura",
|
|
"currentSession": "Sessao atual deste navegador",
|
|
"daneVerified": "DANE / MTA-STS verificado",
|
|
"destination": "Destino",
|
|
"diskUsed": "Uso de disco",
|
|
"dkimResult": "Resultado DKIM",
|
|
"dkimAlignment": "Alinhamento da assinatura DKIM",
|
|
"dmarcEnforcement": "Aplicacao da politica DMARC",
|
|
"domainVerification": "Estado da verificacao do dominio",
|
|
"emailAddress": "Endereco de e-mail",
|
|
"eventAction": "Acao registrada",
|
|
"expectedValue": "Valor esperado pela especificacao",
|
|
"healthy": "SAUDAVEL",
|
|
"imapEngine": "Servidor IMAP (143/993)",
|
|
"inboundVolume": "Volume de entrada (24h)",
|
|
"jobId": "ID do trabalho",
|
|
"lastError": "Ultimo erro",
|
|
"liveMetrics": "Metricas operacionais do no de e-mail.",
|
|
"localDisk": "Armazenamento em disco local",
|
|
"preflightTitle": "Diagnostico de preflight do servidor",
|
|
"messageBody": "Corpo da mensagem",
|
|
"messageVolume": "Volume de mensagens",
|
|
"noAppPasswords": "Nenhuma senha de aplicativo gerada ainda.",
|
|
"online": "ONLINE",
|
|
"outboundDelivered": "Entregues na saida (24h)",
|
|
"queueDepth": "Profundidade da fila",
|
|
"postgresRunner": "Executor de tarefas Postgres ativo",
|
|
"provisionMailbox": "Criar nova caixa postal",
|
|
"recipient": "Destinatario",
|
|
"recordName": "Nome do registro",
|
|
"reportingOrg": "Organizacao que reportou",
|
|
"scanners": "Rspamd (antispam) e ClamAV",
|
|
"sender": "Remetente",
|
|
"smtpListener": "Servidor SMTP (25/587/465)",
|
|
"sourceIp": "IP de origem",
|
|
"spfRatio": "Taxa de alinhamento SPF",
|
|
"spfResult": "Resultado SPF",
|
|
"storageQuota": "Cota de armazenamento",
|
|
"subject": "Assunto",
|
|
"targetObject": "Objeto alvo",
|
|
"timestamp": "Data e hora",
|
|
"toRecipients": "Para (destinatarios)",
|
|
"totalEvaluated": "Total de mensagens avaliadas",
|
|
"twoFactorSection": "Autenticacao em dois fatores (TOTP RFC 6238)",
|
|
"watching": "OBSERVANDO",
|
|
"passwordChanged": "Senha alterada",
|
|
"signOutOthers": "Encerrar as outras sessoes",
|
|
"changePassword": "Alterar senha",
|
|
"currentPassword": "Senha atual",
|
|
"newPassword": "Nova senha (min. 12 caracteres)",
|
|
"toggleMenu": "Abrir ou fechar o menu"
|
|
}
|
|
}
|