Files
webmail-client/frontend/src/i18n/en.ts
T
lukasandClaude Opus 4.8 0a478a6b26 Labels in Mail UI (chips + Actions + sidebar), plain-text Lato, calendar-panel polish
Labels:
- Moved labelling out of the "+label" message slot into Mail: label chips on the
  thread subject bar (removable ✕) and before list subjects, and a Labels submenu
  in the per-message Actions menu (multi-select checkboxes + "Create new…").
  Per-message storage kept; the reading pane writes a thread-union aggregate so the
  list (no message ids) can show chips.
- Sidebar LABELS section rewritten: aligned monocolor tag rows, collapsible
  (collapsed by default), inline "+" create popover, hover "−" delete with a confirm
  popover, and click-to-filter the mail list by label.
- Backend: batch message/thread label reads, thread aggregate, create + delete
  (delete unhooks from all mail), and GET /labels/{name}/threads. Core GET /threads
  gained an `ids` param to power the label view. Removed the plugin-pages list from
  the Mail sidebar.

Plain-text mail now renders in Lato (self-hosted at /fonts, @font-face'd into the
sandboxed message iframe) instead of the monospace <pre> default.

Calendar right-panel (embed mode): restored the "…" view-options menu, pinned the
toolbar + mini-calendar (only the agenda scrolls), plain "All calendars" button
(inline resets), and the event popover now closes on any outside click.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72FZiF1W1pb8XxyWBTREA
2026-08-03 20:53:35 +02:00

