Files
webmail-client/frontend/src/i18n/en.ts
T
lukasandClaude Opus 4.8 1a83e0fb9b frontend: redesign the thread reading panel
Rework the conversation view to match the new dark-theme mockups:
- Subject bar gains a print button and an expand/collapse-all toggle (default
  action expands all; collapsing leaves only the newest message open).
- Collapsed messages are compact single-line cards (40px avatar, colored sender
  name, snippet, relative date) that overlap into a stack; alignment follows the
  sort order (top edge for oldest-first, bottom edge for newest-first) and the
  always-open newest card overlaps its neighbour in both orders.
- Expanded messages show sender+address (whole header row toggles collapse), a
  detail disclosure (From/To/Cc/Subject/Date/Size), the message location
  (Inbox/Sent), a read/unread circle (per-message flag toggle), a quick
  Reply/Reply-all, and an Actions menu (reply/forward/print/delete). The
  Reply/Reply all/Forward bar now sits inside the newest card above a divider.
- Message body: the quoted original is hidden by default with a "•••" toggle
  injected after the "On … wrote:" attribution; the iframe now collapses-then-
  measures so it shrinks back when the quote is hidden.
- Avatars use the sender's IMAP-account colour when the address matches one of
  our accounts, else a stable per-sender hue; two initials for multi-word names.
- Brighter dark-theme border token; new print/expand-all/collapse-all icons.

Backend: add size_bytes to the message envelope (shown in message details).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 18:58:01 +02:00

