Files
LambdaMail/services/webmail/messages/en.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.7 KiB
JSON

{
"common": {
"appName": "LambdaMail",
"userPortal": "Webmail",
"adminPortal": "Management Console",
"loading": "Loading...",
"save": "Save Changes",
"cancel": "Cancel",
"delete": "Delete",
"confirm": "Confirm",
"search": "Search",
"status": "Status",
"actions": "Actions",
"refresh": "Refresh",
"logout": "Log Out"
},
"auth": {
"userLoginTitle": "Webmail Sign In",
"adminLoginTitle": "Admin Console Sign In",
"emailLabel": "Email Address",
"passwordLabel": "Password",
"signInButton": "Sign In",
"totpCodeLabel": "6-Digit Authenticator Code",
"verifyCodeButton": "Verify Code",
"invalidCredentials": "Invalid email or password",
"mfaRequired": "Two-factor authentication code required"
},
"mail": {
"inbox": "Inbox",
"sent": "Sent",
"drafts": "Drafts",
"trash": "Trash",
"junk": "Spam",
"archive": "Archive",
"compose": "Compose Email",
"noMessages": "No messages in this folder",
"unreadCount": "{count, plural, =0 {No unread messages} one {# unread message} other {# unread messages}}",
"loadImages": "Load Remote Images",
"reply": "Reply",
"forward": "Forward",
"undoSend": "Undo Send ({seconds}s remaining)"
},
"settings": {
"title": "Account Settings",
"security": "Security & 2FA",
"appPasswords": "App Passwords",
"sessions": "Active Sessions",
"mfaStatus": "Two-Factor Authentication Status",
"mfaEnabled": "2FA is Active",
"mfaDisabled": "2FA is Disabled",
"enableMfa": "Enable 2FA",
"generateAppPassword": "Generate App Password",
"recoveryCodesTitle": "Recovery Codes",
"saveRecoveryCodes": "Save these recovery codes in a safe place. They will not be shown again.",
"language": "Language",
"signOut": "Sign out",
"langEn": "English",
"langPtBR": "Portuguese (Brazil)",
"langEs": "Spanish"
},
"admin": {
"dashboardTitle": "System Dashboard",
"domainsTitle": "Domains & DNS (13 Records)",
"mailboxesTitle": "Mailboxes & Accounts",
"aliasesTitle": "Aliases & Routing",
"queueTitle": "Outbound Delivery Queue",
"dmarcTitle": "DMARC Analytics",
"securityTitle": "Security & Audit Log",
"preflightTitle": "Preflight Diagnostics",
"reconcileDns": "Reconcile DNS Records",
"dnsStatusVerified": "VERIFIED",
"dnsStatusDrift": "DRIFT DETECTED",
"dnsStatusPartial": "PARTIAL",
"retryJob": "Retry Delivery",
"cancelJob": "Cancel Job",
"freezeDomain": "Freeze Destination"
},
"errors": {
"unauthorized": "Session expired or unauthorized",
"forbidden": "Access forbidden for this account surface",
"serverError": "Internal server error occurred"
}
}