349 lines
14 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.clear": "Clear",
"common.copy": "Copy",
"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.back": "Back",
"nav.settings": "Settings",
"nav.compose": "Compose",
"nav.collapseSidebar": "Collapse sidebar",
"nav.expandSidebar": "Expand sidebar",
"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.searchInTrash": "Search in Trash",
"nav.searchInSpam": "Search in Spam",
"search.save": "Save this search",
"search.saved": "Saved searches",
"search.saveNamePrompt": "Name this saved search:",
"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.previewPage": "Page {current} / {total}",
"mail.previewResetZoom": "Reset zoom",
"mail.previewPrev": "Previous",
"mail.previewNext": "Next",
"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.select": "Select conversation",
"mail.selectAll": "Select all",
"mail.conversationSelected": "1 conversation selected",
"mail.conversationsSelected": "{count} conversations selected",
"mail.alsoIn": "Also delivered to",
"mail.emptyTrash": "Empty trash",
"mail.emptySpam": "Empty spam",
"mail.more": "More",
"mail.markAllRead": "Mark all as read",
"mail.labels": "Labels",
"mail.noLabels": "No labels yet",
"mail.createLabel": "Create new…",
"mail.labelName": "Label name",
"panel.toggle": "Toggle side panel",
"panel.calendar": "Calendar",
"panel.people": "People",
"panel.attachments": "Attachments",
"panel.search": "Search",
"panel.newEvent": "New event",
"panel.miniCalendar": "Mini calendar",
"panel.week": "Week",
"panel.month": "Month",
"panel.view": "View",
"panel.day": "Day",
"panel.3days": "3 days",
"panel.agenda": "Agenda",
"panel.allCalendars": "All calendars",
"panel.searchEvents": "Search events",
"panel.today": "Today",
"panel.noEvents": "No events",
"panel.untitled": "(untitled)",
"panel.allDay": "All day",
"panel.openCalendar": "Open calendar in new tab",
"panel.inConversation": "In conversation",
"panel.allContacts": "All contacts",
"panel.recent": "Recent",
"panel.vips": "VIPs",
"panel.autosaved": "Autosaved",
"panel.senders": "Senders",
"panel.noPeople": "No people",
"panel.composeAll": "Compose to all",
"panel.inviteAll": "Invite all to new event",
"panel.call": "Call",
"panel.message": "Message",
"panel.compose": "Compose",
"panel.invite": "Invite",
"panel.contactDetails": "Contact details",
"panel.showAll": "Show all",
"panel.mailSection": "Mail",
"panel.noSubject": "(no subject)",
"panel.findAll": "Find all conversations with {name}",
"panel.eventsSection": "Events",
"panel.noMatches": "No matches found",
"panel.openContact": "Open contact in new tab",
"panel.openConversation": "Open a conversation to see its attachments.",
"panel.noAttachments": "No attachments",
"panel.download": "Download",
"mail.emptyConfirm": "Permanently delete everything in this folder? This can't be undone.",
"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.saveDraft": "Save draft",
"compose.closePrompt": "Save this message as a draft?",
"compose.sent": "Message sent.",
"compose.undoIn": "{count} seconds to",
"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",
"compose.dropAttach": "Drop to attach",
"compose.dropBody": "Drop image to insert · other files attach",
"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",
"wizard.syncWindow": "How much mail to sync",
"wizard.syncWindow.all": "All mail",
"wizard.syncWindow.all.hint": "Imports the last 30 days first, then the rest in the background.",
"wizard.syncWindow.3months": "Last 3 months only",
"wizard.syncWindow.3months.hint": "Older mail stays on the server until you download it.",
"wizard.syncWindow.new": "New mail only",
"wizard.syncWindow.new.hint":
"Nothing from before now — download older mail anytime from account settings.",
"settings.title": "Settings",
"settings.profile": "Profile",
"settings.security": "Security",
"settings.accounts": "Accounts",
"settings.downloadAllMail": "Sync remaining mail",
"settings.syncedPartially": "Synced partially",
"backfill.importing": "Importing messages… {done} of {total}",
"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.timeFormat": "Time format",
"settings.timeFormat24": "24-hour (14:30)",
"settings.timeFormat12": "12-hour (2:30 PM)",
"settings.calendars": "Calendars",
"settings.myCalendars": "My calendars",
"settings.calendarOptions": "Calendar options",
"settings.createCalendar": "Create calendar",
"settings.editCalendar": "Edit calendar",
"settings.export": "Export",
"settings.calendarDisplay": "Calendar display",
"settings.default": "Default",
"settings.defaultCalendar": "Default calendar",
"settings.firstCalendar": "First calendar",
"settings.defaultRemindersTimed": "Default reminders for timed events",
"settings.defaultRemindersAllday": "Default reminders for all-day events",
"settings.addReminder": "Add reminder",
"settings.name": "Name",
"settings.onlyYou": "Only you can see this calendar.",
"settings.publish": "Publish",
"settings.publishHint": "Share this calendar (read-only) with anyone.",
"settings.fullEventDetails": "Full event details",
"settings.freeBusy": "Free/busy information",
"settings.addAccountHint": "Connect an external calendar account.",
"settings.subscriptions": "Subscriptions",
"settings.subscriptionsHint": "Add a read-only calendar from an iCal (.ics) URL.",
"settings.subscribe": "Subscribe",
"settings.subscribeUrl": "iCal (.ics) URL",
"settings.subscribed": "Subscribed",
"settings.comingSoon": "Coming soon",
"settings.subscribeError": "Couldn't subscribe to that URL.",
"settings.removeSubscription": "Remove subscription",
"settings.removeSubscriptionConfirm": "Stop syncing “{name}” and remove its events?",
"settings.deleteCalendar": "Delete calendar",
"settings.thisCalendar": "this calendar",
"settings.deleteCalendarConfirm": "Delete “{name}” and all of its events? This can't be undone.",
"settings.showAlert": "Show an alert",
"settings.emailMe": "Email me",
"settings.invitations": "Invitations",
"settings.inviteWhen": "When I receive events by email",
"settings.inviteAddUpdate": "Add new events to my calendar and update events that have changed",
"settings.inviteUpdateOnly": "Only update events that I have already added to my calendar",
"settings.inviteNone": "Do not automatically update my calendar",
"settings.addNewFrom": "Add new events from",
"settings.myContacts": "My contacts",
"settings.anyone": "Anyone",
"settings.addToCalendar": "Add to calendar",
"settings.alsoFile": "Also mark the message as read and file it",
"settings.integrations": "Integrations",
"settings.jitsi": "Jitsi Meet",
"settings.jitsiHint":
"Server used to generate video-call links for calendar events. Leave empty to use the public https://meet.jit.si/ server.",
"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>;