209 lines
7.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// English message catalog. Adding a locale = drop a sibling file with the same
// keys and register it in i18n/index.tsx. Keys are flat, dotted namespaces.
// Interpolate with {name} placeholders.
export const en = {
"common.appName": "Webmail",
"common.loading": "Loading…",
"common.cancel": "Cancel",
"common.save": "Save",
"common.saving": "Saving…",
"common.delete": "Delete",
"common.remove": "Remove",
"common.edit": "Edit",
"common.close": "Close",
"common.back": "Back",
"common.next": "Next",
"common.signOut": "Sign out",
"common.retry": "Retry",
"common.optional": "optional",
"auth.signInTitle": "Sign in",
"auth.registerTitle": "Create account",
"auth.handle": "Handle",
"auth.handlePlaceholder": "e.g. alice",
"auth.handleHint": "3–30 chars: a–z, 0–9, . _ -",
"auth.password": "Password",
"auth.passwordHint": "at least 8 characters",
"auth.totpCode": "2FA code",
"auth.totpPrompt": "Enter the 6-digit code from your authenticator app",
"auth.signIn": "Sign in",
"auth.signingIn": "Signing in…",
"auth.create": "Create account",
"auth.creating": "Creating…",
"auth.noAccount": "No account?",
"auth.haveAccount": "Already have an account?",
"auth.register": "Register",
"nav.mail": "Mail",
"nav.settings": "Settings",
"nav.compose": "Compose",
"nav.allAccounts": "All accounts",
"nav.inbox": "Inbox",
"nav.archive": "Archive",
"nav.drafts": "Drafts",
"nav.sent": "Sent",
"nav.spam": "Spam",
"nav.trash": "Trash",
"nav.search": "Search mail…",
"nav.storageQuota": "Storage used",
"nav.refresh": "Refresh all folders",
"mail.noConversations": "No conversations.",
"mail.selectConversation": "Select a conversation.",
"mail.loadingThread": "Loading thread…",
"mail.expandAll": "Expand all",
"mail.collapseAll": "Collapse all",
"mail.print": "Print",
"mail.orderOldest": "Oldest first",
"mail.orderNewest": "Newest first",
"filter.all": "All mail",
"filter.unread": "Unread",
"filter.pinned": "Pinned",
"filter.sortOldest": "Sort oldest first",
"filter.sortNewest": "Sort newest first",
"pager.prev": "Previous page",
"pager.next": "Next page",
"mail.reply": "Reply",
"mail.replyAll": "Reply all",
"mail.forward": "Forward",
"mail.archive": "Archive",
"mail.markRead": "Mark read",
"mail.markUnread": "Mark unread",
"mail.star": "Star",
"mail.unstar": "Unstar",
"mail.pin": "Pin",
"mail.unpin": "Unpin",
"mail.delete": "Delete",
"mail.restore": "Restore",
"mail.loadFailed": "Couldn't load this message.",
"mail.imagesBlocked": "Images from this sender are blocked.",
"mail.loadImages": "Load images",
"mail.alwaysFromSender": "Always from this sender",
"mail.to": "to",
"mail.from": "From",
"mail.subjectLabel": "Subject",
"mail.dateLabel": "Date",
"mail.sizeLabel": "Size",
"mail.actions": "Actions",
"mail.forwardAsAttachment": "Forward as attachment",
"mail.showQuoted": "Show quoted text",
"mail.hideQuoted": "Hide quoted text",
"mail.markReadUnread": "Mark read / unread",
"mail.messageCount": "{count} messages",
"mail.downloadAll": "Download all {count} attachments",
"mail.downloadZip": "Download zip",
"mail.download": "Download",
"compose.newMessage": "New message",
"compose.to": "To",
"compose.cc": "Cc",
"compose.bcc": "Bcc",
"compose.subject": "Subject",
"compose.send": "Send",
"compose.sending": "Sending…",
"compose.discard": "Discard",
"compose.sent": "Message sent.",
"compose.undo": "Undo",
"compose.sendFailed": "Send failed.",
"compose.savingDraft": "Saving draft…",
"compose.draftSaved": "Draft saved",
"compose.noDrafts": "No drafts.",
"compose.otherClient": "other client",
"compose.noRecipient": "(no recipient)",
"compose.noSubject": "(no subject)",
"compose.from": "From",
"compose.attach": "Attach",
"compose.more": "More",
"compose.expand": "Expand",
"compose.collapse": "Collapse",
"compose.popOut": "Pop out",
"compose.replyLabel": "Reply",
"compose.addRecipient": "Add recipient…",
"compose.fmtBold": "Bold",
"compose.fmtItalic": "Italic",
"compose.fmtUnderline": "Underline",
"compose.fmtStrike": "Strikethrough",
"compose.fmtBulletList": "Bulleted list",
"compose.fmtNumberList": "Numbered list",
"compose.fmtQuote": "Quote",
"compose.fmtLink": "Insert link",
"compose.fmtAlignLeft": "Align left",
"compose.fmtAlignCenter": "Align center",
"compose.fmtAlignRight": "Align right",
"compose.fmtClear": "Clear formatting",
"compose.fmtColor": "Text color",
"compose.fmtHighlight": "Highlight color",
"compose.fmtImage": "Insert image",
"compose.insertSignature": "Insert signature",
"compose.linkPrompt": "Link URL:",
"compose.imageTooLarge": "Image is too large (max 5 MB).",
"compose.attachTooLarge": "File exceeds the 25 MB limit.",
"compose.attachments": "Attachments",
"wizard.title": "Add mail account",
"wizard.step1": "Your email address",
"wizard.emailPlaceholder": "you@example.com",
"wizard.discover": "Continue",
"wizard.discovering": "Looking up settings…",
"wizard.foundVia": "Found via {source}",
"wizard.imapServer": "IMAP server",
"wizard.smtpServer": "SMTP server",
"wizard.host": "Host",
"wizard.port": "Port",
"wizard.security": "Security",
"wizard.accountPassword": "Account password",
"wizard.appPasswordHint": "For Gmail/Yahoo/iCloud use an app password.",
"wizard.test": "Test & continue",
"wizard.testing": "Testing connection…",
"wizard.testOk": "Connection works.",
"wizard.create": "Add account",
"wizard.creating": "Adding…",
"wizard.created": "Account added — syncing your mail.",
"wizard.startReading": "Start reading now",
"wizard.manualConfig": "Enter settings manually",
"wizard.displayName": "Display name",
"settings.title": "Settings",
"settings.profile": "Profile",
"settings.security": "Security",
"settings.accounts": "Accounts",
"settings.appearance": "Appearance",
"settings.handle": "Handle",
"settings.recoveryEmail": "Recovery email",
"settings.twoFactor": "Two-factor authentication",
"settings.twoFactorOn": "2FA is enabled.",
"settings.twoFactorOff": "2FA is not enabled.",
"settings.enable2fa": "Enable 2FA",
"settings.disable2fa": "Disable 2FA",
"settings.disable2faPrompt": "Enter your password to turn off 2FA:",
"settings.disable": "Disable",
"settings.twoFactorDisabled": "2FA has been turned off.",
"settings.scanQr": "Scan this in your authenticator app, then enter a code:",
"settings.secret": "Secret",
"settings.confirm": "Confirm",
"settings.sessions": "Active sessions",
"settings.thisDevice": "this device",
"settings.revoke": "Revoke",
"settings.threadOrder": "Conversation order",
"settings.timezone": "Time zone",
"settings.addAccount": "Add account",
"settings.syncState": "State: {state}",
"settings.confirmRemoveAccount": "Remove this account and all its mail?",
"settings.editAccount": "Edit account",
"settings.color": "Color",
"settings.serverSettings": "Change server settings / password",
"settings.serverSettingsHint": "Enter your mailbox password to apply server or password changes.",
"settings.signature": "Signature",
"settings.configureAccount": "Configure account",
"settings.editSignature": "Edit signature",
"settings.theme": "Theme",
"theme.light": "Light",
"theme.dark": "Dark",
"theme.system": "System",
"theme.toggle": "Toggle theme",
} as const;
export type MessageKey = keyof typeof en;
export type Messages = Record<MessageKey, string>;