{ "appName": "Simple Mail Cleaner", "tagline": "Clean inboxes at scale, safely.", "start": "Start cleanup", "progress": "Progress", "mailboxes": "Mailboxes", "jobs": "Jobs", "rules": "Rules", "status": "Status", "welcome": "Welcome back", "description": "Connect GMX, Gmail, and web.de accounts to unsubscribe newsletters, sort mail, and track every step.", "language": "Language", "overview": "Overview", "queue": "Queue", "security": "Security", "securityText": "Tokens encrypted, audit-ready logs, GDPR-first design.", "featureOne": "Automated unsubscribe", "featureTwo": "Configurable routing", "featureThree": "Multi-tenant ready", "featureOneText": "List-Unsubscribe one-click plus web-link handling.", "featureTwoText": "Flexible rules for folders, labels, and deletions.", "featureThreeText": "Tenant isolation with accounts, jobs, and rules per user.", "queueText": "Track jobs, progress, and logs in real time.", "progressNote": "Security posture preview – encryption and audit trails are planned.", "admin": "Admin", "login": "Login", "register": "Register", "createAccount": "Create account", "noAccount": "No account yet?", "confirm": "Confirm", "confirmTitle": "Please confirm", "cancel": "Cancel", "yes": "Yes", "no": "No", "provider": "Provider", "authMode": "Auth mode", "oauth": "OAuth", "passwordResetTitle": "Password change required", "passwordResetHint": "Your admin password was reset. Please set a new password to continue.", "newPassword": "New password", "confirmPassword": "Confirm password", "passwordResetAction": "Update password", "passwordMismatch": "Passwords do not match.", "passwordUpdated": "Password updated.", "adminTenants": "Tenants", "adminUsers": "Users", "adminAccounts": "Accounts", "adminJobs": "Jobs", "adminSettings": "Settings", "adminExport": "Export", "adminDisable": "Disable", "adminEnable": "Enable", "adminDelete": "Delete", "adminMakeUser": "Make USER", "adminMakeAdmin": "Make ADMIN", "adminImpersonate": "Impersonate", "adminResetPassword": "Reset password", "adminResetTitle": "Reset password", "adminResetPlaceholder": "New password (min 10 characters)", "adminCancel": "Cancel", "adminConfirmReset": "Reset", "adminSettingsHint": "Override OAuth settings stored in the environment. Leave empty to fall back to .env.", "adminGoogleSettings": "Google OAuth", "adminGoogleSettingsHelp": "Create an OAuth client in Google Cloud Console. Add the Redirect URL below as an authorized redirect URI. Use OAuth consent screen in external mode and enable Gmail API.", "adminGoogleClientId": "Client ID", "adminGoogleClientSecret": "Client secret", "adminGoogleRedirectUri": "Redirect URL", "adminCleanupScanLimit": "Max emails per cleanup", "adminCleanupScanLimitHint": "0 = unlimited. Useful for testing.", "adminNewsletterSettings": "Newsletter detection", "adminNewsletterSettingsHint": "Signals and thresholds used to detect newsletters. Comma-separated lists. Weights define how much each signal adds to the score.", "adminNewsletterThreshold": "Minimum signals", "adminNewsletterHeaderKeys": "Header keys", "adminNewsletterHeaderKeysHint": "Comma-separated list headers (e.g. list-unsubscribe,list-id,...).", "adminNewsletterWeightHeader": "Weight: header matches", "adminNewsletterWeightPrecedence": "Weight: bulk/list precedence", "adminNewsletterSubjectTokens": "Subject keywords", "adminNewsletterSubjectTokensHint": "Comma-separated tokens matched against the subject.", "adminNewsletterWeightSubject": "Weight: subject match", "adminNewsletterFromTokens": "From keywords", "adminNewsletterFromTokensHint": "Comma-separated tokens matched against the sender.", "adminNewsletterWeightFrom": "Weight: from match", "adminUnsubscribeHistoryTtl": "Unsubscribe dedupe window (days)", "adminUnsubscribeHistoryTtlHint": "Prevents running unsubscribe again within this time window. Set to 0 to disable.", "adminUnsubscribeMethod": "Unsubscribe method preference", "adminUnsubscribeMethodHint": "Auto uses HTTP when available and falls back to mailto if HTTP fails.", "adminUnsubscribeMethodAuto": "Auto (HTTP → mailto fallback)", "adminUnsubscribeMethodHttp": "Prefer HTTP", "adminUnsubscribeMethodMailto": "Prefer mailto", "adminSaveSettings": "Save settings", "adminSaving": "Saving...", "adminSettingsSaved": "Saved", "adminSettingsError": "Save failed", "adminShowSecret": "Show secret", "adminHideSecret": "Hide secret", "adminSettingsSource": "Sources - Client ID: {{id}}, Secret: {{secret}}, Redirect: {{redirect}}", "adminSettingsSourceNewsletter": "Sources - Threshold: {{threshold}}, Headers: {{headers}}, Subject tokens: {{subject}}, From tokens: {{from}}, Weights (header/precedence/subject/from): {{weightHeader}}/{{weightPrecedence}}/{{weightSubject}}/{{weightFrom}}, Unsubscribe history: {{history}}, Method: {{method}}", "selectAll": "Select all", "adminCancelSelected": "Cancel selected", "adminDeleteSelected": "Delete selected", "adminDeleteJobsConfirm": "Delete {{count}} selected jobs and all events?", "adminRetry": "Retry", "adminCancelJob": "Cancel", "adminMailboxStatus": "Mailbox status", "oauthConnected": "OAuth connected", "oauthMissing": "OAuth missing", "oauthConnect": "Check/connect OAuth", "gmailConnect": "Connect Gmail OAuth", "mailboxAdd": "Add mailbox", "mailboxEditTitle": "Edit mailbox", "mailboxSave": "Save", "mailboxUpdate": "Update", "mailboxEdit": "Edit", "mailboxDelete": "Delete", "mailboxCancelEdit": "Cancel", "mailboxEmpty": "No mailboxes yet. Add one to start cleaning.", "cleanupStart": "Start cleanup", "cleanupDryRun": "Simulate only (no changes)", "cleanupUnsubscribe": "Unsubscribe enabled", "cleanupRouting": "Routing enabled", "cleanupDisabled": "Cleanup is not available yet.", "cleanupSelectMailbox": "Select a mailbox to start cleanup.", "cleanupOauthRequired": "Connect Gmail OAuth before starting cleanup.", "cleanupDryRunHint": "Simulation only: routing and unsubscribe are simulated. No changes or emails are sent.", "cleanupUnsubscribeHint": "Tries to unsubscribe newsletters via List-Unsubscribe. In simulation mode, it only logs the checks.", "cleanupRoutingHint": "Applies your rules (move/delete/label). In simulation mode, it only simulates the actions.", "rulesTitle": "Rules", "rulesAdd": "Add rule", "rulesReorder": "Drag to reorder", "rulesAddTitle": "Create rule", "rulesEditTitle": "Edit rule", "rulesName": "Rule name", "rulesEnabled": "Rule enabled", "rulesMatchMode": "Match mode", "rulesMatchAll": "All conditions (AND)", "rulesMatchAny": "Any condition (OR)", "rulesMatchAnyLabel": "OR", "rulesPhase": "Execution phase", "rulesPhasePre": "Before unsubscribe", "rulesPhasePost": "After unsubscribe", "rulesPhaseHint": "Pre rules run before unsubscribe (unsubscribe status not available). Post rules run after unsubscribe.", "rulesStopOnMatch": "Stop after match (first match wins)", "rulePhasePreBadge": "Pre‑unsubscribe", "rulePhasePostBadge": "Post‑unsubscribe", "rulesStopOnMatchBadge": "FIRST", "rulesConditions": "Conditions", "rulesActions": "Actions", "rulesAddCondition": "+ Add condition", "rulesAddAction": "+ Add action", "rulesSave": "Save rule", "rulesExampleHint": "Example: Unsubscribe status = OK + List-Unsubscribe = * → Action: Move to \"Newsletter-Abgemeldet\".", "remove": "Remove", "ruleConditionUnsubscribeStatus": "Unsubscribe status", "ruleConditionScore": "Newsletter score", "ruleConditionScorePlaceholder": "e.g. >=2", "ruleConditionHeaderMissing": "Header missing", "ruleConditionHeaderMissingPlaceholder": "Header name (e.g. List-Unsubscribe)", "ruleUnsubStatusAny": "Any", "ruleUnsubStatusOk": "OK", "ruleUnsubStatusDryRun": "Simulated", "ruleUnsubStatusFailed": "Failed", "ruleUnsubStatusSkipped": "Skipped", "ruleUnsubStatusDuplicate": "Skipped (duplicate)", "ruleUnsubStatusDisabled": "Disabled", "ruleActionMarkRead": "Mark as read", "ruleActionMarkUnread": "Mark as unread", "rulesOverview": "Rules overview", "rulesEmpty": "No rules yet.", "jobsTitle": "Jobs", "jobsEmpty": "No jobs yet.", "jobCandidatesTitle": "Result details", "jobCandidatesHint": "Shows each newsletter candidate with actions, unsubscribe outcome, and metadata.", "jobCandidatesGroupBy": "Group by", "jobCandidatesGroupDomain": "Sender domain", "jobCandidatesGroupFrom": "From address", "jobCandidatesGroupListId": "List-ID", "jobCandidatesGroupNone": "No grouping", "jobCandidatesGroupsEmpty": "No newsletter candidates yet.", "jobCandidatesShowSignals": "Show details", "jobCandidatesCount": "{{count}} candidates", "jobCandidatesLoadMore": "Load more", "jobCandidatesBack": "Back to groups", "jobCandidatesRefresh": "Refresh", "jobCandidatesUnknown": "Unknown", "jobCandidatesSubject": "Subject", "jobCandidatesFrom": "From", "jobCandidatesListId": "List-ID", "jobCandidatesDate": "Date", "jobCandidatesActions": "Actions", "jobCandidatesUnsubscribe": "Unsubscribe", "jobCandidatesUnsubscribeNone": "No List-Unsubscribe header", "jobCandidatesUnsubscribeDisabled": "Disabled", "jobCandidatesUnsubscribeDryRun": "Simulated", "jobCandidatesUnsubscribeOk": "OK", "jobCandidatesUnsubscribeFailed": "Failed", "jobCandidatesUnsubscribeDuplicate": "Skipped (duplicate)", "resultsTitle": "Result details", "resultsHint": "Open a detailed list of all detected emails with a preview of each message.", "resultsOpen": "Open results", "resultsGroups": "Groups", "resultsGroupsDisabled": "Grouping disabled. Switch to a grouping option to see categories.", "resultsItems": "Messages", "resultsPreview": "Preview", "resultsSelectGroup": "Select a group to load its messages.", "resultsSelectItem": "Select a message to preview it.", "resultsPreviewLoading": "Loading preview...", "resultsPreviewEmpty": "No preview text available.", "resultsSearch": "Search subject/from/list", "resultsFilterAll": "All statuses", "resultsReviewedAll": "All", "resultsReviewed": "Reviewed", "resultsUnreviewed": "Unreviewed", "resultsExportCsv": "CSV", "resultsExportGroupCsv": "Group CSV", "resultsSelectAll": "All", "resultsMarkSelectedReviewed": "Selected reviewed", "resultsMarkSelectedUnreviewed": "Selected unreviewed", "resultsBulkSelect": "Unreviewed", "resultsBulkMarkReviewed": "All reviewed", "resultsDeleteSelected": "Delete selected", "resultsAttachments": "Attachments", "resultsDownloadAttachment": "Download", "resultsHistory": "Unsubscribe history", "resultsUnsubscribeDetails": "Unsubscribe details", "resultsUnsubscribeStatus": "Status", "resultsUnsubscribeMethod": "Method", "resultsUnsubscribeTarget": "Target", "resultsUnsubscribeMessage": "Result", "resultsListId": "List-ID", "resultsListUnsubscribe": "List-Unsubscribe", "resultsListUnsubscribePost": "List-Unsubscribe-Post", "resultsMailtoSubject": "Mailto subject", "resultsMailtoBody": "Mailto body", "resultsRequestMethod": "Request method", "resultsRequestUrl": "Request URL", "resultsResponseStatus": "Response status", "resultsResponseRedirect": "Redirect", "resultsMailtoVia": "Mail sent via", "resultsMailtoTo": "Mailto", "resultsMailtoReplyTo": "Reply-To", "resultsMailtoListUnsubscribe": "List-Unsubscribe header", "resultsUnsubscribeReason": "Reason", "resultsUnsubscribeError": "Error", "resultsLive": "Live", "resultsStatic": "Static", "resultsBackToJob": "Back to job", "jobCandidatesActionApplied": "Applied", "jobCandidatesActionDryRun": "Simulated", "jobCandidatesActionFailed": "Failed", "jobCandidatesActionSkipped": "Skipped", "jobCandidatesSignals": "Signals", "jobCandidatesScore": "Score", "jobCandidatesScoreHint": "Score is derived from subject, sender, header signals, and the newsletter detection model.", "jobCandidatesHeaderSignals": "Headers", "jobCandidatesSubjectSignals": "Subject matches", "jobCandidatesFromSignals": "From matches", "jobCandidatesPrecedenceSignal": "Bulk/List precedence", "jobEventCleanupStarted": "Cleanup started", "jobEventCleanupFinished": "Cleanup finished", "jobEventConnecting": "Connecting to {{email}}", "jobEventListingGmail": "Listing Gmail messages", "jobEventListedGmail": "Listed {{count}} Gmail messages so far", "jobEventPreparedGmail": "Prepared {{count}} Gmail messages", "jobEventResumeGmail": "Resuming Gmail cleanup at {{current}}/{{total}}", "jobEventProcessingGmail": "Processing {{count}} Gmail messages", "jobEventNoGmail": "No Gmail messages to process", "jobEventFoundMailboxes": "Found {{count}} mailboxes", "jobEventScanningMailbox": "Scanning {{mailbox}}", "jobEventPreparedImap": "Prepared {{count}} IMAP messages", "jobEventResumeImap": "Resuming IMAP cleanup at {{current}}/{{total}}", "jobEventProcessingImap": "Processing {{count}} IMAP messages", "jobEventNoImap": "No IMAP messages to process", "jobEventDetectedCandidates": "Detected {{count}} newsletter candidates", "jobEventProcessed": "Processed {{current}}/{{total}}", "jobEventProcessedCount": "Processed {{current}}", "jobEventGmailActionAppliedList": "Gmail action applied: {{actions}}", "jobEventGmailActionApplied": "Gmail action applied: {{action}}", "jobEventGmailBatchModify": "Gmail batch: MODIFY {{count}}", "jobEventGmailBatchDelete": "Gmail batch: DELETE {{count}}", "jobEventGmailActionSkippedNoChanges": "Gmail action skipped: no label changes", "jobEventGmailActionFailedSimple": "Gmail action failed: {{error}}", "jobEventGmailActionFailed": "Gmail action failed ({{action}}): {{error}}", "jobEventImapDeleteBatchFailed": "IMAP delete batch failed: {{error}}", "jobEventImapMarkReadBatchFailed": "IMAP mark-read batch failed: {{error}}", "jobEventImapMarkUnreadBatchFailed": "IMAP mark-unread batch failed: {{error}}", "jobEventImapMoveBatchFailed": "IMAP move batch failed: {{error}}", "jobEventImapBatchDelete": "IMAP batch: DELETE {{count}}", "jobEventImapBatchMarkRead": "IMAP batch: MARK_READ {{count}}", "jobEventImapBatchMarkUnread": "IMAP batch: MARK_UNREAD {{count}}", "jobEventImapBatchMove": "IMAP batch: MOVE {{count}} → {{target}}", "jobEventImapActionFailedSimple": "IMAP action failed: {{error}}", "jobEventImapActionFailed": "IMAP action failed ({{action}}): {{error}}", "jobEventDryRunAction": "Simulate only: {{action}}", "jobEventCanceledByAdmin": "Job canceled by admin", "jobEventCanceledBeforeStart": "Job canceled before start", "jobEventFailed": "Job failed: {{error}}", "loadingCandidates": "Loading candidates...", "jobsProgress": "Progress", "jobsEta": "ETA", "jobsEtaDone": "Done", "jobsEtaQueued": "Queued", "jobsEtaRecalculating": "Recalculating ETA…", "jobsEtaCalculating": "Calculating…", "jobDetailsTitle": "Job details", "jobNoEvents": "No events yet.", "jobEvents": "Job events", "phaseListing": "Listing", "phaseProcessing": "Processing", "phaseUnsubscribe": "Unsubscribe", "phaseListingPending": "Preparing message list.", "phaseProcessingPending": "Waiting for processing.", "phaseUnsubscribePending": "Waiting for unsubscribe.", "phaseUnsubscribeDisabled": "Unsubscribe disabled for this job.", "phaseUnsubscribeSummary": "Unsubscribed {{ok}} · Failed {{failed}} · Simulated {{dryRun}} ({{total}} total).", "phaseUnsubscribeSummaryWithProcessed": "Unsubscribed {{ok}} · Failed {{failed}} · Simulated {{dryRun}} ({{total}} candidates, {{processed}}/{{overall}} processed).", "phaseUnsubscribeSummaryNoDryRun": "Unsubscribed {{ok}} · Failed {{failed}} ({{total}} total).", "phaseUnsubscribeSummaryNoDryRunWithProcessed": "Unsubscribed {{ok}} · Failed {{failed}} ({{total}} candidates, {{processed}}/{{overall}} processed).", "phaseUnsubscribeDryRunPending": "Simulation: waiting for unsubscribe checks.", "phaseUnsubscribeDryRunSummary": "Simulation: {{dryRun}} unsubscribe checks ({{total}} total).", "phaseUnsubscribeDryRunSummaryWithProcessed": "Simulation: {{dryRun}} unsubscribe checks ({{total}} candidates, {{processed}}/{{overall}} processed).", "phaseStatusActive": "Active", "phaseStatusDone": "Done", "phaseStatusPending": "Pending", "noJobSelected": "No job selected.", "tenantName": "Tenant name", "password": "Password", "selectMailbox": "Select mailbox", "value": "Value", "targetPlaceholder": "Target (e.g. Newsletter)", "delete": "Delete", "details": "Details", "email": "Email", "appPassword": "App password / OAuth token", "adminDeleteConfirm": "Delete tenant {{name}}?" , "countUsers": "{{count}} users", "countAccounts": "{{count}} accounts", "countJobs": "{{count}} jobs", "placeholderEmail": "email@example.com", "providerHintGmail": "Gmail uses OAuth. You can leave the password empty and connect via the OAuth button.", "providerHintGmx": "GMX uses IMAP. Enter your app password or IMAP password for this mailbox.", "providerHintWebde": "web.de uses IMAP. Enter your app password or IMAP password for this mailbox.", "mailboxPasswordHintEdit": "Leave empty to keep the current app password.", "providerHelp": "Help for mailbox setup", "providerHelpTitle": "Mailbox setup help", "providerHelpGmail": "Create a Google OAuth Client and connect via the OAuth button. The password field is not required when OAuth is used.", "providerHelpGmx": "Enable IMAP in your GMX settings and create an app password. Use that password here.", "providerHelpWebde": "Enable IMAP in your web.de account settings and create an app password. Use that password here.", "wizardStepProvider": "Provider", "wizardStepDetails": "Details", "wizardStepReview": "Review", "wizardChooseProvider": "Choose a provider", "wizardNext": "Next", "wizardBack": "Back", "wizardCreate": "Create mailbox", "wizardConnectNow": "Connect Gmail OAuth now", "close": "Close", "providerGmail": "Gmail", "providerGmx": "GMX", "providerWebde": "web.de", "selectProvider": "Select provider", "statusRunning": "Running", "statusQueued": "Queued", "statusSucceeded": "Succeeded", "statusFinished": "Cleanup finished", "statusFailed": "Failed", "statusCanceled": "Canceled", "oauthStatusLabel": "OAuth status" , "adminExportJson": "Export JSON", "adminExportCsv": "Export CSV", "adminExporting": "Exporting...", "adminExportDone": "Export ready", "adminExportFailed": "Export failed", "adminLastConnected": "Last connected", "adminExpiresAt": "Expires", "oauthStatusUnknown": "Unknown", "adminTenantExport": "Tenant export", "adminExportHint": "Export tenant data for GDPR requests. Choose format and scope.", "adminExportScope": "Scope", "adminExportAll": "All data", "adminExportUsers": "Users only", "adminExportAccounts": "Accounts only", "adminExportJobs": "Jobs only", "adminExportRules": "Rules only", "adminExportStart": "Start export", "badgeConnected": "Connected", "badgeMissing": "Missing", "badgeHealthy": "Healthy", "badgeUnhealthy": "Unhealthy", "statusLabel": "Status", "ruleConditionHeader": "Header", "ruleConditionSubject": "Subject", "ruleConditionFrom": "From", "ruleConditionListUnsub": "List-Unsubscribe", "ruleConditionListId": "List-Id", "ruleActionMove": "Move", "ruleActionDelete": "Delete", "ruleActionArchive": "Archive", "ruleActionLabel": "Label", "adminExportFormat": "Format", "exportFormatJson": "JSON", "exportFormatCsv": "CSV", "exportFormatZip": "ZIP", "logout": "Logout", "tenantFallback": "Tenant", "ruleConditionsCount": "{{count}} conditions", "ruleActionsCount": "{{count}} actions", "oauthErrorInvalidGrant": "Token revoked or invalid", "oauthErrorExpired": "Token expired", "oauthErrorUnknown": "OAuth error", "adminActive": "Active", "adminInactive": "Inactive", "adminSortLabel": "Sort", "adminSortRecent": "Newest", "adminSortOldest": "Oldest", "adminSortName": "Name", "adminSortEmail": "Email", "adminSortStatus": "Status", "exportHistory": "Export history", "exportDownload": "Download", "exportExpires": "Expires", "exportStatusQueued": "Queued", "exportStatusRunning": "Running", "exportStatusDone": "Done", "exportStatusFailed": "Failed", "exportStatusExpired": "Expired", "adminExportPurge": "Purge expired", "exportProgress": "Progress {{progress}}%", "adminConsole": "Admin console", "adminConsoleHint": "Global controls for tenants, users, accounts, exports, and jobs.", "userWorkspace": "User workspace", "userWorkspaceHint": "Everything below affects only your own mailbox and rules.", "toastGenericError": "Something went wrong.", "toastSessionExpired": "Session expired. Please log in again.", "toastLoginSuccess": "Logged in successfully.", "toastRegisterSuccess": "Account created successfully.", "toastMailboxAdded": "Mailbox added.", "toastMailboxUpdated": "Mailbox updated.", "toastMailboxDeleted": "Mailbox deleted.", "toastRuleSaved": "Rule saved.", "toastRuleDeleted": "Rule deleted.", "toastRuleOrderSaved": "Rule order updated.", "toastDeleteSelected": "{{deleted}} deleted · {{missing}} missing · {{failed}} failed", "toastCleanupStarted": "Cleanup job started.", "toastLoggedOut": "Logged out.", "toastExportQueued": "Export queued.", "toastExportReady": "Export ready.", "toastExportFailed": "Export failed.", "toastDownloadFailed": "Download failed.", "toastExportPurged": "Expired exports purged.", "toastExportDeleted": "Export deleted.", "toastTenantUpdated": "Tenant updated.", "toastTenantDeleted": "Tenant deleted.", "toastUserUpdated": "User updated.", "toastAccountUpdated": "Account updated.", "toastRoleUpdated": "Role updated.", "toastImpersonate": "Impersonation started.", "toastPasswordReset": "Password reset.", "toastJobCanceled": "Job canceled.", "toastJobRetry": "Job retried.", "toastJobDeleted": "Job deleted.", "toastSettingsSaved": "Settings saved.", "toastSettingsFailed": "Settings save failed.", "confirmMailboxDelete": "Delete mailbox {{email}}? This will remove all related data.", "confirmDeleteSelected": "Delete {{count}} selected messages? Messages might already be deleted.", "adminDeleteJobConfirm": "Delete this job and all its events?" }