{"mailui.op.read":"Mark as read","mailui.op.unread":"Mark as unread","mailui.op.star":"Star","mailui.op.pin":"Pin to top","mailui.op.unpin":"Unpin","mailui.op.important":"Mark important","mailui.op.unimportant":"Mark not important","mailui.row.important":"Important","mailui.op.unstar":"Unstar","mailui.op.restore":"Restore","mailui.op.delete_forever":"Delete forever","mailui.op.not_junk":"Not spam","mailui.op.move_inbox":"Move to Inbox","mailui.op.delete":"Delete","mailui.op.delete_draft":"Discard drafts","mailui.op.archive":"Archive","mailui.op.junk":"Report spam","mailui.op.mark_unread":"Mark as unread","mailui.search.results":"Results for “{q}”","mailui.greeting":"Hello, {name}","mailui.search.label":"Search {folder}","mailui.search.placeholder":"Search {folder}…","mailui.brief.unread.one":"{count} unread message","mailui.brief.unread.other":"{count} unread messages","mailui.brief.all_read":"You're all caught up","mailui.brief.enabled":"The AI assistant reads your unread mail and highlights what needs your attention.","mailui.brief.disabled":"AI summaries are included in Mail Pro — your administrator can turn them on.","mailui.brief.view":"View summary","mailui.empty.search":"No messages matched your search","mailui.empty.folder":"{folder} is empty","mailui.empty.clear_search":"Clear search","mailui.empty.sent_hint":"Messages you send are saved here.","mailui.empty.hint":"New mail will appear here.","mailui.bulk.label":"Actions for selected messages","mailui.bulk.hint":"With selected:","mailui.bulk.count.one":"{count} message","mailui.bulk.count.other":"{count} messages","mailui.list.label":"Message list","mailui.list.to":"To: {recipients}","mailui.list.no_recipients":"(no recipients)","mailui.list.select":"Select message {subject}","mailui.pager.label":"Pagination","mailui.pager.newest":"← Newest","mailui.pager.older":"Older →","mailui.reader.back":"← Back to {folder}","mailui.reader.thread":"Conversation","mailui.reader.thread_count.one":"Conversation · {count} message","mailui.reader.thread_count.other":"Conversation · {count} messages","mailui.reader.sent_prefix":"Sent · ","mailui.reader.sent_message":"Sent message","mailui.reader.to":"To: {recipients}","mailui.reader.cc":"Cc: {recipients}","mailui.reader.reply":"Reply","mailui.reader.reply_all":"Reply all","mailui.reader.forward":"Forward","mailui.reader.images_blocked.one":"{count} external image was blocked to protect your privacy.","mailui.reader.images_blocked.other":"{count} external images were blocked to protect your privacy.","mailui.reader.show_images":"Show images","mailui.reader.content":"Message content","mailui.invite.label":"Meeting invitation","mailui.invite.from":"from {organizer}","mailui.invite.unverified":"Careful: this invitation names {organizer} as the organizer but was sent by {sender} (or could not be authenticated). Only answer if you trust the sender.","mailui.invite.replied":"You replied: {status}","mailui.invite.outdated":"The organizer changed this event — your calendar still has the earlier version. Choose your answer again to update it.","mailui.invite.cancel_label":"Event cancelled","mailui.invite.cancelled":"{organizer} cancelled this event.","mailui.invite.cancelled_in_calendar":"It is still in your calendar.","mailui.invite.cancelled_gone":"It is not (or no longer) in your calendar.","mailui.invite.remove":"Remove from calendar","mailui.invite.status.ACCEPTED":"yes","mailui.invite.status.DECLINED":"no","mailui.invite.status.TENTATIVE":"maybe","mailui.invite.accept":"Yes","mailui.invite.tentative":"Maybe","mailui.invite.decline":"No","mailui.error.title":"Couldn't load your mailbox","mailui.error.body":"The mail server is busy or temporarily unreachable. Your mail is not affected.","mailui.error.code":"Error code: {code}","mailui.error.retry":"Try again","mailui.error.back":"Back to Inbox","mailui.loading":"Loading mail…","notice.moved-archive":"Conversation moved to Archive.","notice.moved-trash":"Conversation moved to Trash.","notice.moved-junk":"Conversation moved to Spam.","notice.moved-inbox":"Conversation moved to Inbox.","notice.moved":"Conversation moved.","notice.deleted":"Selected messages deleted forever.","notice.pin-limit":"At most 20 messages can be pinned. Unpin some, then try again.","notice.partial":"Only part of the selected messages was processed. Reload and try again for the rest.","notice.draft-discarded":"Draft discarded.","notice.invite-accepted":"Accepted — the event was added to your calendar and the organizer has been notified.","notice.invite-removed":"The cancelled event was removed from your calendar.","notice.invite-not-verified":"Not removed: the cancellation does not come from the organizer (or could not be authenticated).","notice.invite-tentative":"You replied maybe.","notice.invite-declined":"Invitation declined.","notice.invalid":"Select at least one message first.","notice.failed":"Something went wrong. Please try again.","compose.error.400":"Check the recipient addresses and message content.","compose.error.413":"The message or attachments exceed the allowed size (15 MB per file, 25 MB total).","compose.error.429":"You've sent too many messages in the last hour. Please try again later.","compose.error.503":"This server isn't set up to send mail yet. Contact your administrator.","compose.error.too_many_files":"You can attach up to {count} files.","compose.error.too_large":"Attachments exceed the 15 MB total limit.","compose.error.no_recipients":"Please specify at least one recipient.","compose.error.network":"Couldn't reach the mail server. Your message was not sent.","compose.error.unknown":"Couldn't send the message. Please try again.","compose.error.session":"Your session has expired.","compose.error.draft":"Couldn't save draft.","compose.draft.saving":"Saving…","compose.draft.saved":"Draft saved at {time}","compose.from":"From","compose.to":"To","compose.to.placeholder":"name@company.com, partner@example.com","compose.subject":"Subject","compose.body":"Message body","compose.body.placeholder":"Write your message…","compose.send":"Send","compose.sending":"Queuing…","compose.discard":"Discard draft","compose.hint":"After sending, you can follow your message in “Delivery status”.","compose.attach":"Attach files","compose.attach.summary.one":"{count} file · {size} / 15 MB","compose.attach.summary.other":"{count} files · {size} / 15 MB","compose.eyebrow":"New message","compose.title.draft":"Draft","compose.title.reply_all":"Reply all","compose.title.reply":"Reply","compose.title.forward":"Forward","compose.title.new":"Compose","compose.relay_missing":"Outgoing mail isn't set up yet.","compose.relay_missing.detail":"You can still write messages, but they can only be sent once an administrator finishes the outgoing mail setup.","compose.quote.header":"On {date}, {sender} <{address}> wrote:","compose.forward.header":"---------- Forwarded message ----------","compose.forward.from":"From: {sender} <{address}>","compose.forward.date":"Date: {date}","compose.forward.subject":"Subject: {subject}","compose.forward.to":"To: {recipients}","outbox.status.queued":"Queued","outbox.status.sending":"Sending","outbox.status.accepted":"Sent","outbox.status.failed":"Failed","outbox.explain.all_rejected":"The receiving server rejected all recipients. Check the addresses.","outbox.explain.smtp_rejected":"The receiving server rejected the message: {reason}","outbox.explain.failed.one":"Couldn't send after {count} attempt. Please resend or contact your administrator.","outbox.explain.failed.other":"Couldn't send after {count} attempts. Please resend or contact your administrator.","outbox.explain.retrying":"The message hasn't been accepted yet (attempt {count}). It will retry automatically.","outbox.explain.rejected_recipients":"Couldn't deliver to: {recipients}","outbox.explain.copy_pending":"Sent. The copy in “Sent” is still being saved.","outbox.eyebrow":"Outbox","outbox.title":"Delivery status","outbox.compose":"Compose","outbox.queued":"Your message has been queued for sending. Status updates automatically.","outbox.relay_missing":"Outgoing mail isn't set up yet.","outbox.relay_missing.detail":"New messages will not be accepted.","outbox.load_failed":"Couldn't load sending status. Please try again.","outbox.empty":"No outgoing messages yet","outbox.empty.hint":"Messages you send from webmail will show their status here.","outbox.no_subject":"(No subject)","outbox.recipients.one":"{count} recipient","outbox.recipients.other":"{count} recipients","contacts.eyebrow":"Contacts","contacts.title":"Contacts","contacts.search.label":"Search contacts","contacts.search.placeholder":"Search name, email, company…","contacts.unavailable":"Couldn't connect to the contacts service.","contacts.empty.search":"No contacts found","contacts.empty":"No contacts yet","contacts.col.name":"Name","contacts.col.email":"Email","contacts.col.phone":"Phone","contacts.delete":"Delete","contacts.add":"Add contact","ai.error.session":"Your session has expired.","ai.error.generic":"The AI assistant couldn't respond. Please try again.","ai.priority.urgent":"Needs attention","ai.priority.normal":"Normal","ai.priority.low":"Not urgent","ai.owner.me":"You","ai.owner.sender":"Sender","ai.owner.other":"Someone else","ai.assistant":"AI assistant","ai.working":"Working…","ai.summarize":"Summarize conversation","ai.suspicious":"⚠ Possible scam: {reason}","ai.action_items":"Action items","ai.due":" · due {date}","ai.disclaimer":"AI can make mistakes — double-check important information.","ai.reply.placeholder":"What to reply, e.g. agree, promise the quote by Friday","ai.reply.label":"What you want to reply","ai.tone.label":"Tone","ai.tone.formal":"Formal","ai.tone.friendly":"Friendly","ai.tone.short":"Brief","ai.reply.submit":"Draft reply with AI","ai.brief.reading":"Reading your mail…","ai.brief.view":"View summary","ai.brief.all_read":"You're all caught up.","ai.error.ai_not_configured":"The AI assistant isn't configured on this server.","ai.error.ai_not_enabled":"The AI assistant isn't enabled for your organisation (Mail Pro plan).","ai.error.ai_unavailable":"The AI assistant isn't configured on this server.","ai.error.ai_rate_limited":"All {limit} AI requests for this hour have been used.","ai.error.ai_budget_exhausted":"Today's AI usage budget has been used. Please try again later.","ai.error.ai_refused":"The AI assistant can't process this message.","ai.error.ai_overloaded":"The AI assistant is overloaded. Please try again later.","ai.error.ai_invalid_output":"The AI assistant returned an invalid result. Please try again.","ai.error.message_not_found":"Message not found.","ai.error.mail_backend_busy":"The mail server is busy. Please try again in a moment.","mail.placeholder.no_subject":"(No subject)","mail.placeholder.unknown_sender":"Unknown sender","mail.placeholder.no_text":"This message has no text content to display.","app.description":"Business email — Cloud and Private","settingsui.eyebrow":"Account","settingsui.mfa.title":"Security: 2-step verification","settingsui.mfa.hint":"After your password, signing in also requires a 6-digit code from your phone.","settingsui.mail.title":"Mail","settingsui.mail.hint":"Signature, automatic replies and filters — they run on the server, so they apply to every device.","settingsui.clients.title":"Use with Outlook, Thunderbird and phones","settingsui.clients.hint":"Outlook and Thunderbird usually configure themselves when you enter your email address. If you need to enter settings manually:","settingsui.clients.imap":"Incoming mail (IMAP)","settingsui.clients.smtp":"Outgoing mail (SMTP)","settingsui.clients.dav":"Calendar & contacts (CalDAV/CardDAV)","settingsui.clients.server":"{host} · port {port} · {security}","settingsui.clients.username":"Username","settingsui.clients.password":"Password","settingsui.clients.password.value":"Use an app password below (recommended)","settingsui.apppw.title":"App passwords","settingsui.apppw.hint":"Use a separate password for each device. If a device is lost, revoke its password — no need to change your main password.","settingsui.apppw.col.device":"Device","settingsui.apppw.col.created":"Created","settingsui.apppw.col.last_used":"Last used","settingsui.apppw.never_used":"Never used","settingsui.apppw.revoke":"Revoke","settingsui.apppw.name":"Device name","settingsui.apppw.name.placeholder":"Device name, e.g. Outlook laptop","settingsui.apppw.creating":"Creating…","settingsui.apppw.create":"Create app password","settingsui.apppw.secret.title":"Password for “{name}”","settingsui.apppw.secret.hint":"Enter it in your mail app now. This password is shown <b>only once</b>.","settingsui.apppw.secret.label":"App password","settingsui.apppw.copy":"Copy","settingsui.apppw.copied":"Copied","settingsui.apppw.username":"Username: {username}","settingsui.apppw.error.name_required":"Give the device a name, e.g. “Outlook laptop”.","settingsui.apppw.error.create_failed":"Couldn't create the app password.","settingsui.sessions.title":"Webmail sessions","settingsui.sessions.hint":"Sign out of browsers you no longer use.","settingsui.sessions.revoke_others":"Sign out other sessions","settingsui.sessions.col.session":"Session","settingsui.sessions.col.signed_in":"Signed in","settingsui.sessions.col.last_active":"Last active","settingsui.sessions.current":"Current session","settingsui.sessions.other":"Other browser","settingsui.sessions.signout":"Sign out","settingsui.password.title":"Change password","settingsui.password.hint":"Your main password is used for webmail. App passwords are not affected.","settingsui.password.current":"Current password","settingsui.password.new":"New password (at least 12 characters)","settingsui.password.confirm":"Confirm new password","settingsui.password.changing":"Changing…","settingsui.password.submit":"Change password","settingsui.password.done":"Password changed. Other webmail sessions have been signed out; app passwords still work.","settingsui.password.error.mismatch":"The passwords don't match.","settingsui.password.error.too_short":"The new password must be at least 12 characters.","settingsui.password.error.failed":"Couldn't change the password.","settingsui.signature":"Signature","settingsui.signature.placeholder":"Best regards,\nJane Smith\nSales Department","settingsui.signature.hint":"Added automatically to the end of new messages, replies and forwards in webmail.","settingsui.vacation":"Automatic replies (out of office)","settingsui.vacation.enable":"Turn on automatic replies","settingsui.vacation.start":"From","settingsui.vacation.end":"Until","settingsui.vacation.subject":"Subject","settingsui.vacation.subject.placeholder":"Out of office","settingsui.vacation.body":"Message","settingsui.vacation.body.placeholder":"I'm on leave until 5 October. For urgent matters, please contact ...","settingsui.vacation.days":"Reply to each sender only once every","settingsui.vacation.days_value.one":"{count} day","settingsui.vacation.days_value.other":"{count} days","settingsui.filters":"Incoming mail filters","settingsui.filters.empty":"No filters yet. Example: move mail from “newsletter@” to Archive automatically.","settingsui.filters.if":"If","settingsui.filters.then":"then","settingsui.filters.field":"Field","settingsui.filters.condition":"Condition","settingsui.filters.value":"Value","settingsui.filters.action":"Action","settingsui.filters.op.contains":"contains","settingsui.filters.op.is":"is","settingsui.filters.field.from":"Sender","settingsui.filters.field.to":"Recipient","settingsui.filters.field.subject":"Subject","settingsui.filters.field.any":"Any","settingsui.filters.action.archive":"Move to Archive","settingsui.filters.action.trash":"Move to Trash","settingsui.filters.action.junk":"Move to Junk","settingsui.filters.action.read":"Mark as read","settingsui.filters.action.star":"Star","settingsui.filters.remove":"Remove","settingsui.filters.add":"+ Add filter","settingsui.mail.apply_error":"Couldn't apply to the server yet: {error}. The system will retry automatically.","settingsui.mail.applying":"Applying to the server…","settingsui.mail.saving":"Saving…","settingsui.mail.save":"Save mail settings","settingsui.mail.saved":"Saved. Filters and automatic replies take effect within seconds, including in Outlook and on phones.","settingsui.mail.error.invalid":"Invalid data.","settingsui.mail.error.save_failed":"Couldn't save the settings.","settingsui.error.settings_changed":"The settings were just changed elsewhere (the app or another tab). Reload the page and make your change again.","mfa.enabled.title":"2-step verification is on","mfa.recovery.hint":"Store the 10 recovery codes below somewhere safe. Each code can be used once if you lose your phone. The codes are shown <b>only once</b>.","mfa.setup.scan":"1. Open Google Authenticator, Microsoft Authenticator or a similar app and scan the QR code.","mfa.setup.manual":"Can't scan it? Enter this key:","mfa.setup.code":"2. Enter the 6-digit code shown in the app","mfa.checking":"Checking…","mfa.enable":"Turn on 2-step verification","mfa.status.on.one":"On · {count} recovery code left.","mfa.status.on.other":"On · {count} recovery codes left.","mfa.admin_required":"Administrator accounts must turn on 2-step verification.","mfa.code_label":"Verification code","mfa.disable.placeholder":"Current code to turn off","mfa.disable":"Turn off","mfa.intro":"Protect your account with a code from your phone when signing in to webmail and admin.","mfa.preparing":"Preparing…","mfa.disabled":"2-step verification turned off.","mfa.error.setup_failed":"Couldn't start the setup.","mfa.error.invalid_code":"Incorrect code.","mfa.current_password":"Current password","mfa.app_passwords.hint":"Note: once it is on, Outlook, Thunderbird, iPhone/Android Mail and calendar/contacts apps (IMAP, SMTP, CalDAV/CardDAV) no longer sign in with your main password. Create an app password (App passwords section) and enter it instead of your password in those apps. Webmail and the Zomail app are not affected.","mfa.app_passwords.on":"Outlook, phones and calendar/contacts apps sign in with app passwords only, not your main password.","mfa.enabled.signed_out":"Your other sessions were signed out.","calendarui.month_nav":"Change month","calendarui.prev":"← Previous month","calendarui.today":"Today","calendarui.next":"Next month →","calendarui.unavailable":"Couldn't connect to the calendar service.","calendarui.weekday.mon":"Mon","calendarui.weekday.tue":"Tue","calendarui.weekday.wed":"Wed","calendarui.weekday.thu":"Thu","calendarui.weekday.fri":"Fri","calendarui.weekday.sat":"Sat","calendarui.weekday.sun":"Sun","calendarui.more.one":"+{count} event","calendarui.more.other":"+{count} events","calendarui.upcoming":"Upcoming","calendarui.upcoming.hint":"Syncs with iPhone, Android, Outlook and Thunderbird (see Settings).","calendarui.upcoming.none":"No upcoming events","calendarui.recurring":"recurring","calendarui.status.accepted":"accepted","calendarui.status.declined":"declined","calendarui.status.tentative":"tentative","calendarui.status.needs_action":"no response","calendarui.delete":"Delete","calendarui.new":"New event","calendarui.new.hint":"Invitees receive a standard invitation (opens in Outlook, Gmail and Apple Mail).","calendarui.form.title":"Title","calendarui.form.title.placeholder":"Customer meeting","calendarui.form.all_day":"All day","calendarui.form.date":"Date","calendarui.form.end_date":"Until","calendarui.form.start":"Start","calendarui.form.end":"End","calendarui.form.location":"Location","calendarui.form.location.placeholder":"Meeting room 3 / meeting link","calendarui.form.attendees":"Invite (emails, separated by commas)","calendarui.form.attendees.placeholder":"an@company.com, partner@example.com","calendarui.form.note":"Notes","calendarui.form.creating":"Creating…","calendarui.form.create":"Create event","calendarui.created":"Event created.","calendarui.created_invited.one":"Event created and an invitation sent to {count} person.","calendarui.created_invited.other":"Event created and invitations sent to {count} people.","calendarui.error.create_failed":"Couldn't create the event.","contactui.name":"Full name","contactui.email":"Email","contactui.email.placeholder":"lan@partner.com","contactui.phone":"Phone","contactui.company":"Company","contactui.note":"Notes","contactui.saving":"Saving…","contactui.add":"Add contact","contactui.saved":"Contact saved.","contactui.error.save_failed":"Couldn't save the contact.","settingsui.error.app_password_limit":"At most {max} app passwords; revoke devices you no longer use.","settingsui.error.app_password_not_found":"App password not found.","settingsui.error.session_not_found":"Session not found.","settingsui.error.password_unchanged":"The new password must be different from the current one.","settingsui.error.wrong_password":"The current password is incorrect.","settingsui.error.reauth_throttled":"Too many incorrect passwords. Try again in {minutes} min.","settingsui.error.mfa_already_enabled":"2-step verification is already on.","settingsui.error.mfa_setup_required":"Please start the setup again.","settingsui.error.mfa_invalid_code":"Incorrect code — check your phone's clock and try a fresh code.","settingsui.error.mfa_unavailable":"This server does not support 2-step verification yet.","settingsui.error.end_before_start":"The end must be after the start.","settingsui.error.value_required":"Enter a value for the filter.","settingsui.error.invalid_character":"Contains an invalid character.","settingsui.error.date_invalid":"That date does not exist — pick the date again.","settingsui.error.invalid_range":"Invalid time range (at most about 13 months).","settingsui.error.not_an_invitation":"This message is not a meeting invitation.","settingsui.error.sending_unavailable":"Sending isn't configured — invitations can't be sent.","settingsui.error.calendar_unavailable":"The calendar and contacts service isn't responding. Please try again later.","settingsui.error.mail_backend_busy":"The mail server is busy. Please try again in a moment.","calendarui.untitled":"(No title)","onboarding.dns.eyebrow":"DNS verification","onboarding.dns.title":"Domain registered","onboarding.dns.type":"Type","onboarding.dns.host":"Name / Host","onboarding.dns.value":"Value","onboarding.dns.back":"Back to admin","onboarding.eyebrow":"Service setup","onboarding.title":"Connect a business domain","onboarding.lead":"Enter the customer's domain. The system will generate the DNS records and track verification.","onboarding.company":"Company name","onboarding.company.placeholder":"Acme Ltd.","onboarding.domain":"Email domain","onboarding.placement":"Mailbox location","onboarding.placement.cloud.hint":"Fast to deploy, operated by Zomail","onboarding.placement.private.hint":"Mailboxes live on the customer's own infrastructure","onboarding.creating":"Creating configuration…","onboarding.submit":"Create DNS configuration","onboarding.created":"{domain} has been created. Add the record below to your DNS to verify ownership.","onboarding.error.forbidden":"Only Zomail administrators can add customers.","onboarding.error.domain_conflict":"This domain is already registered.","onboarding.error.create_failed":"Couldn't create the customer configuration. Please try again.","onboarding.error.invalid":"The details are invalid. Check the company name and domain, e.g. acme.com.","onboarding.error.unknown":"Something went wrong while setting up the domain.","onboarding.error.tenant_conflict":"An organisation already uses this slug — choose another, or open the existing organisation to add the domain.","onboarding.error.password_too_short":"The owner password needs at least 12 characters.","onboarding.error.password_too_long":"The owner password is too long.","onboarding.error.password_too_weak":"The owner password is too weak: use at least 3 kinds of characters (lower case, upper case, digits, symbols) and avoid common passwords. With a long password only the first 72 bytes are used (an accented letter takes 2–3 bytes), so the beginning must be strong on its own.","onboarding.error.password_contains_name":"The owner password must not contain the name, address, company name or domain.","devices.title":"Mobile devices","devices.hint":"Phones and tablets signed in to this account with the Zomail app. Remove a device to sign it out at once.","devices.empty":"No device has signed in with the Zomail app yet.","devices.col.device":"Device","devices.col.app":"App","devices.col.signed_in":"Signed in","devices.col.last_active":"Last active","devices.col.push":"Notifications","devices.push.on":"On","devices.push.off":"Off","devices.current":"This device","devices.revoke":"Remove device","devices.revoke.confirm":"Sign {device} out of this account? The app on that device will have to sign in again.","devices.revoke_all":"Remove all devices","devices.revoke_all.confirm":"Sign every mobile device of {address} out?","devices.admin.hint":"The Zomail app on the user's phones. Remove a device to sign it out remotely (for example when it is lost).","devices.error":"Couldn't remove the device. Please try again.","devices.platform.ios":"iOS","devices.platform.android":"Android","console.card.mobile.title":"Mobile app","console.card.mobile.desc":"Minimum versions, links, APNs/FCM keys for push notifications.","mobileadmin.title":"Mobile app","mobileadmin.lead":"Settings of the Zomail iOS/Android app for this server: required updates, links, feature flags and push notification keys.","mobileadmin.app.title":"App configuration","mobileadmin.app.hint":"The app reads this when it opens. Versions below the minimum are asked to update.","mobileadmin.min_ios":"Minimum iOS version","mobileadmin.min_android":"Minimum Android version","mobileadmin.latest_ios":"Latest iOS version","mobileadmin.latest_android":"Latest Android version","mobileadmin.store_ios":"App Store link","mobileadmin.store_android":"Google Play link","mobileadmin.privacy":"Privacy policy","mobileadmin.terms":"Terms of service","mobileadmin.support":"Support page","mobileadmin.flags":"Feature flags (JSON, e.g. {\"compose.ai\": false})","mobileadmin.message_vi":"In-app message (Vietnamese)","mobileadmin.message_en":"In-app message (English)","mobileadmin.save":"Save configuration","mobileadmin.push.title":"Push notifications","mobileadmin.push.hint":"Keys are encrypted and write-only — never shown again. Leave a field empty to keep the stored key.","mobileadmin.push.relay":"A Private server without its own keys sends through the Zomail Cloud relay.","mobileadmin.apns.enabled":"Enable APNs (iOS)","mobileadmin.apns.key_id":"Key ID","mobileadmin.apns.team_id":"Team ID","mobileadmin.apns.bundle_id":"Bundle ID","mobileadmin.apns.key":".p8 key (paste the whole file)","mobileadmin.fcm.enabled":"Enable FCM (Android)","mobileadmin.fcm.account":"Firebase service account JSON","mobileadmin.fcm.project":"Project: {project} · {email}","mobileadmin.relay":"Use the Zomail relay when no own keys are set","mobileadmin.clear_apns":"Clear the stored .p8 key","mobileadmin.clear_fcm":"Clear the stored service account","mobileadmin.secret.set":"Set {hint} · {who} · {when}","mobileadmin.secret.unset":"Not set","mobileadmin.secret.no_key":"The server has no SESSION_ENCRYPTION_KEY: keys cannot be stored.","mobileadmin.available":"Can send: APNs {apns} · FCM {fcm}","mobileadmin.yes":"yes","mobileadmin.no":"no","mobileadmin.problems":"Check: {list}","mobileadmin.push.save":"Save push settings","mobileadmin.test.title":"Send a test notification","mobileadmin.test.hint":"Goes to the devices signed in to the Zomail app with your account that allow notifications.","mobileadmin.test.submit":"Send a test to my devices","tenantmobile.title":"Mobile app","tenantmobile.hint":"Policy for the organisation's Zomail app. Turning the app off signs every device out at once.","tenantmobile.devices":"{count} devices signed in","tenantmobile.access":"Allow the mobile app","tenantmobile.mfa":"Require 2-step verification to use the app","tenantmobile.preview":"Notification content","tenantmobile.preview.full":"Sender and subject","tenantmobile.preview.minimal":"Only “New message” (private)","tenantmobile.save":"Save policy","deletionreq.title":"Account deletion requests","deletionreq.hint":"Users asked from the app to delete their account. Mailboxes belong to the organisation: delete it (to the trash, restorable during the retention period) or decline.","deletionreq.empty":"No requests.","deletionreq.col.address":"Account","deletionreq.col.when":"When","deletionreq.col.reason":"Reason","deletionreq.col.status":"Status","deletionreq.status.open":"Waiting","deletionreq.status.done":"Deleted","deletionreq.status.dismissed":"Declined","deletionreq.status.canceled":"Withdrawn by the user","deletionreq.kind.tenant_deletion":"Delete the whole organisation (handled by Zomail)","deletionreq.delete":"Delete mailbox","deletionreq.delete.confirm":"Delete the mailbox {address}? It goes to the organisation's trash and can be restored during the retention period.","deletionreq.dismiss":"Decline","adminui.success.revoke-device":"Device removed.","adminui.success.revoke-all-devices":"Every mobile device has been signed out.","adminui.success.set-mobile-policy":"Mobile app policy saved.","adminui.success.resolve-deletion-request":"Request handled.","adminui.success.mobile-app-settings":"App configuration saved.","adminui.success.mobile-push-settings":"Push settings saved.","adminui.success.mobile-push-test":"Sent. Check your device.","adminui.error.no_registered_device":"No device yet: sign in to the Zomail app with this account and allow notifications first.","adminui.error.apns_key_invalid":"Invalid .p8 key: paste the whole file (BEGIN PRIVATE KEY … END PRIVATE KEY).","adminui.error.fcm_account_invalid":"Invalid service account: paste the JSON file downloaded from Firebase.","adminui.error.secrets_key_missing":"The server has no encryption key: secrets cannot be stored.","adminui.error.invalid_flags":"Feature flags must be JSON like {\"name\": true/false}.","adminui.error.device_not_found":"The device is no longer signed in.","adminui.error.deletion_request_not_found":"The request is no longer waiting.","qrlogin.toggle":"Sign in with a QR code","qrlogin.toggle.hide":"Hide the QR code","qrlogin.title":"Scan with the Zomail app","qrlogin.step1":"Open the Zomail app on a phone where you are signed in.","qrlogin.step2":"Tap the QR scan icon (or Settings → Sign in on a computer).","qrlogin.step3":"Point the camera at this code, then confirm on the phone.","qrlogin.alt":"Zomail sign-in QR code","qrlogin.loading":"Creating a code…","qrlogin.countdown":"New code in {seconds} s","qrlogin.scanned":"Scanned on {device}. Confirm on the phone to sign in {account}.","qrlogin.scanned.left":"{seconds} s left to confirm.","qrlogin.approved":"Confirmed — signing you in…","qrlogin.denied":"The sign-in was denied on the phone.","qrlogin.expired":"The code has expired.","qrlogin.retry":"New code","qrlogin.warning":"Only scan the code on a Zomail sign-in page you opened yourself. Never scan a code someone sent you.","qrlogin.error.generic":"Signing in with a QR code did not work. Please try again.","qrlogin.error.network":"Could not reach the mail server.","qrlogin.error.rate_limited":"Too many codes requested. Please try again in a few minutes.","qrlogin.error.qr_unavailable":"QR sign-in is not available on this server.","qrlogin.error.qr_not_found":"The code is not valid — create a new one.","qrlogin.error.qr_expired":"The code has expired — create a new one.","qrlogin.error.qr_used":"This code was already used.","qrlogin.error.qr_already_scanned":"The code was scanned on another device.","qrlogin.error.qr_not_scanned":"Scan the code before confirming.","qrlogin.error.qr_scanned_elsewhere":"The code was scanned on another device.","qrlogin.error.qr_mobile_only":"Only the Zomail phone app can confirm a sign-in.","qrlogin.error.qr_login_disabled":"Your organisation has turned off sign-in with QR codes. Sign in with your password.","qrlogin.error.qr_mfa_required":"2-step verification was turned on after the phone signed in: sign in again on the phone, then scan.","qrlogin.error.qr_device_revoked":"The phone that confirmed was just signed out. Create a new code.","qrlogin.error.mailbox_disabled":"This mailbox is suspended.","qrlogin.error.delegated_session":"A delegated mailbox cannot confirm a sign-in.","qrpage.title":"Open this code in the Zomail app","qrpage.body":"This is a Zomail web sign-in code. Scan it with the Zomail app on a phone where you are signed in (the QR scan icon), or open it with the button below.","qrpage.open":"Open in the Zomail app","qrpage.store_ios":"Get it on the App Store","qrpage.store_android":"Get it on Google Play","qrpage.invalid":"This link does not contain a valid sign-in code.","qrpage.warning":"If someone sent you this code or link, do not confirm it — they may be trying to get into your mailbox.","pwa.description":"Zomail mail, calendar, Drive and meetings.","pwa.shortcut.compose":"Compose","pwa.shortcut.calendar":"Calendar","pwa.install":"Install app","pwa.install.ios.title":"Install Zomail on iPhone/iPad","pwa.install.ios.steps":"In Safari, tap Share (the square with an up arrow), then “Add to Home Screen”. Open Zomail from the new icon to use it as an app and get notifications.","pwa.install.close":"Close","pwa.offline.title":"You are offline","pwa.offline.body":"Zomail needs a connection to load your mail. To protect your privacy, message content is not stored on this device. Check your connection and try again.","pwa.offline.retry":"Try again","webpush.title":"Browser notifications","webpush.hint":"Get notified about new mail even when the Zomail tab is closed (while the browser runs). Each browser is turned on separately; signing out turns that browser's notifications off.","webpush.unsupported":"This browser does not support push notifications.","webpush.ios_install_first":"On iPhone/iPad (iOS 16.4 or later): install Zomail on the Home Screen (Share → Add to Home Screen), open it from that icon, then turn notifications on here.","webpush.denied":"Notifications are blocked for this site. Allow them again in the browser's site settings.","webpush.enable":"Turn on in this browser","webpush.disable":"Turn off in this browser","webpush.enabled":"On in this browser.","webpush.pending":"Working…","webpush.save":"Save choices","webpush.saved":"Saved.","webpush.test":"Send a test notification","webpush.test.sent":"Sent — it appears within a few seconds.","webpush.categories":"Notify me about","webpush.category.newMail":"New mail (Inbox)","webpush.category.meet":"Meetings (invitations, people waiting to join)","webpush.category.security":"Security (new sign-ins)","webpush.preview":"Notification content","webpush.preview.full":"Sender and subject","webpush.preview.minimal":"Only “New message” (no sender or subject)","webpush.preview.forced":"Your organisation only allows “New message”.","webpush.browsers":"Browsers receiving this account's notifications: {count}","webpush.error.generic":"Notifications could not be turned on. Please try again.","webpush.error.webpush_unavailable":"Browser notifications are not available on this server.","webpush.error.webpush_endpoint_not_allowed":"This browser's notification service is not supported.","webpush.error.webpush_not_subscribed":"No browser has notifications turned on for this account.","webpush.error.invalid_subscription":"The browser returned an invalid subscription. Turn notifications off and on again.","webpush.error.delegated_session":"Notifications cannot be turned on for a delegated mailbox; turn them on in your own account.","webpush.error.mailbox_disabled":"This mailbox is suspended.","tenantmobile.qr.title":"Sign-in with QR code","tenantmobile.qr.hint":"Users scan the QR code on the web sign-in page with the (signed-in) Zomail app to open webmail without typing a password. The phone shows the browser, IP and time before they confirm.","tenantmobile.qr.enabled":"Allow web sign-in with a QR code","tenantmobile.qr.save":"Save","adminui.success.set-qr-login-policy":"QR sign-in policy saved.","mobileadmin.applinks.title":"App links (universal links / App Links)","mobileadmin.applinks.hint":"Lets the phone camera open the Zomail app directly when it scans a sign-in QR code. The web server serves /.well-known/apple-app-site-association and /.well-known/assetlinks.json from these values (empty = not served). The app must list this web domain.","mobileadmin.applinks.ios":"iOS app IDs (TeamID.bundle-id, one per line)","mobileadmin.applinks.android_package":"Android package name","mobileadmin.applinks.android_sha256":"SHA-256 fingerprints of the Android signing certificate (AA:BB:…, one per line)","mobileadmin.applinks.source.environment":"Using the environment values (ZOMAIL_IOS_APP_IDS, ZOMAIL_ANDROID_PACKAGE, ZOMAIL_ANDROID_CERT_SHA256).","mobileadmin.applinks.save":"Save app links","adminui.success.mobile-app-links":"App links saved.","login.forgot":"Forgot password?","forgot.eyebrow":"Zomail Webmail","forgot.title":"Forgot password","forgot.lead":"Enter your mailbox address. If the mailbox has a recovery email, we send a password reset link there.","forgot.email":"Mailbox address","forgot.submit":"Send reset link","forgot.pending":"Sending…","forgot.sent":"If {email} has a confirmed recovery email, a reset link (valid 30 minutes) is on its way there. Check the Spam folder too.","forgot.no_recovery":"No message? The mailbox has no recovery email, or your organisation turned self-service reset off — ask your organisation's administrator to reset the password.","forgot.error.throttled":"Too many requests from this network. Please try again later.","forgot.error.unavailable":"The request could not be sent. Please try again.","forgot.back":"Back to sign-in","reset.title":"Choose a new password","reset.lead":"Mailbox {address}. After the reset, every signed-in device and every app password (Outlook, phones) is signed out.","reset.password":"New password (at least 12 characters)","reset.confirm":"Repeat the new password","reset.code":"2-step verification code","reset.code.hint":"The 6-digit code from your authenticator app, or a recovery code.","reset.submit":"Set new password","reset.pending":"Saving…","reset.done":"{address} has a new password. Sign in again, and update Outlook/phones (create a new app password).","reset.signin":"Sign in","reset.invalid":"The link is invalid, expired or already used.","reset.again":"Request a new link","reset.error.mismatch":"The two passwords do not match.","reset.error.too_short":"The password needs at least 12 characters.","reset.error.password_too_weak":"The password is too easy to guess. Mix upper and lower case, digits and symbols; avoid common words. With a long password only the first 72 bytes are used (an accented letter takes 2–3 bytes), so the beginning must be strong on its own.","reset.error.password_contains_name":"The password must not contain the user's name or e-mail address.","reset.error.password_too_long":"The password can have at most 128 characters.","reset.error.mfa_required":"Enter your 2-step verification code.","reset.error.invalid_mfa_code":"Incorrect code ({attemptsLeft} tries left for this link).","reset.error.unavailable":"The password could not be reset. Please try again.","recovery.title":"Recovery email","recovery.hint":"If you forget your password, the reset link is sent to this address. Use an address outside this mailbox (for example a personal Gmail).","recovery.current":"Recovery email: {address}","recovery.status.verified":"confirmed","recovery.status.pending":"waiting for confirmation","recovery.none":"No recovery email — if you forget your password, only your organisation's administrator can reset it.","recovery.address":"Recovery email address","recovery.password":"Current password","recovery.set":"Send confirmation code","recovery.change":"Change recovery email","recovery.code":"Confirmation code (6 digits, sent to {address})","recovery.verify":"Confirm","recovery.resend":"Send the code again","recovery.remove":"Remove recovery email","recovery.pending":"Working…","recovery.success.sent":"A code was sent to {address}. It is valid for 24 hours.","recovery.success.verified":"Recovery email confirmed.","recovery.success.removed":"Recovery email removed.","recovery.unavailable.platform_staff":"Platform administrator accounts cannot use self-service reset (recover with `zomail-cluster reset-admin` on the server).","recovery.unavailable.tenant_disabled":"Your organisation turned self-service reset off — if you forget your password, ask its administrator.","recovery.unavailable.shared_mailbox":"Shared mailboxes have no password of their own.","recovery.unavailable.suspended":"The mailbox or the organisation is suspended.","recovery.error.wrong_password":"The current password is incorrect.","recovery.error.reauth_throttled":"Too many incorrect passwords. Try again in {minutes} min.","recovery.error.recovery_is_own_address":"Use an address other than this mailbox — when locked out you cannot read mail in it.","recovery.error.code_resend_too_soon":"Please wait {seconds} seconds before sending the code again.","recovery.error.code_send_limit":"Too many codes today. Please try again tomorrow.","recovery.error.invalid_code":"Incorrect code ({attemptsLeft} tries left).","recovery.error.code_expired":"The code has expired — send a new one.","recovery.error.code_attempts_exceeded":"Too many incorrect codes — send a new one.","recovery.error.no_pending_recovery":"No address is waiting for confirmation.","recovery.error.validation_error":"The email address or the code is not valid.","recovery.error.reset_unavailable_platform_staff":"Platform administrator accounts cannot use self-service reset.","recovery.error.reset_unavailable_tenant_disabled":"Your organisation turned self-service reset off.","recovery.error.reset_unavailable_shared_mailbox":"Shared mailboxes have no password of their own.","recovery.error.reset_unavailable_suspended":"The mailbox or the organisation is suspended.","recovery.error.failed":"Could not save. Please try again.","tenant.reset.title":"Self-service password reset","tenant.reset.on":"On: users set a recovery email and reset a forgotten password themselves (with their 2-step verification code when enabled).","tenant.reset.off":"Off: a user who forgets their password asks the organisation's administrator to reset it.","tenant.reset.enable":"Turn self-service reset on","tenant.reset.disable":"Turn self-service reset off","tenant.apppw.title":"Mail apps with 2-step verification on","tenant.apppw.on":"On (recommended): mailboxes with 2-step verification sign in to Outlook, phones and calendar/contacts apps (IMAP, SMTP, CalDAV/CardDAV) with app passwords only — a leaked main password cannot read or send mail. Applies to {count} mailboxes.","tenant.apppw.off":"Off: mail apps still accept the main password even with 2-step verification on ({count} mailboxes). Not recommended.","tenant.apppw.enable":"Require app passwords","tenant.apppw.disable":"Allow the main password","adminui.success.set-password-reset":"Self-service password reset policy saved.","tenant.audit.action.account.password_reset_self":"Password reset by the user (recovery email)","tenant.audit.action.account.password_reset_requested":"Password reset link requested","tenant.audit.action.account.recovery_email_verified":"Recovery email confirmed","tenant.audit.action.account.recovery_email_removed":"Recovery email removed","tenant.audit.action.tenant.self_service_reset":"Self-service password reset policy changed","sitetarget.title":"Backup destinations","sitetarget.lead":"Backups are sent off the server so the data survives if the server fails or is lost. The primary destination holds the restore points used by “Restore one person's mail”, and is the copy Zomail keeps (encrypted) to rebuild the server after a disaster. Other destinations are extra copies: every hour, after the primary backup, the server also backs up to each of them. Each is its own encrypted repository and is checked weekly (2% of the data is read back).","sitetarget.lead.first":"The first destination you add becomes the primary; from then on the server backs up every hour instead of a nightly copy on its own disk.","sitetarget.howto":"To switch destinations safely: add the new one → wait until it shows a completed backup → click “Make primary” → only then remove the old one.","sitetarget.empty":"No external destination yet. The server only keeps nightly copies on its own disk — if that disk fails, the copies are lost too.","sitetarget.owner_only":"Only the organisation owner can change backup destinations.","sitetarget.working":"The server is carrying out a change (usually within about 2 minutes). This page refreshes by itself.","sitetarget.col.name":"Destination","sitetarget.col.where":"Location","sitetarget.col.state":"State","sitetarget.col.last":"Last backup","sitetarget.col.points":"Restore points","sitetarget.col.check":"Weekly check","sitetarget.col.keep":"Kept for","sitetarget.col.actions":"Actions","sitetarget.badge.primary":"Primary","sitetarget.badge.zomail":"Provided by Zomail","sitetarget.kind.s3":"S3 storage","sitetarget.kind.rest":"Backup server","sitetarget.kind.local":"Server's own disk","sitetarget.state.pending":"Setting up…","sitetarget.state.active":"Active","sitetarget.state.failed":"Failed","sitetarget.state.removing":"Removing…","sitetarget.state.removed":"Removed","sitetarget.last.ok":"Succeeded","sitetarget.last.failed":"Failed","sitetarget.last.never":"None yet","sitetarget.check.ok":"Passed","sitetarget.check.failed":"Failed","sitetarget.check.never":"Not checked yet","sitetarget.keep.standard":"Standard","sitetarget.keep.long":"Long","sitetarget.keep.raw":"{hourly} hourly · {daily} daily · {weekly} weekly · {monthly} monthly","sitetarget.keep.label":"How long to keep backups","sitetarget.keep.standard.option":"Standard — last 24 hours, 14 days, 8 weeks, 12 months","sitetarget.keep.long.option":"Long — last 24 hours, 30 days, 26 weeks, 36 months","sitetarget.keep.hint":"Keeping longer uses more space at the destination. “Standard” suits most businesses; choose “Long” if you may need mail back from 2–3 years ago.","sitetarget.promote":"Make primary","sitetarget.remove":"Remove","sitetarget.remove.confirm":"The server stops backing up here. The data already stored there is NOT deleted — delete it yourself in the storage if you no longer need it.","sitetarget.remove.last":"This is the last destination: after removing it, the server goes back to nightly copies on its own disk only.","sitetarget.remove.submit":"Remove this destination","sitetarget.remove.primary_blocked":"To remove the primary, make another destination primary first.","sitetarget.zomail.hint":"To stop using this destination, contact Zomail.","sitetarget.add.s3":"Add S3 storage (Wasabi, AWS, MinIO…)","sitetarget.add.s3.hint":"Any S3-compatible service works: Wasabi, Amazon S3, Backblaze B2, Cloudflare R2, your own MinIO… Use an empty bucket (or folder in a bucket) dedicated to this.","sitetarget.add.rest":"Add a backup server (restic rest-server)","sitetarget.add.rest.hint":"A server running restic rest-server over https. If your backup server is MinIO or another S3-compatible service, use “Add S3 storage” instead.","sitetarget.field.name":"Name","sitetarget.field.name.hint":"So you recognise it, e.g. “Wasabi Singapore”.","sitetarget.field.endpoint":"Service address (endpoint)","sitetarget.field.endpoint.hint":"E.g. s3.ap-southeast-1.wasabisys.com — a port (:9000) is fine, “https://” is not needed.","sitetarget.field.bucket":"Bucket","sitetarget.field.bucket.hint":"A bucket already created at the provider, lowercase, e.g. congty-backup.","sitetarget.field.prefix":"Folder in the bucket (optional)","sitetarget.field.region":"Region (optional)","sitetarget.field.region.hint":"Only some services need it, e.g. ap-southeast-1.","sitetarget.field.access_key":"Access key","sitetarget.field.secret_key":"Secret key","sitetarget.field.secret.hint":"The secret is sent once to the server and is never shown here again.","sitetarget.field.url":"Backup server address","sitetarget.field.url.hint":"Like https://host[:port]/path, e.g. https://backup.congty.vn/zomail.","sitetarget.field.user":"Username (optional)","sitetarget.field.password":"Password (optional)","sitetarget.field.keep":"Kept for","sitetarget.field.kind":"Destination type","sitetarget.field_error":"Check the “{field}” field.","sitetarget.test":"Test connection","sitetarget.add":"Add destination","sitetarget.buttons.hint":"“Test connection” only tries to connect and saves nothing. The result appears under “Change history” below after about 2 minutes.","sitetarget.notice.target_test":"Connection test requested. The server tries it within about 2 minutes — see the result under “Change history”.","sitetarget.notice.target_add":"Request to add the destination sent. The server sets it up within about 2 minutes.","sitetarget.notice.target_promote":"Request to change the primary destination sent. The server carries it out within about 2 minutes.","sitetarget.notice.target_remove":"Request to remove the destination sent. The server carries it out within about 2 minutes; the data already stored there stays.","sitetarget.history":"Destination change history","sitetarget.history.empty":"No changes yet.","sitetarget.col.time":"Time","sitetarget.col.action":"Action","sitetarget.col.target":"Destination","sitetarget.col.status":"Status","sitetarget.col.result":"Result","sitetarget.action.test":"Test connection","sitetarget.action.add":"Add","sitetarget.action.promote":"Make primary","sitetarget.action.remove":"Remove","sitetarget.by":"by {who}","sitetarget.result.reachable_empty":"Connected; the storage is empty — ready to add.","sitetarget.result.added":"Added.","sitetarget.result.added_first_backup_failed":"Added, but the first backup failed. The server tries again at the next backup.","sitetarget.result.promoted":"Made primary.","sitetarget.result.already_primary":"It was already the primary destination.","sitetarget.result.removed":"Removed. The old data is still at that destination.","sitetarget.result.already_removed":"This destination was already removed.","sitetarget.result.repository_exists":"Another backup repository is already there. Use an empty bucket or folder.","sitetarget.result.unreachable":"Could not connect. Check the address, bucket name and access keys.","sitetarget.result.init_failed":"Could not create the backup repository there. Do the keys have write permission?","sitetarget.result.no_snapshot_yet":"Cannot make it primary before it has a completed backup. Wait about an hour and try again.","sitetarget.result.promote_another_first":"The primary cannot be removed while other destinations exist — make another one primary first.","sitetarget.result.invalid_request":"The request was not valid.","sitetarget.result.not_found":"The server does not know this destination.","sitetarget.result.host_runner_not_responding":"The server has not picked up the request (its background runner is not responding). Try again in a few minutes; if it persists, contact Zomail.","sitetarget.result.timeout":"The server did not finish in time. Try again.","sitetarget.result.other":"Result code: {code}","backups.error.too_many_requests":"You sent several requests in a row — wait a few minutes and try again.","backups.error.too_many_targets":"You already have the maximum of 5 destinations. Remove one before adding another.","backups.error.target_exists":"This destination is already in the list.","backups.error.already_primary":"This is already the primary destination.","backups.error.promote_another_first":"The primary cannot be removed while other destinations exist — make another one primary first.","backups.error.zomail_managed":"This destination is provided by Zomail — contact Zomail to stop using it.","backups.error.owner_only":"Only the organisation owner can do this.","sitestore.title":"Backup storage provided by Zomail","sitestore.lead":"When the customer buys extra backup storage, add it here. It is sent to the customer's server automatically within a minute or two and added as an extra destination (or as the primary if the server had none). The customer sees it as “Provided by Zomail” and cannot remove it themselves. Withdrawing removes it from their server; the data in the bucket stays.","sitestore.empty":"No backup storage provided to this server yet.","sitestore.unavailable":"Could not load the backup storage list.","sitestore.col.name":"Storage","sitestore.col.repository":"Location","sitestore.col.quota":"Quota sold","sitestore.col.state":"State","sitestore.col.last":"Last successful backup","sitestore.quota":"{gb} GB","sitestore.state.offered":"Sending to the server…","sitestore.state.applied":"Working on the server","sitestore.state.failed":"Failed on the server","sitestore.state.revoke":"Withdrawing…","sitestore.state.revoked":"Withdrawn","sitestore.site_state":"On the server: {state}","sitestore.field.quota":"Storage the customer bought (GB, optional)","sitestore.field.quota.hint":"For reference against the customer's plan.","sitestore.add":"Add storage for this server","sitestore.add.s3":"S3 storage","sitestore.add.rest":"Backup server (restic rest-server)","sitestore.withdraw":"Withdraw","sitestore.withdraw.confirm":"The customer's server stops backing up here. The data in the bucket is not deleted.","sitestore.withdraw.submit":"Withdraw this storage","sitestore.notice.storage_added":"Added. It is sent to the customer's server within a minute or two.","sitestore.notice.storage_withdrawn":"Withdrawn. The customer's server removes it within a minute or two.","sitestore.error.invalid_request":"The storage settings are not valid — check the fields.","sitestore.error.not_found":"This storage or server was not found.","sitestore.error.forbidden":"You are not allowed to do this.","sitestore.error.generic":"Could not do that ({code}).","promo.admin.title":"Discount programmes","promo.admin.hint":"There are two kinds. Automatic programmes (no code) apply by themselves as soon as an order qualifies, for example 50 mailboxes or more. Promo codes are typed by customers on the pricing page or during signup. Only one programme applies per order — the best one for the customer — on top of the yearly price. Programmes cannot be deleted: deactivate one when it is no longer needed.","promo.admin.readonly":"You can only view. Billing management permission is needed to add or edit programmes.","promo.admin.empty":"No discount programmes yet.","promo.admin.col.name":"Programme","promo.admin.col.code":"Code","promo.admin.col.percent":"Discount","promo.admin.col.conditions":"Conditions","promo.admin.col.validity":"Valid","promo.admin.col.used":"Used / limit","promo.admin.col.status":"Status","promo.admin.automatic":"Automatic","promo.admin.cond.any":"Any order","promo.admin.cond.plans":"Plans: {plans}","promo.admin.cond.min_users":"From {min} mailboxes","promo.admin.cond.cycle.monthly":"Monthly billing only","promo.admin.cond.cycle.yearly":"Yearly billing only","promo.admin.cond.new_only":"New customers only","promo.admin.validity.always":"No time limit","promo.admin.validity.from":"From {date}","promo.admin.validity.until":"Until {date}","promo.admin.unlimited":"unlimited","promo.admin.active":"Active","promo.admin.inactive":"Inactive","promo.admin.edit":"Edit","promo.admin.new":"Add programme","promo.admin.field.code":"Promo code","promo.admin.field.code_hint":"Leave empty for an automatic programme. Letters, digits, - and _ only (3–40 characters); upper-cased automatically.","promo.admin.field.name_vi":"Name (Vietnamese)","promo.admin.field.name_en":"Name (English)","promo.admin.field.percent":"Discount (%)","promo.admin.field.min_users":"Minimum mailboxes","promo.admin.field.max":"Maximum uses","promo.admin.field.max_hint":"Leave empty for no limit.","promo.admin.field.starts":"Starts","promo.admin.field.ends":"Ends","promo.admin.field.dates_hint":"Leave empty for no time limit. Times are in your computer's time zone.","promo.admin.field.plans":"Applies to plans","promo.admin.field.plans_hint":"No plan ticked means all plans.","promo.admin.field.cycles":"Billing cycle","promo.admin.field.cycles_hint":"No cycle ticked means both monthly and yearly.","promo.admin.field.new_only":"New customers only","promo.admin.field.active":"Active","promo.admin.save":"Save programme","promo.admin.notice.promotion_saved":"Discount programme saved.","promo.admin.error.validation_error":"Some details are not valid. Check the code, the discount (more than 0 and less than 100) and the dates (the end must be after the start).","promo.admin.error.promo_code_taken":"Another programme already uses this code.","promo.admin.error.promotion_not_found":"This programme was not found.","promo.admin.error.forbidden":"You are not allowed to edit discount programmes.","promo.admin.error.unreachable":"The server cannot be reached.","promo.admin.error.generic":"Could not save. Please try again.","promo.field.label":"Promo code (optional)","promo.field.placeholder":"e.g. WELCOME","promo.field.apply":"Apply","promo.field.applied":"Code {code} applied.","promo.quote.list":"List price","promo.quote.discount":"{name} (−{percent}%)","promo.quote.saved":"You save {amount}","promo.quote.automatic":"This offer is applied to your order automatically.","promo.quote.not_applied":"The promo code was not applied: {reason}. Your order continues at the regular price.","promo.error.promo_unknown":"This code does not exist","promo.error.promo_inactive":"This code is no longer active","promo.error.promo_not_started":"This code is not valid yet","promo.error.promo_expired":"This code has expired","promo.error.promo_used_up":"This code has been used up","promo.error.promo_not_for_plan":"This code does not apply to this plan","promo.error.promo_min_users":"Not enough mailboxes for this code","promo.error.promo_not_for_cycle":"This code does not apply to this billing cycle","promo.error.promo_new_customers_only":"This code is for new customers only","promo.error.generic":"This code cannot be applied","ux.dialog.confirm":"Confirm","ux.dialog.cancel":"Cancel","ux.dialog.title":"Are you sure?","ux.details":"Technical details","login.email.placeholder":"you@company.com","ux.apps":"Apps","org.search.ignored":"ignored","mailui.bulk.idle":"Select messages to archive, delete, label, snooze…","mailui.select.master":"Select / clear this page","mailui.select.menu":"Select by","mailui.select.all":"All","mailui.select.none":"None","mailui.select.read":"Read","mailui.select.unread":"Unread","mailui.select.starred":"Starred","mailui.select.unstarred":"Unstarred","mailui.select.page_selected.one":"The {count} message on this page is selected.","mailui.select.page_selected.other":"All {count} messages on this page are selected.","mailui.select.all_in_folder.one":"Select the {count} message in {folder}","mailui.select.all_in_folder.other":"Select all {count} messages in {folder}","mailui.select.all_scope.one":"The {count} message in {folder} is selected.","mailui.select.all_scope.other":"All {count} messages in {folder} are selected.","mailui.select.clear":"Clear selection","mailui.pager.range":"{from}–{to} of {total}","mailui.pager.newer":"Newer","mailui.pager.older_short":"Older","mailui.badge.unread.one":"{count} unread message","mailui.badge.unread.other":"{count} unread messages","mailui.badge.drafts.one":"{count} draft","mailui.badge.drafts.other":"{count} drafts","org.search.example.subject":"contract","org.search.example.label":"Customers","org.search.example.phrase":"quarterly report","org.search.example.from":"ann@acme.com","notice.already-trash":"The selected messages are already in Trash. To remove them for good, open Trash and choose “Delete forever”.","notice.already-archive":"The selected messages are already archived.","notice.already-inbox":"The selected messages are already in the Inbox.","notice.moved-trash-partial":"Moved to Trash. Messages that were already in Trash were left there (use “Delete forever” in Trash to remove them).","notice.moved-archive-partial":"Archived. Messages that were already archived were left as they are.","notice.moved-inbox-partial":"Moved to the Inbox. Messages already in the Inbox were left as they are.","mail.confirm.delete_forever":"Delete the selected messages forever? This can’t be undone.","mail.confirm.delete_forever_one":"Delete this message forever? This can’t be undone.","reader.block.button":"Block sender","reader.block.confirm":"Block {sender}? This message is reported as spam and all future mail from this sender goes to Spam. You can unblock them in Settings.","reader.more":"More","reader.more.label":"More actions","reader.snooze":"Snooze until","partner.working":"Working…","partner.status.active":"Active","partner.status.suspended":"Suspended","partner.role.owner":"Owner","partner.role.staff":"Staff","partner.balance.total":"Current balance","partner.balance.parts":"Unpaid statements {unpaid} · accrued, not yet billed {unbilled} (VAT included)","partner.secret.title":"Secret","partner.secret.once":"Shown only this once. Copy it and store it safely now — it cannot be shown again after you leave this page.","partner.secret.api_key":"API key","partner.secret.webhook":"Webhook signing secret","partner.secret.password":"Password","partner.keys.title":"API keys","partner.keys.empty":"No API keys yet.","partner.keys.name":"Key name","partner.keys.name_placeholder":"e.g. CRM production","partner.keys.prefix":"Prefix","partner.keys.created":"Created","partner.keys.last_used":"Last used","partner.keys.live":"Active","partner.keys.revoked":"Revoked {date}","partner.keys.revoke":"Revoke","partner.keys.revoke_confirm":"Revoke key {prefix}…? Every system using it is refused immediately.","partner.keys.create":"Create key","partner.keys.created_title":"New API key","partner.webhooks.title":"Webhooks","partner.webhooks.empty":"No webhooks yet.","partner.webhooks.events":"Events","partner.webhooks.event":"Event","partner.webhooks.last":"Last delivery","partner.webhooks.ok":"Delivered {date}","partner.webhooks.failed":"Failed {date}","partner.customers.name":"Customer","partner.customers.plan":"Plan","partner.customers.users":"Users","partner.customers.status":"Status","partner.customers.ref":"Your reference","partner.customers.created":"Created","partner.customers.empty":"No customers yet.","partner.customers.unfinished":"Setup unfinished — send the create request again to complete it","partner.statements.title":"Statements","partner.statements.empty":"No statements yet.","partner.statements.number":"Statement no.","partner.statements.month":"Month","partner.statements.status":"Status","partner.statements.due":"Due","partner.statement.title":"Statement {number} · {month}","partner.statement.customer":"Customer","partner.statement.retail":"Retail","partner.statement.status.issued":"Awaiting payment","partner.statement.status.paid":"Paid","partner.statement.status.void":"Void","partner.statement.issued_on":"Issued {date}","partner.statement.due_on":"due {date}","partner.statement.paid_on":"paid {date}","partner.charge.period":"Period charge","partner.charge.change":"Mid-period upgrade (prorated)","partner.charge.adjustment":"Adjustment","partner.charge.date":"Recorded","partner.error.generic":"That didn't work. Please try again.","partner.error.unreachable":"Cannot reach the server.","partner.error.partner_support_access_off":"The customer has not allowed its partner to set mailbox passwords. The customer's owner turns on \"Partner support access\" in Admin → Organisation.","partner.error.tenant_owner_only":"Only the organisation's owner can change this.","tenant.partner_access.title":"Partner support access","tenant.partner_access.on":"On: partner {partner} may set new passwords for your organisation's mailboxes (the owners are e-mailed each time).","tenant.partner_access.off":"Off (default): partner {partner} manages your plan and mailboxes but cannot set your mailboxes' passwords.","tenant.partner_access.enable":"Allow the partner to set passwords","tenant.partner_access.disable":"Turn partner support access off","tenant.partner_access.owner_only":"Only the organisation's owner can turn this on or off.","adminui.success.set-partner-access":"Partner support access updated.","adminui.error.tenant_owner_only":"Only the organisation's owner can change this.","partner.error.forbidden":"You do not have permission to do this.","partner.error.admin_session_required":"Your session has expired. Please sign in again.","partner.error.admin_session_idle":"Administration has not been used for a while. Please sign in again.","partner.error.mfa_required":"Turn on 2-step verification for your mailbox to use the partner portal.","partner.error.delegated_scope":"A delegated mailbox cannot use the partner portal. Sign in with your own mailbox.","partner.error.not_partner_member":"This mailbox is not linked to a partner. Ask Zomail to add you to the partner portal.","partner.error.owner_only":"Only the partner's owners can do this.","partner.error.partner_suspended":"The partner account is suspended: you can look but not change anything.","partner.error.partner_api_unavailable":"Partners are not enabled on this server (billing is off).","partner.error.partner_not_found":"Partner not found.","partner.error.platform_only":"Only Zomail can do this.","partner.error.partner_credit_limit":"The credit limit is reached. Pay the open statements before adding customers or users.","partner.error.tenant_not_found":"Customer not found.","partner.error.tenant_deleted":"This customer is being deleted.","partner.error.tenant_suspended":"This customer is suspended.","partner.error.not_partner_billed":"This customer is not billed through a partner.","partner.error.tenant_has_partner":"This organisation already belongs to another partner.","partner.error.tenant_has_direct_billing":"The organisation has unpaid OnePay bills. Settle or cancel them first.","partner.error.plan_required":"The organisation has no plan: choose a plan and the number of users.","partner.error.below_used_seats":"Cannot go below the mailboxes in use ({used}).","partner.error.external_ref_taken":"Your reference is already used by another customer.","partner.error.slug_taken":"This identifier (slug) is taken.","partner.error.free_domain_disabled":"This platform offers no free sub-domains: use the customer's own domain.","partner.error.resume_mismatch":"The unfinished earlier attempt used another domain. Use that domain or another reference.","partner.error.deletion_exists":"This customer already has an open deletion request.","partner.error.deletion_unavailable":"Customer deletion is not configured.","partner.error.confirm_slug_mismatch":"The identifier you typed does not match.","partner.error.mailbox_not_found":"Mailbox not found.","partner.error.mailbox_conflict":"This address already exists.","partner.error.mailbox_not_deletable":"This mailbox cannot be deleted.","partner.error.cannot_delete_owner":"The customer's last owner cannot be deleted.","partner.error.target_platform_admin":"A Zomail administrator's mailbox cannot be changed.","partner.error.target_partner_member":"A partner portal member's mailbox cannot be changed here.","partner.error.shared_mailbox_no_password":"Shared mailboxes have no password.","partner.error.seat_limit_reached":"All users of the plan are in use. Add users first.","partner.error.storage_limit_reached":"The plan's storage is used up. Add storage first.","partner.error.domain_not_found":"Domain not found.","partner.error.domain_not_ready":"The domain is not verified yet.","partner.error.domain_conflict":"This domain is already in use.","partner.error.domain_verification_failed":"The verification TXT record was not found yet. DNS changes can take minutes to hours.","partner.error.statement_not_found":"Statement not found.","partner.error.statement_exists":"This month already has a statement.","partner.error.nothing_to_bill":"Nothing unbilled for this month.","partner.error.month_not_over":"Only a month that is over can be billed.","partner.error.invalid_month":"Invalid month.","partner.error.already_paid":"This statement is already paid.","partner.error.statement_void":"This statement was voided.","partner.error.statement_paid":"A paid statement cannot be voided.","partner.error.reference_required":"Enter the bank transfer reference.","partner.error.key_not_found":"Key not found or already revoked.","partner.error.webhook_not_found":"Webhook not found.","partner.error.invalid_webhook_url":"The webhook URL must be a public https:// address (port 443).","partner.error.webhook_url_private":"The webhook host resolves to an internal address (loopback, private or link-local network). Use a public address.","partner.error.too_many_webhooks":"At most {max} webhooks.","partner.error.member_mailbox_not_found":"No Zomail mailbox has this address.","partner.error.member_of_other_partner":"This mailbox already belongs to another partner.","partner.error.member_not_found":"This mailbox is not a member of the partner.","partner.error.rate_limited":"Too many requests. Please try again in a few minutes.","partner.error.validation_error":"Please check the values.","partner.error.invalid_idempotency_key":"Invalid Idempotency-Key.","partner.error.api_key_required":"API key missing: send Authorization: Bearer <partner API key>.","partner.error.invalid_api_key":"The API key is invalid or revoked — create a new key in the partner portal.","partner.error.idempotency_in_progress":"A request with the same Idempotency-Key is still being processed — wait, then resend.","partner.error.idempotency_key_reused":"This Idempotency-Key was used for a different request — use a new key per request.","partner.error.trash_unavailable":"Mailbox trash is temporarily unavailable. Please try again later.","partners.nav":"Partners","partners.title":"Partners (resellers)","partners.eyebrow":"Partner","partners.lead":"Resellers sell Zomail Cloud at a discount off the retail price and pay afterwards on a monthly statement. They manage their customers through the API or the partner portal.","partners.readonly":"You can only view. Changing partners needs the billing management permission.","partners.unlimited":"Unlimited","partners.never":"Never","partners.unpaid":"{amount} unpaid","partners.terms_days":"Payment terms {days} days","partners.list.title":"Partners","partners.list.hint":"Balance = unpaid statements + charges accrued but not yet billed (VAT included).","partners.list.empty":"No partners yet.","partners.col.name":"Partner","partners.col.status":"Status","partners.col.discount":"Discount","partners.col.credit":"Credit limit","partners.col.balance":"Balance","partners.col.tenants":"Customers","partners.col.last_key_use":"Last API use","partners.create.title":"Add a partner","partners.create.hint":"Then issue an API key and/or add the partner's staff mailboxes to the partner portal.","partners.create.button":"Create partner","partners.field.name":"Partner name","partners.field.contact_email":"Contact e-mail","partners.field.billing_email":"Statement e-mail","partners.field.company":"Company name (on statements)","partners.field.tax_code":"Tax code","partners.field.address":"Address","partners.field.discount":"Discount (%)","partners.field.credit_limit":"Credit limit (₫)","partners.field.credit_limit_hint":"Empty = unlimited.","partners.field.terms":"Payment terms (days)","partners.field.locale":"Language","partners.field.status":"Status","partners.field.note":"Internal note","partners.tab.settings":"Details","partners.tab.keys":"API & webhooks","partners.tab.tenants":"Customers","partners.tab.statements":"Statements","partners.tab.members":"Partner portal","partners.settings.title":"Partner details","partners.settings.hint":"A new discount applies to later periods; charges already recorded do not change. Suspended: the API is refused and the portal is read-only; customers' service keeps running.","partners.settings.save":"Save","partners.keys.hint":"A key is shown once when created; Zomail keeps only its hash. Several keys can be active at once for rotation without downtime.","partners.webhooks.hint":"Partners register webhooks themselves (API or partner portal).","partners.deliveries":"Recent deliveries ({count})","partners.deliveries.attempts":"Attempts","partners.tenants.title":"The partner's customers","partners.tenants.hint":"Customers created by the partner or moved to it. They are charged on the partner's statement, never through OnePay.","partners.assign.title":"Move an existing organisation to the partner","partners.assign.hint":"A paid period that is running stays paid and the partner is charged from the next one; a trial (or no period) starts a partner period at once. Refused while the organisation has unpaid OnePay bills.","partners.assign.tenant":"Organisation","partners.assign.plan":"Plan","partners.assign.keep":"Keep as is","partners.assign.button":"Move to partner","partners.assign.confirm":"Move this organisation to {partner}? From now on the partner is charged.","partners.statements.hint":"Statements are issued automatically on the 1st for the previous month. Mark one paid when the transfer arrives.","partners.statements.unbilled_hint":"Charges accrued but not yet on a statement (before VAT). They go on the statement of the month they were recorded in.","partners.statements.issue_month":"Month","partners.statements.issue":"Issue statement","partners.statements.issue_hint":"Issue a statement by hand for a month that is over (e.g. after voiding a wrong one).","partners.statement.reference":"Bank transfer reference","partners.statement.note":"Note","partners.statement.mark_paid":"Mark as paid","partners.statement.void_note":"Reason","partners.statement.void":"Void statement","partners.statement.void_confirm":"Void statement {number}? Its charges become unbilled again.","partners.members.title":"Partner portal users","partners.members.hint":"The partner's staff sign in to /partner with their Zomail mailbox. Owners also manage API keys and webhooks; staff manage customers.","partners.members.empty":"Nobody yet.","partners.members.mailbox":"Mailbox","partners.members.role":"Role","partners.members.email":"Zomail mailbox address","partners.members.add":"Add","partners.members.add_hint":"A mailbox belongs to one partner only. Add the same address again to change its role.","partners.members.remove":"Remove","partners.members.remove_confirm":"Remove {address} from the partner portal?","partners.notice.partner_created":"Partner created.","partners.notice.partner_saved":"Saved.","partners.notice.key_revoked":"Key revoked.","partners.notice.tenant_assigned":"Organisation moved to the partner.","partners.notice.statement_issued":"Statement issued.","partners.notice.statement_paid":"Payment recorded.","partners.notice.statement_voided":"Statement voided.","partners.notice.member_added":"Added to the partner portal.","partners.notice.member_removed":"Removed from the partner portal.","console.card.licence.title":"Licence","console.card.licence.desc":"Mailboxes allowed, end date, renewal.","promo.admin.field.product":"Applies to","promo.admin.product.cloud":"Zomail Cloud (plans)","promo.admin.product.private":"Private Mail licences","promo.admin.cond.private":"Private Mail","billing.purpose.licence":"Private Mail licence","adminui.error.licence_mailbox_cap":"All mailboxes of the Private Mail licence are used ({used}/{limit}, including the 5 % allowance). Add mailboxes to the licence (Admin → Licence).","adminui.error.licence_expired":"The Private Mail licence ended more than 30 days ago: no new mailboxes until it is renewed (Admin → Licence). Mail keeps working.","adminui.error.licence_revoked":"The Private Mail licence was revoked: no new mailboxes can be created. Please contact Zomail.","lic.nav":"Private licences","lic.admin.title":"Private Mail licences","lic.admin.lead":"Licences for customers' own mail servers, sold per mailbox. Prices and volume discounts are set by Zomail on the Price list tab. Once a customer pays, the licence is issued automatically; when the customer's server is connected to Zomail it receives the licence within minutes.","lic.admin.tab.licences":"Licences","lic.admin.tab.pricing":"Price list","lic.admin.tab.new":"Issue / sell a licence","lic.admin.readonly":"You can only view. Billing management permission is needed to make changes.","lic.admin.signing_missing":"The control plane has no licence signing key (LICENCE_SIGNING_KEY): licences are recorded but have no code to send to the customer's server yet. See docs/private-licence.md.","lic.admin.filter.status":"Status","lic.admin.filter.all":"All","lic.admin.filter.search":"Search (customer, e-mail, id)","lic.admin.filter.apply":"Filter","lic.admin.empty":"No licences yet.","lic.col.customer":"Customer","lic.col.mailboxes":"Mailboxes","lic.col.until":"Ends","lic.col.state":"Status","lic.col.channel":"Channel","lic.col.site":"Server","lic.channel.direct":"Direct","lic.channel.partner":"Partner: {name}","lic.site.none":"Not attached","lic.state.none":"No licence","lic.state.active":"Valid","lic.state.expiring":"Ending soon","lic.state.grace":"Ended — in grace","lic.state.expired":"Ended","lic.state.revoked":"Revoked","lic.cycle.yearly":"Yearly","lic.cycle.monthly":"Monthly","lic.mailboxes.cap":"{max} mailboxes (up to {hard} when over)","lic.pricing.title":"Licence price list","lic.pricing.hint":"Price of one mailbox for one year, excluding VAT. Volume discounts: an order gets the highest tier it reaches. Discount programmes of the \"Private Mail licences\" kind (Billing → Plans) apply on top of the tier price.","lic.pricing.active":"Sell online (public calculator and OnePay checkout)","lic.pricing.year":"Price / mailbox / year (VND)","lic.pricing.monthly":"Sell monthly","lic.pricing.month":"Price / mailbox / month (VND)","lic.pricing.min":"Minimum mailboxes","lic.pricing.max":"Maximum mailboxes per licence","lic.pricing.years":"Longest term per order (years)","lic.pricing.tiers":"Volume discounts","lic.pricing.tiers_hint":"Each row: from how many mailboxes → how many % off. Leave unused rows empty.","lic.pricing.tier_min":"From (mailboxes)","lic.pricing.tier_percent":"Off (%)","lic.pricing.multi_year":"Multi-year discounts","lic.pricing.multi_year_hint":"Each row: from how many years → how many % off (whole numbers), after the volume discount and before discount programmes. Yearly licences only (multi-year renewals included). Leave all rows empty for none.","lic.pricing.multi_year_years":"From (years)","lic.pricing.multi_year_percent":"Off (%)","lic.pricing.features":"Features written into licences","lic.pricing.features_hint":"Feature codes, comma separated (informational).","lic.pricing.save":"Save price list","lic.pricing.updated":"Last updated {date} by {by}.","lic.pricing.example":"Example: {mailboxes} mailboxes × 1 year = {amount} (excl. VAT)","lic.new.issue.title":"Issue a licence without payment","lic.new.issue.hint":"For signed contracts, trials, or money collected another way. The licence is valid at once.","lic.new.order.title":"Create a licence order (bank transfer)","lic.new.order.hint":"Creates an order with a payment link to send to the customer. When the customer pays through the link, or when you press \"Record bank transfer\" in Revenue & plans → Orders (open the order), the licence is issued automatically.","lic.field.customer":"Customer / company name","lic.field.email":"E-mail that receives the licence","lic.field.buyer_type":"Customer type","lic.field.buyer.company":"Company","lic.field.buyer.individual":"Individual","lic.field.tax":"Tax code","lic.field.address":"Invoice address","lic.field.tenant":"Zomail Private customer (optional)","lic.field.tenant_none":"— Not attached —","lic.field.tenant_hint":"Pick a Private-plan customer so the licence reaches their server by itself.","lic.field.mailboxes":"Mailboxes","lic.field.years":"Years","lic.field.cycle":"Cycle","lic.field.months":"Months","lic.field.until":"Until (optional, instead of months)","lic.field.note":"Internal note","lic.field.notify":"Email the new licence code to the customer ({email}). A connected server gets the new code either way.","lic.field.locale":"Language of mails to the customer","lic.field.promo":"Promo code (optional)","lic.new.issue.button":"Issue licence","lic.new.order.button":"Create order and payment link","lic.new.order.created":"Order of {amount} created. Payment link for the customer:","lic.detail.back":"Private licences","lic.detail.summary":"Summary","lic.detail.valid":"Valid","lic.detail.valid_range":"{from} → {until}","lic.detail.grace":"Grace until {date} (the server keeps running, with a warning)","lic.detail.grace_title":"Grace after the end date","lic.detail.cap":"Limit","lic.detail.site":"Customer's server","lic.detail.site_usage":"{used} mailboxes in use · last report {date}","lic.detail.site_unknown":"The server has not reported its mailboxes yet.","lic.detail.token":"Licence code","lic.detail.token_issued":"Signed {date} (key {kid})","lic.detail.token_none":"No code (no signing key configured, or the licence was revoked).","lic.detail.token_show":"Show the code to paste on a server that cannot reach Zomail","lic.detail.manage_link":"Customer's renew / add mailboxes page","lic.detail.renewal":"Renewal order waiting: {amount}","lic.detail.orders":"Orders","lic.detail.orders_empty":"No orders (issued by hand or through a partner).","lic.detail.kind.new":"New","lic.detail.kind.renewal":"Renewal","lic.detail.kind.upgrade":"More mailboxes","lic.detail.revoked":"Revoked {date} by {by}: {reason}","lic.detail.partner_billed":"Sold by a partner: the partner renews it through the API; charges go on the partner's monthly statement.","lic.action.edit":"Edit details / attach a server","lic.action.save":"Save","lic.action.extend":"Extend by hand","lic.action.extend_hint":"Add months, or pick a new end date. A waiting renewal order (if any) is cancelled.","lic.action.extend_button":"Extend","lic.action.renewal_order":"Create a renewal order (payment link)","lic.action.resend":"Send the licence code to the customer again","lic.action.revoke":"Revoke licence","lic.action.revoke_hint":"The customer's server can no longer create new mailboxes. Mail keeps flowing. Cannot be undone.","lic.action.revoke_reason":"Reason","lic.action.revoke_confirm":"Revoke this licence?","lic.notice.pricing_saved":"Price list saved.","lic.notice.issued":"Licence issued.","lic.notice.saved":"Saved.","lic.notice.extended":"Licence extended.","lic.notice.revoked":"Licence revoked.","lic.notice.resent":"The licence code will be mailed to the customer again within minutes.","lic.notice.renewal_order":"Renewal order created.","lic.error.validation_error":"Some details are not valid; please check them.","lic.error.licence_not_found":"Licence not found.","lic.error.licence_sales_closed":"Private Mail licences are not sold online yet. Please contact Zomail for a quote.","lic.error.below_min_mailboxes":"A licence covers at least {min} mailboxes.","lic.error.above_max_mailboxes":"At most {max} mailboxes per licence.","lic.error.invalid_years":"A licence runs 1 to {max} years.","lic.error.monthly_unavailable":"Monthly licences are not sold at the moment.","lic.error.not_an_upgrade":"The new number of mailboxes must be above the current one ({current}).","lic.error.licence_expired":"The licence has ended — renew it before adding mailboxes.","lic.error.licence_revoked":"The licence was revoked.","lic.error.partner_billed":"This licence is managed by a partner; please contact your partner.","lic.error.tenant_not_private":"Licences attach only to Private-plan customers.","lic.error.tenant_not_found":"Customer not found.","lic.error.email_required":"An e-mail is needed to send the licence.","lic.error.reason_required":"Give a reason for revoking.","lic.error.invalid_dates":"The end date must be after the start.","lic.error.invalid_tier":"A volume tier is not valid (from 1 mailbox, more than 0 and less than 100 % off).","lic.error.invalid_multi_year":"A multi-year discount is not valid (2 to {max} years, a whole percentage from 0 to 99).","lic.error.invalid_max_mailboxes":"The maximum must be at least the minimum.","lic.error.monthly_price_required":"Enter the monthly price to sell monthly.","lic.error.licence_signing_unavailable":"The control plane has no licence signing key (LICENCE_SIGNING_KEY).","lic.error.licence_no_token":"The licence has no code yet.","lic.error.payments_unavailable":"Online payment is not available. Please contact Zomail.","lic.error.invalid_tax_code":"The tax code is not valid.","lic.error.platform_only":"You are not allowed to do this.","lic.error.forbidden":"You are not allowed to do this.","lic.error.already_paid":"This term is already paid.","lic.error.licences_unavailable":"Licences are not enabled on this server.","lic.error.unreachable":"The server could not be reached.","lic.error.generic":"That did not work. Please try again.","lic.error.licence_mailbox_cap":"All mailboxes of the licence are used (including the 5 % allowance). Add mailboxes to the licence.","lic.error.site_not_enrolled":"This server is not connected to Zomail.","lic.error.licence_invalid_format":"The licence code is not in the right format.","lic.error.licence_unknown_key":"The licence code was not signed by Zomail (or is a test code).","lic.error.licence_bad_signature":"The licence code's signature is not valid.","lic.error.licence_invalid_claims":"The licence code is not for this server.","lic.error.licence_unbound_expired":"The licence code is not bound to a server and is older than 14 days. Get the code bound to this server from Zomail (a server that can reach Zomail receives it by itself).","lic.error.licence_older":"This server already holds a newer code of the same licence.","lic.error.promo_used_up":"The promo code has just run out of uses. Check the price again, then order.","lic.error.rate_limited":"Too many requests. Please try again in {minutes} minutes.","lic.error.control_plane_only":"This server does not know where the control node is (NODE_CONTROL_MESH_HOST missing). Use the control node, or set it and restart.","lic.error.control_plane_unreachable":"The control node did not answer (licences are served by the control node). Please try again in a few minutes.","lic.error.licence_changed":"The licence changed meanwhile. Reload the page and try again.","lic.error.order_not_found":"Order not found, or the payment link is invalid.","lic.error.order_closed":"This order can no longer be paid.","lic.error.order_expired":"The payment session expired. Please start again.","lic.error.payment_in_progress":"A payment for this order is still open. Finish it in the other tab, or try again in a few minutes.","lic.error.exchange_rate_missing":"There is no exchange rate for this order yet. Try again later or contact Zomail.","lic.error.invalid_return_to":"Invalid return address.","lic.error.invalid_token":"The link is invalid or has expired.","lic.error.invalid_email":"Invalid e-mail address.","lic.error.external_ref_taken":"This reference is already used by another licence.","lic.error.bot_check_failed":"We could not verify your browser. Reload the page and buy again.","lic.error.too_fast":"The form was sent too quickly. Please try again.","lic.error.challenge_expired":"The form expired. Please press Buy again.","lic.error.promo_hold_limit":"Too many open orders from your network or e-mail address use this promo code. Pay or cancel one, or try again in {minutes} minutes.","lic.site.title":"Private Mail licence","lic.site.lead":"The licence sets how many mailboxes this server may create and until when. Ending or going over the limit never interrupts mail.","lic.site.none_title":"This server has no licence yet","lic.site.none_hint":"The licence arrives by itself when the server connects to Zomail. If you received a licence code by e-mail, paste it below.","lic.site.customer":"Licensed to","lic.site.usage":"Mailboxes","lic.site.usage_value":"{used} / {max}","lic.site.usage_hint":"Up to {extra} more mailboxes (5 %) can be created while you buy more.","lic.site.valid_until":"Ends","lic.site.days_left":"{days} days left","lic.site.renew":"Renew now","lic.site.pay":"Pay the renewal","lic.site.manage":"Renew / add mailboxes","lic.site.contact":"Contact Zomail or your partner to renew or add mailboxes.","lic.site.install.title":"Enter a licence code","lic.site.install.hint":"For a server that cannot reach Zomail. The code starts with ZL1. and is checked right here on the server (no Internet needed).","lic.site.install.button":"Install licence code","lic.site.installed":"Licence code installed.","lic.site.token_error":"The stored licence code is not valid ({code}). Paste the latest code again.","lic.site.updated":"Last updated {date}.","lic.banner.near":"{used}/{max} mailboxes of the licence are in use.","lic.banner.over":"{used} mailboxes are in use, above the licence ({max}). Up to {hard} can be created; please add mailboxes to the licence.","lic.banner.full":"All mailboxes of the licence are used ({used}/{max} + 5 %). No new mailboxes can be created until more are bought.","lic.banner.expiring":"The Private Mail licence ends in {days} days ({date}).","lic.banner.grace":"The Private Mail licence ended on {date}. Mail keeps working; {days} days left before the server stops creating new mailboxes.","lic.banner.expired":"The Private Mail licence has ended. The server keeps sending and receiving mail but cannot create new mailboxes until it is renewed.","lic.banner.revoked":"The Private Mail licence was revoked. The server keeps sending and receiving mail but cannot create new mailboxes. Please contact Zomail.","lic.banner.link":"View licence","lic.public.title":"Private Mail pricing","lic.public.lead":"Your own mail server on your own premises. Licensed per mailbox, with volume discounts.","lic.public.mailboxes":"Mailboxes","lic.public.years":"Term","lic.public.years_value":"{years} yr","lic.public.monthly":"1 month","lic.public.per_mailbox_year":"/mailbox/year","lic.public.per_mailbox_month":"/mailbox/month","lic.public.list":"List price","lic.public.tier":"Volume discount from {min} mailboxes (−{percent}%)","lic.public.price_cap":"Priced as {min} mailboxes (volume tier)","lic.public.tiers_title":"Volume discounts","lic.public.tier_row":"From {min} mailboxes: {percent}% off","lic.public.multi_year":"Multi-year −{percent}% ({years}+ years)","lic.public.multi_year_title":"Multi-year discounts","lic.public.multi_year_row":"{years}+ years: {percent}% more off","lic.public.subtotal":"Subtotal","lic.public.vat":"VAT {percent}%","lic.public.total":"Total","lic.public.grace_note":"Go up to 5 % over your mailboxes while you buy more; after the end date everything keeps working for {days} more days.","lic.public.closed":"Private Mail licences are quoted directly. Contact Zomail for a quote.","lic.public.buy_title":"Buy the licence","lic.public.buy":"Pay {amount}","lic.public.buy_hint":"After payment the licence is sent to the e-mail above and installs itself on your Private server once it connects to Zomail.","lic.public.bot_check":"Checking your browser…","lic.public.loading":"Calculating…","lic.public.manage_title":"Licence of {customer}","lic.public.manage_hint":"Renew the licence or add mailboxes. Payment through OnePay; the new licence reaches your server by itself.","lic.public.manage_hint_transfer":"Renew the licence or add mailboxes: create the bill here and pay it by bank transfer. Once Zomail records the payment, the new licence reaches your server by itself.","lic.public.renew_bill":"Create the renewal bill","lic.public.renew_bill_open":"Open the renewal bill","lic.public.upgrade_bill":"Create the bill for more mailboxes","lic.public.transfer_note":"Online payment is off. The bill shows the amount; to pay by bank transfer, contact Zomail with the customer name — the licence updates as soon as the payment is recorded.","lic.public.transfer_note_bank":"Pay by bank transfer: the bill opens its pay page with the account, amount, transfer reference and QR code. The licence updates as soon as the payment is recorded.","lic.public.transfer_open_bill":"Open the bill and transfer details","lic.public.renew":"Renew","lic.public.renew_pending":"A renewal order of {amount} is waiting for payment.","lic.public.upgrade":"Add mailboxes","lic.public.upgrade_to":"New total of mailboxes","lic.public.upgrade_quote":"Charge for the remaining {days}/{total} days: {amount} (incl. VAT)","lic.public.upgrade_button":"Pay and upgrade","lic.public.upgrade_applied":"Licence upgraded, nothing to pay.","lic.public.used":"{used} mailboxes in use","lic.public.contact":"Contact us","pp.nav.portal":"Partner portal","pp.nav.dashboard":"Overview","pp.nav.customers":"Customers","pp.nav.statements":"Statements","pp.nav.developers":"Developers","pp.eyebrow":"Zomail partner portal","pp.title":"Partner portal","pp.mfa_settings":"Turn on 2-step verification","pp.not_member_hint":"This portal is for the staff of Zomail resellers. If you are one, send this mailbox address to Zomail.","pp.suspended_banner":"The partner account is suspended. You can still see customers and statements but cannot change anything. Customers' service keeps running. Contact Zomail to reopen it.","pp.prev":"Previous","pp.next":"Next","pp.range":"{from}–{to} of {total}","pp.dashboard.title":"Overview","pp.dashboard.lead":"You get {discount}% off the retail price. Charges are recorded at the start of each period and collected on a monthly statement.","pp.dashboard.credit_of":"Limit {limit} · {available} available","pp.dashboard.credit_used":"{percent}% of the credit limit used","pp.dashboard.no_limit":"No credit limit","pp.dashboard.accrued":"Accrued this month","pp.dashboard.accrued_hint":"Before {vat}% VAT; billed on the 1st of next month.","pp.dashboard.unpaid":"Unpaid statements","pp.dashboard.terms":"Due {days} days after issue","pp.dashboard.customers_link":"See the list","pp.dashboard.recent":"Recent statements","pp.dashboard.all_statements":"All statements","pp.dashboard.billing_title":"Statement details","pp.dashboard.billing_hint":"Printed on your statements. Contact Zomail to change them.","pp.customers.lead":"The organisations you manage. Each customer is its own Zomail organisation with domains, mailboxes and Drive.","pp.customers.new":"New customer","pp.tenant_status.active":"Active","pp.tenant_status.suspended":"Suspended","pp.tenant_status.trial":"Trial","pp.create.lead":"The customer is set up at once: organisation, domain and administrator mailbox. The first period is charged to your account.","pp.create.company":"Company","pp.create.company_name":"Company name","pp.create.ref_hint":"The customer's ID in your own system (optional, unique).","pp.create.locale":"Customer's language","pp.mailboxes.locale":"Mailbox language","pp.create.plan":"Plan and users","pp.create.estimate":"You pay {amount}/month (partner price, before {vat}% VAT).","pp.create.retail":"retail {amount}/user/month, {discount}% off","pp.create.domain":"Domain","pp.create.domain_kind":"Kind of domain","pp.create.domain_free":"Free domain (….{freeDomain}) — works at once","pp.create.domain_own":"The customer's own domain — needs DNS records","pp.create.free_name":"Name","pp.create.own_name":"Domain","pp.create.own_hint":"After creation the customer page lists the DNS records to add for verification and mail delivery.","pp.create.owner":"Customer's administrator mailbox","pp.create.owner_hint":"This person owns the organisation and signs in to Zomail to manage the customer's users.","pp.create.local_part":"Address","pp.create.display_name":"Display name","pp.create.generate":"Generate a random password (shown once after creation)","pp.create.password_hint":"At least 12 characters, without the name or address.","pp.create.submit":"Create customer","pp.create.creating":"Setting up…","pp.create.charge_note":"The first period is charged as soon as the customer is created.","pp.create.done_title":"Customer created","pp.create.done":"The customer is ready. Administrator mailbox: {address}","pp.create.credentials":"Sign-in details for the customer","pp.create.owner_address":"Address","pp.create.open":"Open the customer","pp.create.another":"Add another customer","pp.customer.deleting":"Deletion of this customer was requested. The subscription stopped and no further charges accrue; Zomail approves and then deletes the data.","pp.customer.seats":"Users in use","pp.customer.mail_storage":"Mail storage allocated","pp.customer.drive":"Drive","pp.customer.of":"of {limit}","pp.customer.period":"Current period ends","pp.customer.since":"since {date}","pp.customer.suspend":"Suspend customer","pp.customer.resume":"Resume customer","pp.customer.suspend_confirm":"Suspend {name}? The customer's users cannot send or receive mail until it is resumed.","pp.customer.resume_confirm":"Resume {name}?","pp.customer.suspend_hint":"Charges keep accruing while a customer is suspended. To stop them, request deletion.","pp.plan.title":"Plan and users","pp.plan.hint":"Preview the charge before applying. More: applies now and the difference for the rest of the period is charged. Less: applies now without a refund; the next period is charged at the new price.","pp.plan.preview":"Preview","pp.plan.none":"Nothing changes.","pp.plan.downgrade":"Applies now; nothing is charged or refunded. Next period: {amount} (before VAT).","pp.plan.upgrade":"The difference for the remaining {days}/{total} days of the period is charged now:","pp.plan.upgrade_next":"The current period is over: the new price applies from the next period.","pp.plan.next_period":"From the next period: {amount}/month (before VAT).","pp.plan.apply":"Apply change","pp.mailboxes.title":"Mailboxes","pp.mailboxes.hint":"A password reset signs out every session and app password; the user is told by e-mail.","pp.mailboxes.empty":"No mailboxes yet.","pp.mailboxes.address":"Mailbox","pp.mailboxes.quota":"Quota","pp.mailboxes.password":"Password","pp.mailboxes.reset":"Reset","pp.mailboxes.reset_confirm":"Reset the password of {address}? A random new password is generated and shown once.","pp.mailboxes.reset_title":"New password","pp.mailboxes.reset_done":"Password reset.","pp.mailboxes.support_off":"This customer has not turned on \"Partner support access\": you cannot set its mailbox passwords. The customer's owner turns it on in Admin → Organisation.","pp.mailboxes.support_on":"The customer allows you to set mailbox passwords. Each reset asks you to confirm again and the customer's owners are e-mailed.","pp.mailboxes.reset_owner_only":"Only the partner account's owners can set customers' mailbox passwords.","pp.mailboxes.new":"Add a mailbox","pp.mailboxes.create":"Create mailbox","pp.mailboxes.created":"Mailbox created.","pp.mailboxes.created_title":"New mailbox","pp.mailboxes.domain":"Domain","pp.mailboxes.quota_mb":"Quota (MB)","pp.mailboxes.password_hint":"Leave empty to generate a random password (shown once).","pp.mailbox_role.owner":"Owner","pp.mailbox_role.admin":"Administrator","pp.mailbox_role.helpdesk":"Helpdesk","pp.mailbox_role.billing":"Billing","pp.mailbox_status.provisioning":"Setting up","pp.mailbox_status.active":"Active","pp.mailbox_status.suspended":"Suspended","pp.mailbox_status.failed":"Failed","pp.domains.title":"Domains","pp.domains.hint":"An own domain needs the DNS records below; Zomail checks regularly, or press Verify once they are added.","pp.domains.name":"Domain","pp.domains.mode.own":"Own domain","pp.domains.mode.free":"Free domain","pp.domains.dns":"DNS records","pp.domains.records_for":"DNS records for {domain}","pp.domains.records_hint":"Add these records at the customer's DNS provider. The status column is a live check.","pp.domains.verify":"Verify","pp.domains.verify_hint":"Needs the verification TXT record; DNS changes can take minutes to hours.","pp.domains.add_label":"Add a domain","pp.domains.add":"Add","pp.domain_status.pending":"Awaiting verification","pp.domain_status.verified":"Verified","pp.domain_status.active":"Active","pp.domain_status.failed":"Failed","pp.dns.type":"Type","pp.dns.name":"Name","pp.dns.value":"Value","pp.dns.purpose.verification":"Verification","pp.dns.purpose.mx":"Incoming mail","pp.dns.purpose.mail_host":"Mail server","pp.dns.purpose.spf":"SPF","pp.dns.purpose.dkim":"DKIM","pp.dns.purpose.dmarc":"DMARC","pp.dns.status.ok":"OK","pp.dns.status.missing":"Missing","pp.dns.status.mismatch":"Wrong value","pp.dns.status.unchecked":"Not checked","pp.delete.title":"Delete customer","pp.delete.hint":"Sends a deletion request: the subscription stops at once (no further charges, data read-only), Zomail approves, then the data is deleted. Deletion cannot be undone.","pp.delete.type_slug":"Type the identifier {slug} to confirm","pp.delete.button":"Request deletion","pp.delete.confirm":"Request deletion of {name}? The subscription stops at once.","pp.statements.lead":"Statements are issued on the 1st of each month for the previous month and paid by bank transfer within {days} days.","pp.statements.unbilled":"Accrued, not yet billed","pp.statements.unbilled_hint":"Goes on next month's statement ({vat}% VAT added).","pp.statements.unbilled_empty":"Nothing.","pp.statement.print":"Print / save as PDF","pp.statement.heading":"Partner statement","pp.statement.period":"Month {month}","pp.statement.issued":"Issued","pp.statement.amount_due":"Amount due: {amount}","pp.statement.not_einvoice":"Internal statement, not a VAT invoice. Zomail issues the e-invoice separately.","pp.dev.lead":"Connect your systems (CRM, shop) to Zomail: create customers, change plans, manage mailboxes and receive events by webhook.","pp.dev.owner_only":"Only the partner's owners can create or revoke API keys and webhooks.","pp.dev.keys_hint":"A key is shown once when created. Use it on your servers only — never in a browser or an app.","pp.dev.webhooks_hint":"Zomail POSTs JSON signed with HMAC-SHA256 (Zomail-Signature header) and retries failures automatically.","pp.dev.webhook_add":"Add webhook","pp.dev.webhook_created":"New webhook","pp.dev.webhook_delete":"Delete","pp.dev.webhook_delete_confirm":"Delete webhook {url}?","pp.dev.quickstart":"Quick start","pp.dev.quickstart_hint":"Call the API from your server with your key. Responses are JSON; amounts are whole VND.","pp.dev.base_url":"API base URL","pp.dev.create_example":"Create a customer (safe to resend thanks to Idempotency-Key):","pp.dev.note_errors":"Errors carry a stable code for your code to handle; message is for developers only.","pp.dev.note_idempotency":"POSTs accept an Idempotency-Key header: resending the same key within 24 hours returns the first result.","pp.dev.note_signature":"Verify webhooks: HMAC-SHA256(secret, t + \".\" + body) against v1 in Zomail-Signature, with t within 5 minutes.","pp.dev.note_rate":"600 requests per minute per key (X-RateLimit-* headers; 429 with Retry-After).","pp.dev.method":"Method","pp.dev.path":"Path","pp.dev.full_docs":"The full reference (Zomail Partner API) comes with your partner account; ask Zomail for the latest version.","pp.notice.changed":"Plan updated.","pp.notice.suspended":"Customer suspended.","pp.notice.resumed":"Customer resumed.","pp.notice.deletion_requested":"Deletion requested.","pp.notice.domain_added":"Domain added. Add the DNS records below, then press Verify.","pp.notice.domain_verified":"Domain verified.","pp.notice.key_revoked":"Key revoked.","pp.notice.webhook_deleted":"Webhook deleted.","meetx.lobby.option":"People outside the organisation wait to be let in (waiting room)","meetx.lobby.title":"Waiting room","meetx.lobby.count":"{count} waiting to join","meetx.lobby.guest":"Guest (no account)","meetx.lobby.admit":"Admit","meetx.lobby.deny":"Deny","meetx.lobby.admit_all":"Admit all","meetx.lobby.waiting":"Waiting for the organiser to let you in…","meetx.lobby.waiting_hint":"Keep this page open. You join as soon as someone admits you.","meetx.lobby.denied":"The organiser did not let you into this meeting.","meetx.lobby.expired":"The request expired or the connection was lost.","meetx.lobby.ask_again":"Ask to join again","meetx.error.lobby_full":"The waiting room is full. Please try again in a few minutes.","meet.error.request_expired":"Your request to join has expired. Ask to join again.","meet.error.not_host":"Only the person who created the meeting can let people in or turn them away.","meetx.error.not_member":"Only people of the organisation can admit participants.","meetx.controls":"Meeting controls","meetx.mic":"Microphone","meetx.mic.aria":"Turn microphone on/off","meetx.mic.choose":"Choose microphone","meetx.camera":"Camera","meetx.camera.aria":"Turn camera on/off","meetx.camera.choose":"Choose camera","meetx.screen.start":"Share screen","meetx.screen.stop":"Stop sharing","meetx.chat":"Chat","meetx.chat.open":"Open chat","meetx.chat.close":"Close chat","meetx.chat.unread.one":"{count} unread message","meetx.chat.unread.other":"{count} unread messages","meetx.chat.title":"In-call messages","meetx.chat.empty":"No messages yet. Messages are only visible to people in the call and are not saved.","meetx.chat.placeholder":"Type a message…","meetx.chat.input":"Message","meetx.chat.send":"Send","meetx.chat.you":"You","meetx.chat.edited":"edited","meetx.chat.send_failed":"Couldn't send the message. Please try again.","meetx.leave":"Leave","meetx.invite.copy":"Copy invite link","meetx.invite.copied":"Copied","meetx.invite.copy_failed":"Couldn't copy — copy it manually: {url}","meetx.start_audio":"Click to enable meeting audio","meetx.state.connecting":"Connecting…","meetx.state.reconnecting":"Connection lost, reconnecting…","meetx.state.disconnected":"Disconnected","meetx.error.connect":"Couldn't reach the video meeting server. Check your connection and try again.","meetx.retry":"Try again","meetx.dismiss":"Dismiss","meetx.device.camera":"camera","meetx.device.microphone":"microphone","meetx.device.both":"camera and microphone","meetx.device.denied":"Your browser is blocking access to your {device}. Click the lock (or camera) icon at the left of the address bar, choose \"Allow\" for Camera and Microphone, then reload the page. On macOS, also check System Settings → Privacy & Security.","meetx.device.not_found":"No {device} was found. Plug one in or check your computer's audio/video settings, then try turning it on again.","meetx.device.in_use":"Your {device} is being used by another app. Close that app and try again.","meetx.device.other":"Couldn't turn on your {device}. Please try again or pick another device.","meetx.device.screen":"Screen sharing didn't start. If you didn't cancel it yourself, allow your browser to record the screen (on macOS: System Settings → Privacy & Security → Screen Recording).","meetx.delete":"Delete","meetx.delete.aria":"Delete meeting {title}","meetx.delete.confirm":"Delete the meeting \"{title}\"? Its join link will stop working.","meetx.delete.done":"Meeting deleted.","meetx.delete.failed":"Couldn't delete the meeting. Please try again later.","meetx.error.meet_unavailable":"Video meetings are temporarily unavailable. Please try again later.","meetx.error.storage_unavailable":"Couldn't reach the server. Please try again later.","nav.chat":"Chat","chat.title":"Chat","chat.disabled":"Chat is not turned on for your organisation.","chat.connecting":"Connecting…","chat.reconnecting":"Connection lost, retrying…","chat.error.load":"Chat could not be opened. Try reloading the page.","chat.rooms":"Conversations","chat.no_rooms":"No conversation yet. Start a new one.","chat.new_dm":"Message","chat.new_group":"New group","chat.search_people":"Find colleagues by name or address","chat.no_people":"Nobody found.","chat.group_name":"Group name","chat.selected":"Selected: {count}","chat.create":"Create","chat.cancel":"Cancel","chat.select_room":"Choose a conversation on the left.","chat.composer":"Write a message","chat.send":"Send","chat.attach":"Attach a file","chat.uploading":"Uploading {name}…","chat.upload_failed":"The file could not be uploaded.","chat.quota":"Your mailbox is full: chat files count toward your mailbox storage.","chat.search":"Search chat","chat.search_placeholder":"Search messages","chat.search_none":"No message matches.","chat.search_close":"Close search results","chat.leave":"Leave conversation","chat.leave_confirm":"Leave this conversation?","chat.members":"Members ({count})","chat.add_people":"Add people","chat.remove":"Remove from group","chat.notify.enable":"Turn on notifications","chat.notify.title":"New message from {name}","chat.file":"File","chat.download":"Download","chat.you":"You","chat.unread":"{count} unread","chat.load_older":"Load older messages","chat.direct":"Direct message","chat.group":"Group","chat.error.not_same_tenant":"You can only chat with people of your organisation.","chat.error.chat_disabled":"Chat is turned off for your organisation.","chat.error.invalid_members":"The list of people is not valid.","chat.error.not_room_admin":"Only the group's creator can remove other people.","chat.error.length_required":"The file could not be sent: its size was missing. Try again.","chat.error.synapse_unavailable":"The chat server is not answering right now.","chat.error.unknown":"Something went wrong. Try again.","chat.error.chat_unavailable":"Chat is not running on this server.","chat.error.synapse_error":"The chat server refused the request. Try again later.","pim.calendar.day_events.one":"{count} event","pim.calendar.day_events.other":"{count} events","pim.calendar.day_no_events":"No events","pim.event.when":"When","pim.event.organizer":"Organizer","pim.event.attendees":"Guests","pim.event.attendee_count.one":"{count} guest","pim.event.attendee_count.other":"{count} guests","pim.event.join":"Join meeting","pim.event.edit":"Edit","pim.event.edit_title":"Edit event","pim.event.save":"Save changes","pim.event.saving":"Saving…","pim.event.close":"Close","pim.event.deleting":"Deleting…","pim.event.delete_confirm":"Delete the event “{title}”? If you organised it, guests will get a cancellation.","pim.event.deleted":"Event deleted.","pim.event.saved":"Changes saved.","pim.event.saved_notified":"Changes saved and an updated invitation was sent to the guests.","pim.event.saved_not_notified":"Changes saved, but the updated invitation could not be sent to the guests.","pim.event.attendees_will_be_notified":"Guests will get an updated invitation when you save.","pim.event.recurring_readonly":"Recurring events can only be edited or deleted in the calendar app that created them.","pim.event.not_organizer_hint":"You were invited to this event, so you can't edit it; only the organizer can.","pim.error.offline":"Couldn't reach the server. Please try again.","pim.error.invitation_organizer_changed":"Your calendar already has an event with this ID from a different organizer, so this invitation wasn't added. Check who sent it.","pim.error.invitation_not_verified":"This cancellation does not come from the event's organizer (or could not be authenticated), so the event was not removed.","pim.error.not_a_cancellation":"This message is not an event cancellation.","pim.error.recurrence_too_frequent":"This invitation repeats too often (every second/minute/hour without an end) to be added to the calendar. You can still decline it.","pim.error.signed_out":"Your session has expired. Please sign in again.","pim.error.edit_unavailable":"The server doesn't support editing events yet. Please try again later.","pim.error.update_failed":"Couldn't save the changes.","pim.error.delete_failed":"Couldn't delete the event.","pim.error.event_not_found":"Event not found — it may have just been deleted on another device.","pim.error.not_organizer":"Only the organizer can edit this event.","pim.error.recurring_not_editable":"Recurring events can't be edited here yet.","pim.error.calendar_unavailable":"The calendar service is temporarily unavailable. Please try again later.","pim.error.invalid_uid":"Invalid event ID.","pim.error.end_before_start":"The end must be after the start.","pim.error.sending_unavailable":"Invitations couldn't be sent because sending isn't available yet.","pim.form.fix_errors":"Please fix the highlighted fields below.","pim.field.required":"Please fill this in.","pim.field.too_long":"This is too long.","pim.field.invalid":"Invalid value.","pim.field.format_invalid":"Invalid format.","pim.field.email_invalid":"Invalid email address.","pim.field.email_invalid_value":"“{value}” is not a valid email address.","pim.field.phone_invalid":"Phone numbers may only contain digits, spaces and + ( ) . -","pim.field.phone_invalid_value":"“{value}” is not a valid phone number (digits, spaces and + ( ) . - only).","pim.field.end_before_start":"The end time must be after the start time.","pim.field.nothing_to_update":"Nothing to change.","pim.contacts.delete_confirm":"Delete the contact “{name}”? It also disappears from synced phones.","pim.contacts.delete_label":"Delete {name}","pim.contacts.edit":"Edit","pim.contacts.edit_label":"Edit {name}","pim.contacts.edit_title":"Edit contact","pim.contacts.save":"Save changes","pim.contacts.cancel":"Cancel","pim.contacts.saved":"Contact updated.","pim.contacts.reload":"Reload contact","pim.contacts.load_failed":"Couldn't load the contact for editing. Please try again.","pim.error.contact_changed":"This contact was changed elsewhere (on a phone or in another app). Reload it to see the latest version, then make your changes again.","pim.error.event_changed":"This event was changed elsewhere (on a phone or in another app). Reload it to see the latest version, then make your changes again.","pim.error.contact_not_found":"Contact not found — it may have just been deleted on another device.","pim.error.precondition_failed":"The event was just changed elsewhere. Reload the calendar and edit again.","pim.reminder.label":"Reminders","pim.reminder.none":"No reminder","pim.reminder.at_start":"At the start of the event","pim.reminder.minutes.one":"{count} minute before","pim.reminder.minutes.other":"{count} minutes before","pim.reminder.hours.one":"{count} hour before","pim.reminder.hours.other":"{count} hours before","pim.reminder.days.one":"{count} day before","pim.reminder.days.other":"{count} days before","pim.reminder.max.one":"Up to {count} reminder.","pim.reminder.max.other":"Up to {count} reminders.","pim.showas.label":"Show as","pim.showas.busy":"Busy","pim.showas.free":"Free","pim.color.label":"Colour","pim.color.none":"No colour","pim.color.red":"Red","pim.color.orange":"Orange","pim.color.yellow":"Yellow","pim.color.green":"Green","pim.color.teal":"Teal","pim.color.blue":"Blue","pim.color.purple":"Purple","pim.color.gray":"Grey","pim.color.custom":"Current colour ({value})","pim.event.personal_title":"Your settings for this event","pim.event.personal_hint":"You were invited to this event, so you can only change reminders, busy/free and colour. These settings apply to your calendar only and are not sent to anyone.","pim.event.recurring_personal_hint":"Recurring event: only reminders, busy/free and colour can be changed here.","pim.event.personal_settings":"Reminders, colour…","pim.event.you":"you","pim.partstat.accepted":"Accepted","pim.partstat.declined":"Declined","pim.partstat.tentative":"Tentative","pim.partstat.needs_action":"No response yet","pim.partstat.delegated":"Delegated","pim.tasks.sync_hint":"The “Tasks” list also shows up in Reminders (iPhone), Thunderbird and Tasks.org via CalDAV. The server address is in Settings → “Use with Outlook, Thunderbird and phones” (Calendar & contacts row).","pim.tasks.sync_link":"Open Settings","pim.tz.search":"Search time zones","pim.tz.search_placeholder":"Search a city or UTC+7…","pim.tz.no_match":"No matching time zone.","pim.tz.shown_in":"Times shown in {zone}","pub.drive.notice.folder_created":"Folder created.","pub.drive.notice.renamed":"Renamed.","pub.drive.notice.trashed":"Moved to trash. You can restore it from Trash.","pub.drive.notice.restored":"Restored.","pub.drive.notice.purged":"Deleted permanently.","pub.drive.notice.version_restored":"The older version is now the current version.","pub.drive.notice.version_uploaded":"New version uploaded.","pub.drive.notice.share_revoked":"Access removed.","pub.drive.notice.dismiss":"Dismiss","pub.drive.purge.title":"Delete forever?","pub.drive.preview.text":"File contents","pub.drive.preview.truncated":"Showing the first {size} only. Download the file to see all of it.","pub.drive.preview.failed":"The preview could not be loaded. You can still download the file.","pub.drive.preview.empty":"The file is empty.","pub.drive.usage.valuetext":"{used} of {total} used ({percent}%)","pub.notfound.code":"Error 404","pub.notfound.title":"Page not found","pub.notfound.body":"The page you are looking for does not exist, has moved, or the link has expired. Check the address, or go to one of the pages below.","pub.notfound.mail":"Open Mail","pub.notfound.drive":"Open Drive","pub.notfound.home":"Home","pub.notfound.status":"System status","pub.notfound.pricing":"Pricing","pub.error.title":"Something went wrong","pub.error.body":"This page ran into an unexpected error. Try again; if it keeps failing, go back to the home page or check the system status.","pub.error.code":"Reference: {code}","pub.error.retry":"Try again","pub.error.home":"Go to home page","pub.status.history.none_probes":"No incidents were posted in the last 90 days. Short interruptions detected by automated checks are shown in the bars above.","pub.status.history.none_resolved":"No resolved incidents in the last 90 days. Ongoing incidents are listed above.","pub.status.localtime":"Times are shown in your time zone.","pub.billing.none.title":"No payment to show","pub.billing.none.body":"This page shows the result after you pay through OnePay. The link you opened does not include an order.","pub.billing.none.hint":"If you have just paid, open the link from the e-mail again or check the status on your administrator's billing page.","dlv.out.nav":"Outbound spam check","dlv.out.eyebrow":"Deliverability","dlv.out.title":"Outbound spam check","dlv.out.lead":"Mail sent outside the organisation is scored by Rspamd before it is queued. A high score holds the message for review, a very high one refuses it. Also complaint and bounce rates per customer and per relay, and quarantined customers.","dlv.out.back":"Outbound spam check","dlv.out.summary":"Summary","dlv.out.tile.held":"Waiting for review","dlv.out.tile.held_value":"{count} held in the last 24 hours","dlv.out.tile.rejected":"Refused (24 h)","dlv.out.tile.passed":"Scored and sent (24 h)","dlv.out.tile.scanner":"Spam scanner","dlv.out.scanner.ok":"Working","dlv.out.scanner.down":"{count} failures in 24 h","dlv.out.scanner.down_hint":"While the scanner fails, mail is sent without a score. Last failure: {time}","dlv.out.scanner.not_configured":"Not configured","dlv.out.scanner.not_configured_hint":"No Rspamd for outbound mail: mail sent outside is not scored.","dlv.out.scanner.disabled":"Off","dlv.out.scanner.disabled_hint":"The outbound spam check is turned off (OUTBOUND_SPAM_CHECK=off).","dlv.out.config.title":"Thresholds","dlv.out.config.lead":"Set by server environment variables (OUTBOUND_SPAM_*), not here.","dlv.out.config.hold":"Hold for review from score","dlv.out.config.reject":"Refuse from score","dlv.out.config.retention":"Held messages expire after","dlv.out.config.days":"{days} days","dlv.out.held.title":"Messages waiting for review","dlv.out.held.lead":"Messages the scanner held. Release a normal message; reject spam. The sender gets an e-mail either way. Messages not reviewed within {days} days expire.","dlv.out.held.none":"No message is waiting for review.","dlv.out.col.message":"Message","dlv.out.col.tenant":"Customer","dlv.out.col.score":"Score","dlv.out.col.reasons":"Reasons","dlv.out.col.recipients":"Recipients","dlv.out.col.age":"Sent at","dlv.out.col.actions":"Actions","dlv.out.recipients":"{count} ({external} external)","dlv.out.no_subject":"(no subject)","dlv.out.source.webmail":"Webmail / API","dlv.out.source.smtp":"SMTP","dlv.out.source.scheduled":"Scheduled send","dlv.out.open":"Details","dlv.out.release":"Release","dlv.out.reject":"Reject","dlv.out.release_confirm":"Deliver this message to its recipients? The sender is told it was approved.","dlv.out.reject_confirm":"Reject this message? It is not sent and the sender is told.","dlv.out.reason.score":"Spam score {a} (threshold {b})","dlv.out.reason.symbol":"Rule {a}","dlv.out.reason.test_pattern":"Test pattern ({a})","dlv.out.consent.yes":"Organisation allows body review","dlv.out.consent.no":"No body review consent","dlv.out.detail.title":"Held message","dlv.out.detail.status":"Status","dlv.out.detail.sender":"Sender","dlv.out.detail.source":"Sent via","dlv.out.detail.headers":"Headers","dlv.out.detail.headers_hint":"Only a safe list of headers is shown; never To/Cc, only the recipient domains.","dlv.out.detail.domains":"Recipient domains","dlv.out.detail.domain_count":"{count} recipients","dlv.out.detail.symbols":"Rspamd rules matched","dlv.out.detail.symbols_none":"No rules were recorded.","dlv.out.detail.body":"Message body","dlv.out.detail.body_hint":"Available only when the sender's organisation has allowed it. Every view is recorded in the audit log.","dlv.out.detail.view_body":"View body","dlv.out.detail.truncated":"The body is long; only the beginning is shown.","dlv.out.detail.done":"This message has already been handled.","dlv.out.status.held":"Waiting for review","dlv.out.holds.title":"Mailboxes on a sending hold","dlv.out.holds.lead":"Mailboxes whose sending is paused (possibly compromised, sudden bursts…). Release them in Operations once the password was reset.","dlv.out.holds.none":"No mailbox is on a sending hold.","dlv.out.holds.automatic":"Automatic","dlv.out.holds.manual":"Set by {by}","dlv.out.holds.reset_yes":"Password reset since the hold","dlv.out.holds.reset_no":"Password not reset yet","dlv.out.holds.manage":"Release in Operations","dlv.out.tenants.title":"Complaints and bounces per customer","dlv.out.tenants.lead":"Last {hours} hours. A customer above {complaint} complaints or {bounce} hard bounces (with at least {min} messages sent) is moved automatically to the quarantine relay pool.","dlv.out.tenants.none":"No mail went through a relay in this period.","dlv.out.col.sent":"Sent","dlv.out.col.bounces":"Bounces","dlv.out.col.complaints":"Complaints","dlv.out.col.bounce_rate":"Bounce rate","dlv.out.col.complaint_rate":"Complaint rate","dlv.out.quarantined":"Quarantined","dlv.out.quarantine":"Quarantine","dlv.out.quarantine_confirm":"Move all of {tenant}'s outbound mail to the quarantine relay pool?","dlv.out.relays.title":"Relays","dlv.out.relays.lead":"Complaint and bounce rates per relay over the same period. Amazon SES pauses an account at roughly 0.1 % complaints or 5 % bounces.","dlv.out.relays.none":"No relays yet.","dlv.out.col.relay":"Relay","dlv.out.col.pool":"Pool","dlv.out.col.health":"Health","dlv.out.health.healthy":"Healthy","dlv.out.health.unknown":"Not checked yet","dlv.out.health.failing":"Failing","dlv.out.quarantine.title":"Quarantined customers","dlv.out.quarantine.lead":"These customers' outbound mail only uses the relay pool marked \"quarantine\" (none: straight to the receiving servers), so the shared relays keep their reputation.","dlv.out.quarantine.none":"No customer is quarantined.","dlv.out.col.reason":"Reason","dlv.out.col.since":"Since","dlv.out.quarantine.direct":"Direct to MX (no quarantine pool)","dlv.out.quarantine.release":"Release","dlv.out.quarantine.release_confirm":"Move {tenant}'s outbound mail back to its normal relay pool?","dlv.out.qreason.complaint_rate":"Complaints {a}% (limit {b}%)","dlv.out.qreason.bounce_rate":"Bounces {a}% (limit {b}%)","dlv.out.qreason.manual":"Quarantined manually","dlv.out.ses.title":"Amazon SES notifications","dlv.out.ses.lead":"SES bounces and complaints arrive through Amazon SNS at the address below. Subscribe it (HTTPS) to the SES bounce/complaint topics.","dlv.out.ses.endpoint":"Endpoint","dlv.out.ses.topics":"Topics accepted","dlv.out.ses.topics_none":"No topic configured (SES_SNS_TOPIC_ARNS): the endpoint refuses every notification.","dlv.out.ses.last":"Last notification","dlv.out.ses.count24":"Last 24 hours","dlv.out.never":"never","dlv.out.notice.released":"Released: the message is queued for delivery.","dlv.out.notice.rejected":"Message rejected; the sender will be told.","dlv.out.notice.quarantined":"The customer was moved to the quarantine relay pool.","dlv.out.notice.unquarantined":"The customer is no longer quarantined.","dlv.out.error.not_found":"Message or customer not found (it may already have been handled).","dlv.out.error.forbidden":"Your account can view this page but not act on it.","dlv.error.held_body_consent_required":"The sender's organisation has not allowed Zomail staff to read held messages. Decide from the headers, recipient domains and spam score, or ask the customer to allow it on their organisation page.","dlv.error.held_not_pending":"Someone else already released or rejected this message (or it expired).","dlv.error.quarantine_not_found":"This customer is no longer quarantined.","ops.reason.fanout":"Sent to {a} new external recipients in 1 hour (limit {b})","ops.reason.unknown_users":"{a}/{b} recent recipients do not exist (5.1.x bounces in 2 hours)","ops.reason.spam_spike":"{a} messages held or refused by the spam check in 1 hour (limit {b})","ops.reason.new_network":"Signed in from an unfamiliar network, then sent to {a} external recipients within {b} minutes","ops.reason.identical":"The same message sent separately to {a} recipients in 1 hour (limit {b})","ops.holds.reset_first":"Automatic hold (possibly compromised account): reset this mailbox's password first, then release it here.","ops.holds.reset_link":"Reset password","ops.holds.release_confirm":"Release sending for {address}","ops.error.hold_password_reset_required":"Not released: the mailbox password has not been changed since the hold. Reset the password first (mailbox page), check the devices, then release again.","tenant.outbound_consent.title":"Allow review of messages held as possible spam","tenant.outbound_consent.hint":"When the anti-spam check holds a message your organisation sends, Zomail staff review it from its headers and spam score. Turn this on to let them read the body of that held message too (every view is logged). Other mail is not affected.","tenant.outbound_consent.on":"On: Zomail staff may read the body of a held message to review it.","tenant.outbound_consent.off":"Off: Zomail staff see only the headers and spam score of a held message.","tenant.outbound_consent.enable":"Allow","tenant.outbound_consent.disable":"Withdraw","tenant.outbound_consent.updated":"Last changed {time} by {by}","tenant.outbound_consent.admin_only":"Only the organisation's owner or administrators can change this.","adminui.success.set-outbound-consent":"Saved.","outbox.held":"Your message is being held for review by the anti-spam check. It is sent if a reviewer releases it; either way you will get an e-mail telling you the outcome.","outbox.status.held":"Held for review","sendx.error.message_rejected_spam":"The message was not sent: the anti-spam check rated it as spam or found a dangerous link or attachment. Review its content, links and attachments.","sendx.error.outbound_spam_rejected":"Not sent: the anti-spam check refused this message.","sendx.error.held_expired":"Not sent: the message waited too long for review and expired.","ops.pb.action.outbound":"Outbound spam check","ops.pb.action.quarantine":"Quarantined customers","ops.alert.outbound.scanner_down":"The outbound spam scanner could not score {count} messages (sent without a check)","ops.alert.outbound.held_queue":"{held} messages waiting for spam review (oldest waiting {oldestMinutes} minutes)","ops.alert.relayrep.quarantined":"Customer {tenant} moved to the quarantine relay pool: {reason}","ops.alert.relayrep.relay":"Relay {name}: complaints {complaintRate}, bounces {bounceRate} — close to the SES limits","ops.pb.outbound.scanner_down.cause":"Rspamd did not answer when scoring outbound mail: the service stopped, is overloaded, or the network between the Control API and Rspamd fails.","ops.pb.outbound.scanner_down.impact":"Mail is still sent (customers are not blocked) but without a spam check — a compromised account could spread spam without being held.","ops.pb.outbound.scanner_down.steps":"Open the logs, filter on rspamd, look for connection errors or timeouts.\nCheck the server running Rspamd in Infrastructure; restart the service if needed.\nMeanwhile watch the mailboxes on sending hold and the complaints per customer.\nThe alert closes by itself once the scanner scores mail again.","ops.pb.outbound.held_queue.cause":"The spam check held messages and nobody has reviewed them yet.","ops.pb.outbound.held_queue.impact":"Senders are waiting: their mail has not reached the recipients. Messages not reviewed in time expire and are not sent.","ops.pb.outbound.held_queue.steps":"Open the Outbound spam check and review each message: score, Rspamd rules, headers, recipient domains.\nA normal message: Release. Spam or phishing: Reject.\nMany held messages from one mailbox: check whether the account is compromised, hold its sending and have the password reset.","ops.pb.relayrep.quarantined.cause":"This customer's complaint or bounce rate passed the limit over the window: old or bought lists, a compromised account, or marketing without unsubscribe.","ops.pb.relayrep.quarantined.impact":"The customer's outbound mail now uses the quarantine pool (or goes direct), may be slower or land in spam more often; the shared relays are protected.","ops.pb.relayrep.quarantined.steps":"Open the customer and trace recent outbound mail: who sent what to whom.\nIf an account is compromised: hold its sending, reset the password, revoke sessions.\nAsk the customer to clean their recipient lists.\nOnce the rates are down, release the quarantine on the Outbound spam check page.","ops.pb.relayrep.relay.cause":"The complaint or bounce rate on this relay (e.g. Amazon SES) is getting close to the level at which the provider pauses the account.","ops.pb.relayrep.relay.impact":"Past the limit the relay provider may pause sending — every customer's mail through this relay is affected.","ops.pb.relayrep.relay.steps":"Open the Outbound spam check and find the customers with the highest rates on this relay.\nQuarantine them (or hold the compromised mailbox).\nCheck the relay provider's console (SES: Reputation metrics).\nConsider disabling the relay for a while or moving traffic to another relay.","sec.nav":"Mail security","sec.title":"Mail security","sec.lead":"Anti-phishing for mail coming into the organisation: policy, reported messages, quarantine, blocked links and mail removed after delivery.","sec.panel.hint":"Anti-phishing policy, messages your people reported, the quarantine and blocked link clicks.","sec.panel.open":"Open mail security","sec.back":"Mail security","sec.link.antiphish":"Anti-phishing policy","sec.link.antiphish.hint":"Switch each protection on or off, names and domains to protect, the organisation's allow / block list.","sec.link.reported":"Reported phishing","sec.link.reported.hint":"Messages your people reported as phishing; see the evidence and remove them from every mailbox.","sec.link.quarantine":"Quarantine","sec.link.quarantine.hint":"Almost-certain spam / phishing held back instead of delivered. Release or delete.","sec.link.clicks":"Blocked and warned links","sec.link.clicks.hint":"Who clicked a dangerous link, which links were blocked and who continued anyway.","sec.link.zap":"Removed after delivery","sec.link.zap.hint":"Messages automatically taken out of the Inbox when they were found dangerous after delivery.","sec.count.reports_new":"{count} new reports","sec.count.quarantine_held":"{count} messages held","sec.count.release_requested":"{count} release requests","sec.state.on":"On","sec.state.off":"Off","sec.tenant_only":"Only the organisation's own owners and administrators can see this page, because it shows the organisation's mail. Zomail staff can't.","sec.api_down":"The mail security service didn't answer. Please try again in a few minutes.","sec.done":"Saved.","sec.none":"—","sec.col.at":"When","sec.col.mailbox":"Mailbox","sec.col.sender":"Sender","sec.col.subject":"Subject","sec.col.status":"Status","sec.col.received":"Received","sec.filter":"Filter by status","sec.filter.apply":"Filter","sec.filter.all":"All","sec.no_subject":"(no subject)","antiphish.title":"Anti-phishing policy","antiphish.lead":"Applies to every mailbox of the organisation. By default it only adds the “External” tag and checks links when they are clicked; normal mail is not affected.","antiphish.readonly":"You can view this policy. Only the organisation's owners and administrators can change it.","antiphish.saved":"Policy saved.","antiphish.updated":"Last changed {time} by {by}.","antiphish.save":"Save policy","antiphish.section.external":"External senders","antiphish.external_tag":"Tag mail from outside the organisation as “External”","antiphish.external_tag.hint":"Readers see an “External” tag and a note the first time someone writes to them.","antiphish.external_subject":"Also add a prefix to the subject of external mail","antiphish.external_subject.hint":"The prefix is written into the subject at delivery, so Outlook and phones (IMAP) see it too.","antiphish.subject_prefix":"Subject prefix","antiphish.subject_prefix.hint":"1–20 ASCII characters, e.g. [EXTERNAL].","antiphish.section.links":"Links in messages","antiphish.click_protection":"Check links when people click them","antiphish.click_protection.hint":"Every click is checked against phishing / malware lists; dangerous links are blocked, suspicious ones show a warning.","antiphish.click_override":"Let people open a blocked link anyway","antiphish.click_override.hint":"When off, nobody can get past the block page; every “continue anyway” is recorded.","antiphish.section.zap":"Remove after delivery (ZAP)","antiphish.zap":"Automatically remove dangerous mail from the Inbox","antiphish.zap.hint":"Mail delivered in the last 48 hours is moved to Junk (or the quarantine) when it is found to be phishing later. Mail someone marked “Not spam” is never touched.","antiphish.section.quarantine":"Quarantine","antiphish.quarantine":"Quarantine almost-certain spam and phishing","antiphish.quarantine.hint":"Such mail is kept on the server for {days} days instead of going to Junk; people don't see it in their mail apps.","antiphish.quarantine_digest":"Send a daily summary to people with quarantined mail","antiphish.quarantine_digest.hint":"One e-mail a day listing newly held messages, with a release or request-release button.","antiphish.quarantine_score":"Spam score for quarantine","antiphish.quarantine_score.hint":"Spam scoring at least this (5–15) is quarantined; lower scores go to Junk as usual.","antiphish.section.detection":"Impersonation detection","antiphish.strictness":"Strictness","antiphish.strictness.standard":"Standard","antiphish.strictness.strict":"Strict","antiphish.strictness.hint":"Strict also catches names with one typo or swapped order and domains two characters off — expect more false alarms.","antiphish.action.impersonation":"When an outsider uses a colleague's name","antiphish.action.impersonation.hint":"The display name matches someone in the organisation or a protected name, but the address is external.","antiphish.action.lookalike":"When the sender's domain looks like ours or a partner's","antiphish.action.lookalike.hint":"E.g. examp1e.com instead of example.com, or similar to a protected domain below.","antiphish.action.spoof":"When mail forges a domain (fails DMARC)","antiphish.action.spoof.hint":"The sender's domain can't be verified, or the mail claims to come from the organisation's own domain.","antiphish.action.warn":"Warn in the message only","antiphish.action.junk":"Move to Junk","antiphish.action.quarantine":"Quarantine","antiphish.action.quarantine_note":"“Quarantine” only works while the Quarantine switch above is on; otherwise such mail goes to Junk.","antiphish.names.title":"Protected names","antiphish.names.hint":"Names of executives, accountants, partners… that fraudsters like to imitate. External mail using such a name gets a warning. People in the organisation are protected already.","antiphish.names.none":"No names yet.","antiphish.names.display_name":"Display name","antiphish.names.address":"Real address (optional)","antiphish.names.address.hint":"Mail from exactly this address is not treated as impersonation.","antiphish.names.add":"Add name","antiphish.names.remove":"Remove","antiphish.domains.title":"Protected domains","antiphish.domains.hint":"Domains of partners, banks, suppliers. Mail from domains that look like them gets a warning. The organisation's own domains are protected already.","antiphish.domains.none":"No domains yet.","antiphish.domains.domain":"Domain","antiphish.domains.add":"Add domain","antiphish.domains.remove":"Remove","antiphish.senders.title":"Organisation allow / block list","antiphish.senders.hint":"Block: always to Junk, even if a user trusts the sender. Allow: never to Junk, unless the mail fails DMARC or the user blocked the sender.","antiphish.senders.none":"The list is empty.","antiphish.senders.sender":"Sender","antiphish.senders.sender.hint":"One address (an@example.com) or a whole domain (@example.com).","antiphish.senders.kind":"Type","antiphish.senders.kind.allow":"Allow","antiphish.senders.kind.block":"Block","antiphish.senders.note":"Note","antiphish.senders.add":"Add to list","antiphish.senders.remove":"Remove","antiphish.senders.source":"Source","antiphish.senders.source.manual":"Added by hand","antiphish.senders.source.phish_report":"From a phishing report","antiphish.senders.source.quarantine":"From the quarantine","antiphish.col.added":"Added","antiphish.limits":"Limits: {names} names, {domains} protected domains, {senders} sender entries.","antiphish.count":"{count}/{max}","antiphish.error.phish_list_full":"The list is full. Remove old entries before adding new ones.","antiphish.error.invalid_sender":"Invalid sender. Enter an e-mail address or @domain.","antiphish.error.invalid_domain":"Invalid domain.","antiphish.error.protected_name_invalid":"The name must be 2–120 characters; the address, if given, must be a valid e-mail address.","antiphish.error.subject_prefix_invalid":"The subject prefix must be 1–20 printable ASCII characters.","antiphish.error.own_domain_not_allowed":"That is one of the organisation's own domains: it is protected already and can't go on the allow list.","antiphish.error.not_found":"Entry not found (it may have been removed).","antiphish.error.forbidden":"You don't have permission to change this policy.","antiphish.error.validation_error":"Some details aren't valid.","antiphish.error.security_unavailable":"Mail security isn't available on this server.","antiphish.error.generic":"Couldn't save ({code}). Please try again.","reader.safety.signal.org_blocked_sender":"Your organisation has blocked the sender {sender}.","reader.safety.signal.protected_name_impersonation":"The sender name looks like {name} (a name your organisation protects), but the mail comes from {address}.","extsender.badge.title":"This message comes from a sender outside your organisation.","clickprot.suspicious.title":"This link may not be safe","clickprot.suspicious.body":"We noticed warning signs on this link. Only continue if you trust the sender, and don't enter passwords or payment details.","clickprot.malicious.title":"Dangerous link blocked","clickprot.malicious.body":"This page is on a phishing or malware list. Don't open it, even if the message seems to come from someone you know.","clickprot.malicious.no_override":"Your organisation doesn't allow opening blocked links. If you think this is a mistake, contact your administrator.","clickprot.reasons":"Why","clickprot.continue":"Continue to the site","clickprot.continue_anyway":"Open anyway","clickprot.continue_anyway.confirm":"This page was found to be dangerous. Opening it will be recorded. Open anyway?","clickprot.back":"Back to the message","clickprot.mailto.title":"Write to this address?","clickprot.mailto.body":"This link starts a new message to {address}.","clickprot.mailto.open":"Write message","clickprot.check_failed":"We couldn't check this link right now.","clickprot.source.openphish":"OpenPhish","clickprot.source.phishtank":"PhishTank","clickprot.source.urlhaus":"URLhaus","clickprot.source.local":"Zomail's list","clickprot.reason.feed_url":"This address is on a phishing / malware list ({source}).","clickprot.reason.feed_domain":"The site's domain is on a phishing / malware list ({source}).","clickprot.reason.dbl_phish":"Spamhaus lists this domain as phishing.","clickprot.reason.dbl_malware":"Spamhaus lists this domain as spreading malware.","clickprot.reason.dbl_spam":"Spamhaus lists this domain as spam.","clickprot.reason.dbl_abused":"Spamhaus says this legitimate domain is being abused.","clickprot.reason.surbl_phish":"SURBL lists this domain as phishing.","clickprot.reason.surbl_malware":"SURBL lists this domain as spreading malware.","clickprot.reason.surbl_abuse":"SURBL lists this domain as abused.","clickprot.reason.dns_listed":"This domain is on a DNS blocklist ({source}).","clickprot.reason.message_link_mismatch":"The link's text shows one address but it really leads somewhere else.","clickprot.reason.message_ip_link":"The link points straight to an IP address.","clickprot.reason.message_danger":"The message containing this link looks like phishing.","clickprot.reason.lookup_unavailable":"Some checks didn't answer; the result may be incomplete.","clickprot.error.invalid_url":"This link isn't valid.","clickprot.error.link_override_forbidden":"Your organisation doesn't allow opening blocked links.","clickprot.error.link_not_blocked":"This link is no longer blocked. Try opening it again.","clickprot.error.rate_limited":"You opened too many links in a short time. Please wait a minute.","clickprot.error.link_check_unavailable":"Link checks aren't available on this server.","clickprot.error.mail_backend_busy":"The mail server is busy. Please try again in a moment.","clickprot.error.generic":"That didn't work ({code}).","clickprot.admin.title":"Blocked and warned links","clickprot.admin.lead":"Clicks on links that were blocked (dangerous) or warned about (suspicious), newest first. Only the site is recorded, not the full address.","clickprot.admin.none":"No clicks were blocked or warned about yet.","clickprot.col.host":"Site","clickprot.col.verdict":"Result","clickprot.col.reasons":"Reasons","clickprot.col.proceeded":"User","clickprot.verdict.malicious":"Blocked","clickprot.verdict.suspicious":"Warned","clickprot.verdict.clean":"Safe","clickprot.proceeded.yes":"Continued anyway","clickprot.proceeded.no":"Stopped","clickprot.feeds.nav":"Phishing feeds","clickprot.feeds.title":"Phishing feeds","clickprot.feeds.lead":"Phishing / malware URL lists are downloaded to the server and looked up locally; the addresses people click are never sent anywhere.","clickprot.feeds.none":"No feeds configured.","clickprot.feeds.col.name":"Feed","clickprot.feeds.col.state":"State","clickprot.feeds.col.entries":"Entries","clickprot.feeds.col.last_sync":"Last sync","clickprot.feeds.col.last_success":"Last success","clickprot.feeds.col.next_sync":"Next","clickprot.feeds.col.error":"Last error","clickprot.feeds.enabled":"On","clickprot.feeds.disabled":"Off","clickprot.feeds.interval":"every {minutes} min","clickprot.feeds.never":"never","clickprot.feeds.sync":"Sync now","clickprot.feeds.synced":"Sync of {name} scheduled.","clickprot.feeds.synced_at":"Sync of {name} scheduled: it starts at {at} at the earliest (two downloads of a feed must be at least the feed's minimum gap apart, as its terms ask).","clickprot.feeds.floor":"at least {minutes} minutes apart","clickprot.feeds.requested":"Sync requested","clickprot.feeds.dns":"DNS blocklists","clickprot.feeds.dns.none":"No DNS blocklists in use.","clickprot.feeds.resolver.ok":"A dedicated DNS resolver is configured: DNS blocklist lookups are active.","clickprot.feeds.resolver.missing":"No dedicated DNS resolver: DNS blocklist lookups are skipped.","clickprot.feeds.staff_only":"Only Zomail staff can see this page.","quarantine.user.title":"Quarantined mail","quarantine.user.eyebrow":"Security","quarantine.user.lead":"Almost-certain spam or phishing held back by the server instead of delivered to your mailbox. Messages are deleted after {days} days.","quarantine.user.link":"See quarantined mail","quarantine.user.off":"Your organisation hasn't turned on the quarantine: suspicious mail goes to Junk.","quarantine.user.none":"Nothing is in quarantine.","quarantine.user.release":"Release to Inbox","quarantine.user.request_release":"Request release","quarantine.user.request_hint":"Only an administrator can release suspected phishing; they'll get your request.","quarantine.user.released":"The message was released to your Inbox.","quarantine.user.requested":"Your request was sent to your administrators.","quarantine.user.expires":"Deleted {date}","quarantine.col.category":"Type","quarantine.col.reasons":"Reasons","quarantine.col.expires":"Expires","quarantine.col.origin":"Origin","quarantine.col.size":"Size","quarantine.category.spam":"Spam","quarantine.category.phish":"Phishing","quarantine.category.malware":"Malware","quarantine.category.policy":"Policy","quarantine.status.held":"Held","quarantine.status.release_requested":"Release requested","quarantine.status.released":"Released","quarantine.status.deleted":"Deleted","quarantine.status.expired":"Expired","quarantine.origin.delivery":"At delivery","quarantine.origin.zap":"Removed after delivery","quarantine.origin.purge":"Organisation-wide removal","quarantine.admin.title":"Quarantine","quarantine.admin.lead":"Held messages of every mailbox in the organisation. People can release spam themselves; phishing, malware and policy holds need your decision.","quarantine.admin.counts":"{held} held · {requested} release requests","quarantine.admin.none":"No messages with this status.","quarantine.admin.off":"The quarantine is off. Turn it on in the Anti-phishing policy.","quarantine.admin.detail":"Quarantined message","quarantine.admin.requested_at":"Release requested {time}","quarantine.admin.release":"Release to mailbox","quarantine.admin.release_confirm":"The message will be delivered to {mailbox}'s Inbox.","quarantine.admin.delete":"Delete","quarantine.admin.delete_confirm":"Delete this message from the quarantine for good?","quarantine.admin.allow_sender":"Release and always allow the sender","quarantine.admin.allow_sender_confirm":"Release the message and add {sender} to the organisation's allow list.","quarantine.admin.allow_domain":"Release and allow the whole domain","quarantine.admin.allow_domain_confirm":"Release the message and add @{domain} to the organisation's allow list.","quarantine.admin.done.released":"The message was released.","quarantine.admin.done.deleted":"The message was deleted.","quarantine.admin.done.allowed":"The message was released and {sender} added to the allow list.","quarantine.admin.not_held":"This message is no longer held, so it can't be changed.","quarantine.ev.facts":"Details","quarantine.ev.headers":"Technical headers","quarantine.ev.auth":"Sender authentication","quarantine.ev.auth.spf":"SPF","quarantine.ev.auth.dkim":"DKIM","quarantine.ev.auth.dmarc":"DMARC","quarantine.ev.auth.unchecked":"Not checked (internal mail)","quarantine.ev.auth.none":"none","quarantine.ev.links":"Links in the message","quarantine.ev.links.hint":"Shown as text only. Don't copy them to open them.","quarantine.ev.links.none":"The message has no links.","quarantine.ev.link.text":"Shown as: {text}","quarantine.ev.attachments":"Attachments","quarantine.ev.attachments.none":"No attachments.","quarantine.ev.body":"Message body","quarantine.ev.body.hint":"Every view of the body is recorded in the organisation's audit log.","quarantine.ev.body.show":"Show message body","quarantine.ev.body.html":"Formatted version (images and links disabled)","quarantine.ev.body.text":"Plain text","quarantine.ev.body.empty":"The message has no text.","quarantine.error.quarantine_release_forbidden":"This message needs an administrator's decision. Use “Request release”.","quarantine.error.quarantine_not_held":"This message is no longer held (released, deleted or expired).","quarantine.error.quarantine_unavailable":"The mail server can't take released mail right now. Please try again later.","quarantine.error.quarantine_raw_missing":"The original of this message is no longer on the server.","quarantine.error.not_found":"This message isn't in the quarantine.","quarantine.error.forbidden":"You don't have permission to act on this message.","quarantine.error.mail_backend_busy":"The mail server is busy. Please try again in a moment.","quarantine.error.generic":"That didn't work ({code}). Please try again.","phishreport.notice.reported":"Reported as phishing and moved to Junk. Your organisation's administrators have been told.","phishreport.notice.limited":"You've reported too many messages this hour. Please try again later.","phishreport.notice.invalid_folder":"Messages in Sent or Drafts can't be reported.","phishreport.admin.title":"Reported phishing","phishreport.admin.lead":"Messages your people marked as phishing. Check the evidence, then remove the message from every mailbox in the organisation if needed.","phishreport.admin.new_count":"{count} new reports","phishreport.admin.none":"No reports with this status.","phishreport.col.reporter":"Reported by","phishreport.col.reported":"Reported","phishreport.col.verdict":"Automatic rating","phishreport.reporters":"{count} reporters","phishreport.status.new":"New","phishreport.status.reviewed":"Reviewed","phishreport.status.dismissed":"Dismissed","phishreport.verdict.danger":"Likely phishing","phishreport.verdict.warning":"Suspicious","phishreport.verdict.info":"Normal","phishreport.verdict.none":"Normal","phishreport.verdict.unknown":"Not rated","phishreport.detail.title":"Reported message","phishreport.detail.message_id":"Message-ID","phishreport.detail.mark_reviewed":"Mark reviewed","phishreport.detail.mark_dismissed":"Dismiss (not phishing)","phishreport.detail.mark_new":"Mark as new","phishreport.detail.status_saved":"Status updated.","phishreport.purge.title":"Remove from every mailbox","phishreport.purge.lead":"Step 1 only counts matching messages (nothing is removed). Then you confirm the removal; removed mail stays in the quarantine for {days} days and can be restored.","phishreport.purge.message_id":"Message-ID","phishreport.purge.same_sender":"Also other messages from the same sender with the same subject","phishreport.purge.days":"Within the last days","phishreport.purge.sender":"Sender","phishreport.purge.subject":"Subject","phishreport.purge.block":"Block this sender for the whole organisation","phishreport.purge.submit":"Count matching messages (dry run)","phishreport.purges.title":"Removals","phishreport.purges.none":"No removals yet.","phishreport.purges.open":"Open","phishreport.job.title":"Organisation-wide removal","phishreport.job.refreshing":"This page refreshes every 3 seconds.","phishreport.job.criteria":"Criteria","phishreport.job.days":"last {days} days","phishreport.job.block_sender":"Block the sender for the whole organisation","phishreport.job.matched":"{matched} messages in {mailboxes} mailboxes match.","phishreport.job.result":"{purged} removed, {failed} failed.","phishreport.job.restored_count":"{restored} messages restored.","phishreport.job.failed":"The removal failed: {error}","phishreport.job.created":"Created by {by} at {time}","phishreport.job.executed":"Run by {by} at {time}","phishreport.job.execute":"Remove {count} messages","phishreport.job.execute_hint":"The messages are moved out of people's mailboxes into the quarantine ({days} days). They can be restored.","phishreport.job.nothing":"No messages match; nothing to remove.","phishreport.job.cancel":"Cancel","phishreport.job.restore":"Restore {count} messages","phishreport.job.restore_hint":"Puts the removed messages back into each person's original folder.","phishreport.job.report":"Back to the report","phishreport.job.done.started":"Removal started.","phishreport.job.done.cancelled":"Cancelled.","phishreport.job.done.restoring":"Restoring the messages.","phishreport.purge_status.counting":"Counting","phishreport.purge_status.counted":"Counted, waiting for confirmation","phishreport.purge_status.purging":"Removing","phishreport.purge_status.done":"Removed","phishreport.purge_status.restoring":"Restoring","phishreport.purge_status.restored":"Restored","phishreport.purge_status.cancelled":"Cancelled","phishreport.purge_status.failed":"Failed","phishreport.error.report_folder_invalid":"Messages in Sent or Drafts can't be reported.","phishreport.error.phishing_report_rate_limited":"Too many reports this hour. Please try again later.","phishreport.error.message_not_found":"Message not found (it may have been moved or deleted).","phishreport.error.purge_not_counted":"A removal can only run once the matching messages are counted.","phishreport.error.purge_not_done":"Messages can only be restored once the removal has finished.","phishreport.error.purge_running":"Another removal is running. Please wait for it to finish.","phishreport.error.purge_criteria_invalid":"Invalid criteria: a Message-ID like <…> is required; 1–30 days only together with sender and subject.","phishreport.error.purge_unavailable":"The mail servers can't be reached right now. Please try again later.","phishreport.error.sender_not_blocked":"The messages were removed but the sender wasn't blocked (your organisation's block list may be full). Block it in Security → Anti-phishing.","phishreport.error.restore_incomplete":"Some messages couldn't be restored because the mail server didn't answer. Press Restore again to retry the remaining ones.","phishreport.error.invalid_sender":"There's no valid sender address to block: enter the sender, or untick \"Block this sender for the whole organisation\".","phishreport.error.not_found":"This report or removal wasn't found.","phishreport.error.forbidden":"Only the organisation's owners and administrators can do this.","phishreport.error.mail_backend_busy":"The mail server is busy. Please try again in a moment.","phishreport.error.rate_limited":"You reported too many messages in an hour. Please try again later.","phishreport.error.generic":"That didn't work ({code}). Please try again.","zap.banner.title":"Removed from your Inbox after delivery","zap.banner.junk":"It was moved to Junk at {time}.","zap.banner.quarantine":"It was moved to the quarantine at {time}.","zap.banner.moved":"It was moved out of your Inbox.","zap.reason.feed_url":"a link in it was later found on a phishing list","zap.reason.feed_domain":"the domain of a link in it was later found on a phishing list","zap.reason.org_block":"your organisation blocked the sender","zap.reason.user_reports":"several colleagues reported it as phishing","zap.reason.unknown":"it was found to be dangerous","zap.banner.reason":"Reason: {reason}.","reader.safety.signal.zap_removed":"This message was removed from your Inbox after delivery: {reason}.","zap.admin.title":"Removed after delivery","zap.admin.lead":"Mail delivered in the last 48 hours that was automatically taken out of the Inbox once it was found dangerous, newest first.","zap.admin.on":"Remove after delivery (ZAP) is on.","zap.admin.off":"Remove after delivery (ZAP) is off.","zap.admin.policy_link":"Change it in the Anti-phishing policy","zap.admin.none":"Nothing has been removed yet.","zap.col.message_id":"Message-ID","zap.col.reason":"Reason","zap.col.action":"Action","zap.col.reverted":"Undone by the user","zap.action.junk":"Moved to Junk","zap.action.quarantine":"Quarantined","zap.reverted.yes":"Yes","zap.reverted.no":"No","zap.error.not_found":"Nothing found.","zap.error.forbidden":"Only the organisation's owners and administrators can see this page.","zap.error.zap_unavailable":"Removal after delivery is not available on this server.","zap.error.generic":"Couldn't load the data ({code}).","console.card.support.title":"Customer support","console.card.support.desc":"Support tickets from the sales site and the webmail.","support.badge.open":"{count} waiting","support.category.sales":"Sales","support.category.billing":"Billing","support.category.technical":"Technical","support.category.abuse":"Abuse report","support.category.partnership":"Partnership","support.category.other":"Other","support.status.open":"Open","support.status.pending_customer":"Waiting for customer","support.status.resolved":"Resolved","support.status.closed":"Closed","support.priority.low":"Low","support.priority.normal":"Normal","support.priority.high":"High","support.priority.urgent":"Urgent","support.source.web":"Website","support.source.webmail":"Webmail","support.author.staff":"Zomail Support","support.author.system":"System","support.internal":"Internal note","support.col.reference":"Reference","support.col.subject":"Subject","support.col.status":"Status","support.col.updated":"Updated","support.col.requester":"From","support.col.category":"Category","support.col.priority":"Priority","support.col.assignee":"Assignee","support.form.category":"What do you need help with?","support.form.subject":"Subject","support.form.message":"Message","support.form.message_hint":"Describe the problem, what you tried and any error message. Up to {max} characters, plain text.","support.form.submit":"Send request","support.reply.title":"Reply","support.reply.label":"Your message","support.reply.submit":"Send reply","support.reply.sent":"Reply sent. Our support team will get back to you soon.","support.thread.title":"Conversation","support.thread.closed":"This request is closed. If you need more help, please open a new one.","support.thread.merged":"This request was merged into {reference}.","support.nav":"Help & support","support.user.eyebrow":"Help","support.user.title":"Contact support","support.user.lead":"Send a request to Zomail Support. Answers appear here and are e-mailed to {email}.","support.user.new":"New request","support.user.mine":"My tickets","support.user.org":"Your organisation's tickets","support.user.org_hint":"You are an administrator: the list includes requests sent by your colleagues.","support.user.none":"No tickets yet.","support.user.created":"Request {reference} sent. We'll answer by e-mail and here.","support.user.by":"Sent by {name}","support.user.back":"All tickets","support.link.eyebrow":"Support request","support.link.title":"Request {reference}","support.link.lead":"The private page of this request — please don't share the link. New answers are also e-mailed to {email}.","support.link.invalid.title":"This request can't be opened","support.link.invalid":"The link is wrong or the request no longer exists (closed requests are deleted after a while). Please open a new request if you need help.","support.admin.eyebrow":"Platform","support.admin.title":"Support tickets","support.admin.lead":"Requests from the sales site's contact form and from the webmail. Only staff with the support permission can read them.","support.admin.filter":"Filter tickets","support.admin.status.active":"Needs work","support.admin.status.all":"All","support.admin.category.any":"Any category","support.admin.priority.any":"Any priority","support.admin.assignee.any":"Anyone","support.admin.assignee.me":"Mine","support.admin.assignee.unassigned":"Unassigned","support.admin.search":"Search reference, e-mail, name, subject, text","support.admin.search.submit":"Filter","support.admin.none":"No tickets match these filters.","support.admin.unassigned":"Unassigned","support.admin.page":"Page {page} of {pages}","support.admin.prev":"Previous page","support.admin.next":"Next page","support.admin.back":"All tickets","support.admin.facts":"Details","support.admin.requester":"Requester","support.admin.company":"Company","support.admin.organisation":"Organisation","support.admin.source":"Source","support.admin.language":"Language","support.admin.created":"Created","support.admin.manage":"Handle","support.admin.assignee":"Assignee","support.admin.assign_me":"Take this ticket","support.admin.save":"Save changes","support.admin.reply.title":"Reply to the customer","support.admin.reply.hint":"E-mailed to {email} and shown on the customer's ticket page.","support.admin.reply.status":"Status after sending","support.admin.reply.submit":"Send reply","support.admin.note.title":"Internal note","support.admin.note.hint":"Only staff see notes; the customer never receives them.","support.admin.note.submit":"Add note","support.admin.merge.title":"Merge a duplicate","support.admin.merge.lead":"Move this ticket's whole conversation into another ticket of the same requester, then close this one.","support.admin.merge.into":"Merge into reference","support.admin.merge.submit":"Merge","support.admin.related":"Other tickets of this requester","support.admin.merged_into":"Merged into {reference}","support.admin.done.replied":"Reply sent to the customer.","support.admin.done.noted":"Internal note added.","support.admin.done.updated":"Saved.","support.admin.done.merged":"Tickets merged.","support.error.generic":"That didn't work (code {code}). Please try again.","support.error.support_invalid_request":"Some information is missing or invalid. Please check the fields.","support.error.support_invalid_email":"That e-mail address isn't valid.","support.error.support_message_too_long":"The text is too long (at most {limit} characters).","support.error.support_captcha_failed":"We couldn't verify that you're not a robot. Reload the page and try again.","support.error.support_rate_limited":"You've sent too many requests. Please try again later.","support.error.support_unavailable":"Support requests are temporarily unavailable. Please try again later.","support.error.support_not_found":"This request wasn't found.","support.error.support_link_invalid":"The link is wrong or the request no longer exists.","support.error.support_forbidden":"Not available in a delegated mailbox.","support.error.support_ticket_closed":"This request is closed, so it can't take more replies. Please open a new one.","support.error.support_merge_invalid":"Can't merge: only into another, unmerged ticket of the same requester.","support.error.support_assignee_invalid":"That person isn't support staff.","adminui.back":"Back to admin","adminui.pending":"Processing…","adminui.no_permission":"You don't have permission.","adminui.unlimited":"Unlimited","adminui.forbidden.title":"You don't have admin access","adminui.forbidden.body":"This account can only use the mailbox. Ask your organization's account owner to grant you access.","adminui.platform_only.title":"For Zomail staff","adminui.platform_only.body":"This page is for Zomail's platform administrators. Your organization admin rights do not include it.","adminui.platform_only.cta":"Back to the admin console","adminui.forbidden.cta":"Back to mail","adminui.mfa.title":"2-step verification required","adminui.mfa.body":"Admin accounts must sign in with a code from their phone. Turn it on in Settings → Security, then come back.","adminui.mfa.cta":"Turn on 2-step verification","adminui.domain_status.pending":"Awaiting verification","adminui.domain_status.verified":"Provisioning","adminui.domain_status.active":"Active","adminui.domain_status.failed":"Error","adminui.mailbox_status.provisioning":"Creating","adminui.mailbox_status.active":"Active","adminui.mailbox_status.suspended":"Suspended","adminui.mailbox_status.failed":"Error","adminui.role.platform_admin":"Zomail administrator","adminui.role.owner":"Owner","adminui.role.admin":"Administrator","adminui.role.helpdesk":"Helpdesk","adminui.role.billing":"Billing","adminui.success.verify-domain":"Domain verified and queued for provisioning.","adminui.success.dev-verify-domain":"Domain verified (local mode).","adminui.success.create-mailbox":"Mailbox created and being provisioned.","adminui.success.reset-password":"New password set and all sessions signed out.","adminui.success.set-status":"Mailbox status updated.","adminui.success.set-quota":"Storage updated.","adminui.success.revoke-sessions":"All sessions for this mailbox have been signed out.","adminui.success.create-alias":"Forwarding address created.","adminui.success.delete-alias":"Deleted.","adminui.success.rotate-dkim":"New DKIM key created. Domains using CNAME: Zomail switches to it once DNS serves it, nothing to do. Domains using TXT: update DNS using the record below.","adminui.success.dkim-mode":"DKIM publishing method changed. Add the new record from the table below; Zomail switches to the new key once DNS serves it.","adminui.success.dns-setup":"Saved.","adminui.success.dns-setup-check":"Delegation checked again.","adminui.success.grant-role":"Access granted.","adminui.success.revoke-role":"Access revoked.","adminui.success.create-cluster":"Shard added. New mailboxes will be placed on it when it is the least loaded.","adminui.success.set-cluster-status":"Shard status updated.","adminui.success.set-ai":"AI assistant setting updated.","adminui.success.set-mail-storage":"Mail storage updated.","adminui.success.set-drive-quota":"Drive storage updated.","adminui.success.set-drive-links":"Sharing policy updated.","adminui.success.set-seats":"Seat count updated.","adminui.error.invalid_intent":"Invalid action.","adminui.error.mailbox_conflict":"This mailbox address already exists.","adminui.error.domain_not_ready":"The domain must be verified before creating mailboxes.","adminui.error.domain_verification_failed":"The verification TXT record was not found in DNS yet.","adminui.error.unreachable":"Could not connect to the Control API.","adminui.error.status.400":"The information provided is invalid.","adminui.error.status.401":"Your session has expired. Please sign in again.","adminui.error.status.402":"The customer has used all purchased seats.","adminui.error.status.403":"You don't have permission to perform this action.","adminui.error.status.404":"No data found.","adminui.error.status.409":"This data already exists.","adminui.error.status.422":"The action could not be completed.","adminui.error.status.503":"This feature is not configured on the server.","adminui.error.status.507":"Infrastructure is full — a storage cluster must be added. Contact Zomail operations.","adminui.error.forbidden":"You don't have permission to perform this action.","adminui.error.mfa_required":"Administrators must turn on 2-step verification (Settings → Security).","adminui.error.admin_session_required":"Your session has expired. Please sign in again.","adminui.error.admin_session_idle":"Administration has not been used for a while. Please sign in again.","adminui.error.validation_error":"The information provided is invalid.","adminui.error.domain_not_found":"Domain not found.","adminui.error.tenant_not_found":"This customer does not exist.","adminui.error.mailbox_not_found":"This mailbox does not exist.","adminui.error.role_not_found":"Role not found.","adminui.error.cluster_not_found":"Cluster {cluster} does not exist.","adminui.error.cluster_exists":"Cluster id {cluster} already exists.","adminui.error.cluster_no_server":"Shard {cluster} has no running server: it cannot take mailboxes again.","adminui.error.catch_all_exists":"{domain} already has a catch-all.","adminui.error.address_taken":"{address} is already used by a mailbox or alias.","adminui.error.mailbox_provisioning":"The mailbox is still being set up; its status cannot change yet.","adminui.error.cannot_suspend_self":"You can't suspend your own mailbox.","adminui.error.storage_limit_reached":"This exceeds the plan's purchased mail storage — upgrade the plan or lower another mailbox's quota.","adminui.error.seat_limit_reached":"All {limit} seats of the current plan are in use.","adminui.error.alias_target_other_tenant":"Aliases can only forward to mailboxes of the same customer.","adminui.error.private_ai_requires_platform":"Private customer: data never leaves their own servers — Zomail must enable this after a data processing agreement is signed.","adminui.error.platform_only_drive_quota":"Only Zomail changes the Drive quota, per the purchased plan.","adminui.error.platform_only_mail_storage":"Only Zomail changes mail storage, per the purchased plan.","adminui.error.platform_only_usage_report":"Only Zomail can view the platform-wide usage report.","adminui.error.role_mailbox_other_tenant":"Roles can only be granted to mailboxes of this customer.","adminui.error.last_owner":"The customer must keep at least one owner.","adminui.error.dkim_not_configured":"The server has no DKIM encryption key configured (DKIM_ENCRYPTION_KEY).","adminui.error.dkim_cname_unavailable":"DKIM by CNAME is not available yet: Zomail's DKIM zone is not delegated (Zomail operators: zomail-cluster dns).","adminui.error.dkim_zone_unavailable":"Zomail's DKIM DNS zone does not answer on the Internet right now: the key cannot be rotated. Try again later.","adminui.error.no_cluster_capacity":"No cluster has capacity left — a shard must be added.","adminui.error.region_full":"Cluster {cluster} is full and no other cluster in region {region} has room.","adminui.error.dns_check_unavailable":"Unable to check DNS right now.","adminui.home.eyebrow.platform":"Zomail operations","adminui.home.eyebrow.tenant":"Business administration","adminui.home.title.platform":"Mail service administration","adminui.home.title.tenant":"Business email administration","adminui.home.signed_in":"Signed in as {email} · {roles}","adminui.home.infrastructure":"Infrastructure","adminui.home.load_failed":"Couldn't load data.","adminui.home.load_failed.hint":"Check the Control API, then reload the page.","adminui.home.stats":"System overview","adminui.home.stats.tenants":"Customers","adminui.home.stats.tenants.hint":"tenants under management","adminui.home.stats.domains":"Verified domains","adminui.home.stats.domains.hint":"out of {total} domains","adminui.home.stats.mailboxes":"Mailboxes","adminui.home.stats.mailboxes.hint":"{count} private mailboxes","adminui.home.stats.pending":"Awaiting provisioning","adminui.home.stats.pending.hint":"events in the outbox","adminui.home.tenants":"Customers","adminui.home.tenants.hint":"Seats, permissions and activity log.","adminui.home.domains":"Domains","adminui.home.domains.hint":"DNS status, mailboxes and forwarding addresses.","adminui.home.domains.empty":"No domains yet","adminui.home.domains.empty.platform":"Add your first customer to get started.","adminui.home.domains.empty.tenant":"Contact Zomail to add a domain.","adminui.col.name":"Name","adminui.col.code":"Code","adminui.col.plan":"Plan","adminui.col.status":"Status","adminui.col.domain":"Domain","adminui.col.customer":"Customer","adminui.col.infrastructure":"Infrastructure","adminui.col.mailbox":"Mailboxes","tenant.not_found":"Customer not found, or you don't have permission to view it.","tenant.eyebrow":"Customer · {plan} plan","tenant.no_domains":"No domains yet","tenant.seats.title":"Seats","tenant.seats.hint":"Each mailbox uses one seat; aliases and groups don't count.","tenant.seats.used":"{percent}% used","tenant.seats.submit":"Update seats","tenant.seats.label":"Seats sold (leave blank for unlimited)","tenant.ai.title":"AI assistant (Mail Pro)","tenant.ai.hint":"Summaries, reply drafts, AI Brief. Message content is sent to the AI provider only when enabled; it is not stored or used for training, per the API terms.","tenant.ai.on":"Enabled","tenant.ai.off":"Disabled","tenant.ai.tokens.one":"{count} token this month","tenant.ai.tokens.other":"{count} tokens this month","tenant.ai.disable":"Turn off AI assistant","tenant.ai.enable":"Turn on AI assistant","tenant.mail.title":"Mail storage","tenant.mail.hint":"Total mailbox quotas cannot exceed the storage sold. Leave blank for unlimited.","tenant.mail.allocated":"{percent}% allocated to mailboxes","tenant.mail.submit":"Update mail storage","tenant.mail.label":"Mail storage sold (GB)","tenant.drive.title":"Drive","tenant.drive.hint":"Storage shared by the whole organization (all file versions and trash count).","tenant.drive.usage":"{percent}% used · Public links: {links}","tenant.drive.links_allowed":"allowed","tenant.drive.links_disabled":"disabled","tenant.drive.submit":"Update storage","tenant.drive.label":"Drive storage (GB)","tenant.drive.disable_links":"Disable public links","tenant.drive.enable_links":"Allow public links","tenant.domains.title":"Domains","tenant.domains.add.label":"Add a domain","tenant.domains.add.submit":"Add domain","tenant.domains.add.pending":"Adding…","tenant.domains.add.hint":"The new domain shares the mail servers of the existing domains. Once added, open it to get the TXT verification record.","adminui.success.add-domain":"Domain added. Open it in the list to get the TXT verification record.","adminui.error.domain_conflict":"This domain is already registered.","adminui.error.no_capacity":"No mail server has room left — add a shard.","tenant.admins.title":"Administrators","tenant.admins.hint":"Owners manage permissions and billing; administrators manage mailboxes and aliases (billing read-only); billing manages billing only; helpdesk can only reset passwords.","tenant.admins.empty":"No administrators yet","tenant.admins.empty.hint":"Grant the owner role to the person in charge on the customer's side.","tenant.admins.col.user":"User","tenant.admins.col.role":"Role","tenant.admins.col.granted_by":"Granted by","tenant.admins.revoke":"Revoke","tenant.admins.revoke.confirm":"Revoke access for {email}?","tenant.admins.grant":"Grant access","tenant.admins.user":"User","tenant.admins.choose":"Choose a mailbox…","tenant.admins.role":"Role","tenant.audit.title":"Activity log","tenant.audit.hint":"Records every admin action and sent message; never contains message content.","tenant.audit.empty":"No activity yet","tenant.audit.col.time":"Time","tenant.audit.col.actor":"Performed by","tenant.audit.col.action":"Action","tenant.audit.col.details":"Details","tenant.audit.action.mail.submission.queued":"Message sent","tenant.audit.action.mail.submission.accepted":"Message accepted by relay","tenant.audit.action.mail.submission.failed":"Message sending failed","tenant.audit.action.mailbox.password_reset":"Password reset","tenant.audit.action.mailbox.suspended":"Mailbox suspended","tenant.audit.action.mailbox.reactivated":"Mailbox reactivated","tenant.audit.action.mailbox.quota_changed":"Storage changed","tenant.audit.action.mailbox.sessions_revoked":"All sessions signed out","tenant.audit.action.alias.created":"Alias created","tenant.audit.action.alias.deleted":"Alias deleted","tenant.audit.action.role.granted":"Access granted","tenant.audit.action.role.revoked":"Access revoked","tenant.audit.action.tenant.seat_limit_changed":"Seat count changed","tenant.audit.action.dkim.rotated":"DKIM key rotated","tenant.audit.action.tenant.drive_quota_changed":"Drive storage changed","tenant.audit.action.tenant.mail_storage_changed":"Mail storage changed","tenant.audit.action.tenant.drive_links_enabled":"Drive public links enabled","tenant.audit.action.tenant.drive_links_disabled":"Drive public links disabled","tenant.audit.action.drive.shared":"Drive file shared","tenant.audit.action.drive.link_created":"Public link created","tenant.audit.action.drive.share_revoked":"Drive sharing revoked","tenant.audit.action.drive.item_purged":"Drive file permanently deleted","domain.not_found":"Domain not found, or you don't have permission to view it.","domain.eyebrow":"Domain","domain.customer_info":"Customer details","domain.dns_status.ok":"Correct","domain.dns_status.missing":"Missing","domain.dns_status.mismatch":"Incorrect / incomplete","domain.dns_status.unchecked":"Not checked","domain.purpose.verification":"Verification","domain.purpose.mx":"Incoming mail (MX)","domain.purpose.mail_host":"Mail server (A)","domain.purpose.spf":"SPF","domain.purpose.dkim":"DKIM","domain.purpose.dmarc":"DMARC","domain.purpose.autoconfig":"Autoconfiguration (Thunderbird)","domain.purpose.autodiscover":"Autoconfiguration (Outlook)","domain.alias_kind.alias":"Alias","domain.alias_kind.group":"Group","domain.alias_kind.catch_all":"Catch-all","domain.verify.title":"Verify ownership","domain.verify.hint":"Add the TXT record below at your DNS provider, then click Check.","domain.record.type":"Type","domain.record.name":"Name / Host","domain.record.value":"Value","domain.verify.submit":"Check DNS","domain.verify.pending":"Checking…","domain.verify.dev":"Verify locally","domain.dns.title":"DNS records","domain.dns.hint":"Configure these at your domain provider to receive mail and prevent spoofing. Status is checked live at the domain's own DNS servers.","domain.dns.rotate_dkim":"Rotate DKIM key","domain.dns.create_dkim":"Create DKIM key","domain.dns.unavailable":"Unable to check DNS right now.","domain.dns.col.purpose":"Purpose","domain.dns.col.type":"Type","domain.dns.col.name":"Name / Host","domain.dns.col.expected":"Expected value","domain.dns.col.status":"Status","domain.dns.found":"Currently: {values}","domain.dns.no_dkim_value":"Create a DKIM key to get this record","domain.dns.copy_name":"Copy name","domain.dns.copy_value":"Copy value","domain.dns.zone.download":"Download DNS file (zone, import into Cloudflare / other DNS)","domain.dns.zone.download_csv":"Download as CSV","domain.dns.zone.copy":"Copy the whole zone file","domain.dns.zone.howto":"How to import","domain.dns.zone.cloudflare":"DNS → Records → Import and Export → Import DNS records → choose the downloaded file. Untick \"Proxy imported DNS records\" (mail and the autoconfig/mta-sts names must be \"DNS only\").","domain.dns.zone.others_title":"Route 53, DigitalOcean, PowerDNS, other providers","domain.dns.zone.others":"use \"Import zone file\" (BIND format). Providers without an import: create each record with Copy name / Copy value in the table.","domain.dns.zone.caution":"Records that are already correct, records that exist with another value (SPF, DMARC, old MX) and records that could not be checked are written as comments (;) in the file, so importing it again never duplicates anything. After the import the table below checks again, directly at the domain's own DNS servers (no waiting for 8.8.8.8's cache).","domain.dns.hint.verification":"Proves you own the domain. Can be removed once verified.","domain.dns.hint.mx":"Mail sent to the domain will be delivered to Zomail.","domain.dns.hint.mail_host":"The mail server's own name ({host}): an A record with its public IPv4 address. MX, autoconfig and autodiscover point to it.","domain.dns.hint.mx_other_server":"The domain's MX points to another server. If the domain's mail deliberately stays there, keep it; otherwise remove the old MX records when you're ready to move mail to Zomail.","domain.dns.hint.spf":"Allows the Zomail relay to send mail on the domain's behalf.","domain.dns.hint.spf_multiple":"There are several SPF records — merge them into one, otherwise SPF fails.","domain.dns.hint.dns_lookup_failed":"The domain's DNS servers did not answer (timeout or error), so this record could not be checked — it does not mean the record is missing. Check again in a minute.","domain.dns.hint.dns_txt_split":"Your DNS provider split this value at every space (receivers join the parts without spaces, which breaks it). Enter the value in double quotes \"…\", or use another DNS provider.","domain.dns.hint.dns_txt_truncated":"Your DNS provider cut this value at the first \";\" (it treats the rest as a comment). Enter the value in double quotes \"…\" (long DKIM keys: several quoted parts of up to 255 characters), or use another DNS provider.","domain.dns.hint.dmarc_no_policy":"The DMARC record has no policy (p=none, quarantine or reject), so receivers ignore it.","domain.dns.hint.platform_host_a":"This is the platform's own host that customers' CNAMEs point to: it needs an A record with the server's address (same as {mx}), not a CNAME.","domain.dns.hint.spf_add_include":"Add \"{include}\" to the existing SPF record instead of creating a new one.","domain.dns.hint.spf_invalid":"The existing record \"{found}\" is not valid SPF (\"v=spf1\" must be followed by a space), so the domain has no SPF at all. Publish one record that keeps its senders and adds \"{include}\" (receivers ignore the broken one; delete it too). The downloaded DNS file has this line ready to import.","domain.dns.hint.dkim":"Signs outgoing mail to prevent spoofing.","domain.dns.hint.dkim_no_key":"There is no DKIM key for this domain yet.","domain.dns.hint.dkim_other_key":"DNS has a different key at this name (left from a previous install?). Receivers reject the signatures until you replace the value with the one shown here.","domain.dns.hint.dkim_retiring":"The previous key is being replaced — keep this record for at least {days} days, then remove it.","domain.dns.hint.dkim_next":"New key: add this record now. Zomail starts signing with it once DNS serves it; the previous record can then go.","domain.dns.hint.dkim_rotate_due":"This key has signed for {age} days (rotate every {days} days). Click \"Rotate DKIM key\" and add the new TXT record shown; domains using CNAME rotate by themselves.","domain.dns.hint.dkim_cname":"Signs outgoing mail. Zomail holds the key behind this CNAME and rotates it — no further DNS changes on your side.","domain.dns.hint.dkim_cname_standby":"Second DKIM selector used for key rotation: add it now so future key changes need no DNS change.","domain.dns.hint.dkim_cname_unresolved":"The CNAME is in place but the key behind it does not resolve yet (DNS propagation, usually minutes). Check again later.","domain.dns.hint.dkim_cname_other":"This name points somewhere else. Replace it with the CNAME shown here.","domain.dns.hint.dkim_cname_txt_instead":"This name has a TXT record instead of the CNAME. Delete the TXT and add the CNAME so key rotation needs no DNS change.","domain.dns.hint.dmarc":"Tells receiving servers how to handle mail spoofing the domain. Start with p=none to monitor first.","domain.dns.hint.dmarc_multiple":"Only one DMARC record is allowed.","domain.dns.hint.dmarc_invalid":"The existing record \"{found}\" is not a valid DMARC record (it must start with \"v=DMARC1;\"), so receivers ignore it. Publish the record shown here; delete the broken one too.","domain.dns.hint.mta_sts_invalid":"The existing record \"{found}\" is not a valid MTA-STS record (it must start with \"v=STSv1;\"), so senders ignore it. Publish the record shown here; delete the broken one too.","domain.dns.hint.tls_rpt_invalid":"The existing record \"{found}\" is not a valid TLS-RPT record (it must start with \"v=TLSRPTv1;\"), so senders ignore it. Publish the record shown here; delete the broken one too.","domain.dns.hint.autoconfig":"Optional: Thunderbird and phones detect the settings automatically.","domain.dns.hint.autodiscover":"Optional: Outlook detects the settings automatically when adding the account.","domain.mailboxes.title":"Mailboxes","domain.mailboxes.count.one":"{count} account on this domain.","domain.mailboxes.count.other":"{count} accounts on this domain.","domain.mailboxes.empty":"No mailboxes yet","domain.mailboxes.empty.hint":"Verify the domain, then create the first account.","domain.col.address":"Address","domain.col.name":"Name","domain.col.quota":"Storage","domain.col.status":"Status","domain.col.kind":"Type","domain.col.targets":"Forwards to","domain.create_mailbox.title":"Create mailbox","domain.create_mailbox.hint":"Users should change the temporary password after their first sign-in.","domain.create_mailbox.no_role":"Your role can't create mailboxes.","domain.create_mailbox.not_ready":"Verify the domain to enable this feature.","domain.create_mailbox.submit":"Create mailbox","domain.create_mailbox.pending":"Creating…","domain.create_mailbox.display_name":"Display name","domain.create_mailbox.display_name.placeholder":"Jane Smith","domain.create_mailbox.address":"Email address","domain.create_mailbox.quota":"Storage","domain.create_mailbox.locale":"Language (system mail, calendar/contacts names)","domain.create_mailbox.password":"Temporary password","domain.aliases.title":"Aliases, groups and catch-all","domain.aliases.hint":"Additional addresses that forward to existing mailboxes; they don't use seats.","domain.aliases.empty":"No forwarding addresses yet","domain.aliases.empty.hint":"Example: sales@{domain} delivering to the whole sales team.","domain.aliases.catch_all_address":"All other addresses @{domain}","domain.aliases.delete":"Delete","domain.aliases.delete.confirm":"Delete {address}?","domain.add_alias.title":"Add address","domain.add_alias.hint":"Groups deliver to several people; catch-all receives mail sent to non-existent addresses.","domain.add_alias.no_role":"Your role can't manage aliases.","domain.add_alias.no_mailbox":"At least one active mailbox is required.","domain.add_alias.submit":"Create","domain.add_alias.kind":"Type","domain.add_alias.kind.alias":"Alias (one recipient)","domain.add_alias.kind.group":"Group (multiple recipients)","domain.add_alias.kind.catch_all":"Catch-all (every unused address)","domain.add_alias.address":"Address (leave blank for catch-all)","domain.add_alias.display_name":"Display name","domain.add_alias.display_name.placeholder":"Sales team","domain.add_alias.targets":"Forward to (choose one, or several for a group)","mailboxadmin.not_found":"Mailbox not found, or you don't have permission to view it.","mailboxadmin.eyebrow":"Mailbox · {tenant}","mailboxadmin.summary":"{name} · {quota} · {sessions} open webmail sessions","mailboxadmin.password.title":"Reset password","mailboxadmin.password.hint":"Applies immediately to webmail and IMAP; all open sessions will be signed out.","mailboxadmin.password.submit":"Set new password","mailboxadmin.password.label":"New password (at least 12 characters)","mailboxadmin.password.no_role":"Your role can't reset passwords.","mailboxadmin.sessions.title":"Sign-in sessions","mailboxadmin.sessions.hint":"Use this if a password may have leaked or a device was lost.","mailboxadmin.sessions.submit":"Sign out all sessions","mailboxadmin.sessions.open.one":"{count} open session.","mailboxadmin.sessions.open.other":"{count} open sessions.","mailboxadmin.status.title":"Status","mailboxadmin.status.hint":"Suspending a mailbox blocks sign-in and rejects incoming mail (550 5.2.1); data is kept intact.","mailboxadmin.status.no_role":"Your role can't suspend mailboxes.","mailboxadmin.status.self":"You can't suspend your own mailbox.","mailboxadmin.status.suspend":"Suspend mailbox","mailboxadmin.status.suspend.confirm":"Suspend {address}? The user will be signed out immediately.","mailboxadmin.status.reactivate":"Reactivate","mailboxadmin.status.provisioning":"The mailbox is being provisioned.","mailboxadmin.quota.title":"Storage","mailboxadmin.quota.hint":"Storage limit for this mailbox.","mailboxadmin.quota.submit":"Update","mailboxadmin.quota.label":"Storage","mailboxadmin.details.title":"Addresses and permissions","mailboxadmin.details.receives":"Receives mail via","mailboxadmin.details.primary_only":"Primary address only","mailboxadmin.details.roles":"Admin roles","mailboxadmin.details.regular_user":"Regular user","mailboxadmin.details.infrastructure":"Infrastructure","mailboxadmin.details.created":"Created","infra.status.active":"Accepting mailboxes","infra.status.draining":"Not accepting new","infra.status.offline":"Offline","infra.eyebrow":"Zomail operations","infra.title":"Mail storage infrastructure","infra.lead":"New mailboxes are placed automatically on the least-loaded shard in the same region; when a shard is full they overflow to another shard in that region.","infra.shards.title":"Shards","infra.shards.hint":"Utilisation = the higher of mailbox count and allocated storage relative to capacity.","infra.col.shard":"Shard","infra.col.region":"Region","infra.col.mailboxes":"Mailboxes","infra.col.allocated":"Quota allocated","infra.col.utilisation":"Utilisation","infra.col.status":"Status","infra.drain":"Stop accepting new","infra.undrain":"Accept new","infra.sizing.title":"Infrastructure estimate","infra.sizing.hint":"Enter the expected scale to see how many shards, servers and proxies you need.","infra.drive_sizing.title":"Drive (self-hosted S3 cluster)","infra.drive_sizing.hint":"Storage nodes, gateways and backup site for SeaweedFS — see docs/storage-cluster.md.","infra.add.title":"Register a shard by hand (advanced)","infra.add.hint":"Only for a Dovecot server built outside the installer: no agent, no Mail HA, no automatic capacity. New servers: use Add server → Mail shard. Enter the server's real capacity (there is no default) and make sure LMTP/IMAP are reachable before adding it.","infra.add.submit":"Add shard","infra.add.id":"Shard ID","infra.add.region":"Region","infra.add.proxy":"Proxy host : port (if on a different network)","infra.add.capacity_mailboxes":"Maximum mailboxes","infra.add.capacity_gb":"Allocatable storage (GB)","sizing.field.mailboxes":"Mailboxes","sizing.field.avgUsedGb":"Average storage used / mailbox (GB)","sizing.field.peakActiveRatio":"Users online at peak","sizing.field.connectionsPerActiveUser":"IMAP connections / online user","sizing.field.compressionSaving":"Savings from zstd compression","sizing.field.replicas":"Replicas (HA)","sizing.field.headroom":"Storage headroom","sizing.field.shardUsableTb":"Usable NVMe / shard (TB)","sizing.field.shardRamGb":"RAM / shard (GB)","sizing.field.shardMaxMailboxes":"Maximum mailboxes / shard (estimate)","sizing.limit.storage":"storage capacity","sizing.limit.mailboxes":"mailboxes / shard","sizing.limit.memory":"RAM (concurrent connections)","sizing.shards":"Shards needed","sizing.shards.hint":"limited by {limit}","sizing.servers":"Storage servers","sizing.servers.hint":"{replicas} replicas / shard","sizing.proxies":"IMAP proxies","sizing.proxies.hint":"{connections} peak connections","sizing.data":"Data","sizing.data.hint":"{tb} TB of disk after compression × replicas + headroom","sizing.breakdown":"By storage: {storage} shards · by mailbox count: {mailboxes} · by RAM: {memory}.","sizing.calibrate":"These are estimates, not measurements: calibrate them with a load test on the real hardware (one test shard pair saturated at a 5,000-user peak) and with real figures from {metrics}.","sizing.drive.field.users":"Drive users","sizing.drive.field.avgDriveGb":"Average actual data / user (GB)","sizing.drive.field.versionOverhead":"Versions + trash","sizing.drive.field.replicas":"Replicas in the cluster","sizing.drive.field.headroom":"Storage headroom","sizing.drive.field.nodeUsableTb":"Usable disk / storage node (TB)","sizing.drive.field.filesPerUser":"Files (including versions) / user","sizing.drive.nodes":"Storage nodes","sizing.drive.nodes.hint":"{tb} TB of disk ({replicas} replicas + headroom)","sizing.drive.gateways":"S3 gateways","sizing.drive.gateways.hint":"+ {masters} masters (can share the gateway machines)","sizing.drive.backup":"Backup site","sizing.drive.backup.value.one":"{count} node","sizing.drive.backup.value.other":"{count} nodes","sizing.drive.backup.hint":"{tb} TB, 1 copy in another datacenter","sizing.drive.data":"Data","sizing.drive.data.hint":"PostgreSQL metadata ≈ {gb} GB","adminui.plan.basic":"Basic","adminui.plan.pro":"Pro","adminui.plan.private":"Private Server","adminui.tenant_status.trial":"Trial","adminui.tenant_status.active":"Active","adminui.tenant_status.suspended":"Suspended","ops.alert.generic":"System alert — see the technical details below","ops.error.generic":"That did not work. Try again later.","ops.dns_issue.missing":"{record} missing","ops.dns_issue.mismatch":"{record} has the wrong value","ops.dns_issue.unchecked":"{record} not checked yet","ops.check.dns_a":"A record","ops.check.dns_mx":"MX record","ops.check.dns_spf":"SPF","ops.check.dns_dmarc":"DMARC","ops.check.dns_ptr":"PTR (reverse DNS)","ops.check.ports":"ports (server IP unknown)","ops.check.port":"{name} port","ops.check.tls":"HTTPS certificate","ops.service.database":"database","ops.service.mail":"mail server (IMAP)","ops.problem.no_domain":"The domain {domain} does not exist","ops.problem.null_mx":"{domain} does not accept email (null MX)","ops.problem.paused":"Delivery to {domain} is paused by an administrator","ops.problem.no_route":"No outbound route is configured","ops.problem.relay_refused":"Refused by the relay","ops.problem.no_answer":"The receiving server did not answer","ops.problem.bad_address":"Invalid recipient address","ops.problem.routing":"Routing temporarily unavailable","ops.problem.timeout":"The receiving server timed out","ops.problem.refused":"The receiving server refused the connection","ops.problem.smtp_permanent":"The receiving server rejected the message (code {code})","ops.problem.smtp_temporary":"The receiving server deferred the message (code {code})","ops.problem.other":"The receiving server reported an error","ops.blocklists.refused":"The list refused the query — use a private DNS resolver","ops.blocklists.lookup_failed":"Lookup failed","ops.blocklists.reason":"Reason given by the list","adminui.error.target_role_not_lower":"You can only act on mailboxes whose administrator role is lower than yours.","adminui.error.target_platform_admin":"This is a Zomail administrator's mailbox — only Zomail can act on it.","adminui.error.cannot_reset_own_password":"Change your own password in account settings.","adminui.error.password_too_weak":"The password is too easy to guess. Mix upper and lower case, digits and symbols; avoid common words. With a long password only the first 72 bytes are used (an accented letter takes 2–3 bytes), so the beginning must be strong on its own.","adminui.error.password_contains_name":"The password must not contain the user's name or e-mail address.","adminui.error.password_too_long":"The password can have at most {max} characters.","adminui.error.password_too_short":"The password needs at least {min} characters.","adminui.error.shared_mailbox_no_password":"Shared mailboxes have no password — members open them through delegation.","adminui.error.ai_not_in_plan":"The current plan does not include AI. Upgrade the plan to turn AI on.","adminui.error.role_target_platform_admin":"This mailbox belongs to a Zomail administrator and cannot get a customer role.","adminui.success.revoke-drive-link":"Public link revoked.","tenant.drive.public_links.title":"Active public links ({count})","tenant.drive.public_links.hint":"Anyone with a link can view/download the file. Links stop working while the owner or the organisation is suspended.","tenant.drive.public_links.empty":"No public links.","tenant.drive.public_links.expires":"expires {date}","tenant.drive.public_links.never":"never expires","tenant.drive.public_links.revoke":"Revoke","tenant.drive.public_links.revoke.confirm":"Revoke the public link to “{name}”? Anyone holding it will no longer be able to open it.","ops.probe.web":"web app","ops.probe.api":"API","ops.probe.smtp_mx":"inbound SMTP (port 25)","ops.probe.smtp_submission":"SMTP submission","ops.probe.imap":"IMAP","ops.probe.calendar":"calendar","ops.probe.drive":"Drive","ops.probe.meet":"Meet","ops.probe_error.http":"returned HTTP {code}","ops.probe_error.timeout":"timed out","ops.probe_error.connect":"could not connect","ops.probe_error.tls":"certificate/TLS error","ops.probe_error.other":"unexpected response","ops.holds.platform_only":"Automatic hold (possibly compromised account): only Zomail support can release it. Reset the password, check devices, then contact support.","adminui.error.hold_platform_only":"Automatic sending holds can only be released by Zomail support. Contact support after resetting the password.","adminui.error.dkim_zone_not_configured":"No DKIM zone (dkim.<platform>) is configured — set it, then check again.","adminui.error.dns_setup_unavailable":"DNS setup is not ready (database not migrated) — run the migrations, then try again.","adminui.error.zone_check_empty":"No NS records for the DKIM zone yet — delegate the zone to the cluster as described, then check again.","adminui.error.zone_check_mismatch":"The DKIM zone is delegated to other name servers — fix the NS records as described, then check again.","adminui.error.signing_key_missing":"No Domain Connect signing key yet — create it (Admin → Deliverability → DNS setup) before enabling.","adminui.error.bad_domainconnect_record":"The DNS provider's _domainconnect record is invalid — add the records manually.","adminui.error.settings_invalid":"The DNS provider returned invalid Domain Connect settings — add the records manually.","adminui.error.invalid_fill_target":"Invalid fill target.","adminui.error.invalid_growth_horizon":"Invalid growth horizon.","adminui.error.invalid_overcommit_cap":"Invalid overcommit cap.","adminui.error.invalid_policy_bytes":"Invalid size in the policy.","ops.alert.platform.worker_host":"Worker \"{kind}\" on {host} silent for {minutes} min (the others still run)","ops.pb.platform.worker_host.cause":"The worker on one machine (usually an entry point/edge) stopped, hung, or its machine went down; the other machines' workers still run, so the queue moves, more slowly.","ops.pb.platform.worker_host.impact":"Less sending/import capacity; periodic jobs run on the remaining machines only. If that machine was removed or reinstalled, the alert clears by itself after 24 hours.","ops.pb.platform.worker_host.steps":"Find the machine: the name in the alert is the worker container's id (docker ps --filter name=worker on each app/edge machine).\nRead the logs and restart it: ./novamail-node restart on that machine (control node: docker compose restart worker in /opt/novamail-cluster).\nIf it recurs: check the machine's RAM/disk (Infrastructure) and the last error in the log.","backups.error.target_role_not_lower":"You can only restore your own mailbox or one whose administrator role is lower than yours.","backups.error.target_platform_admin":"This is a Zomail administrator's mailbox — only Zomail can restore it.","domain.dkim.mode_cname":"DKIM by CNAME.","domain.dkim.mode_txt":"DKIM by TXT record.","domain.dkim.cname_hint":"Zomail holds the keys and rotates them every {days} days — the two CNAMEs zm1/zm2 never change.","domain.dkim.cname_hint_manual":"Zomail holds the keys; rotate them with “Rotate DKIM key” — the two CNAMEs zm1/zm2 never change.","domain.dkim.txt_hint":"Each key rotation needs a new TXT record from you. Switch to CNAME and Zomail rotates keys without DNS changes.","domain.dkim.pending_cname":"New key {selector} is published; Zomail switches signing to it once DNS serves it (needs the {selector} CNAME).","domain.dkim.pending_txt":"New key {selector} waits for its TXT record; Zomail switches signing to it once DNS serves it.","domain.dkim.switch_cname":"Switch to DKIM by CNAME","domain.dkim.switch_txt":"Switch back to DKIM by TXT","domain.dkim.switch_cname_confirm":"Add the two CNAME records zm1/zm2 shown in the table below. Mail stays signed with the current key until DNS serves the CNAMEs. Continue?","domain.dkim.switch_txt_confirm":"You will have to add a new TXT record (shown below) and rotate keys yourself from now on. Mail stays signed with the current key until DNS serves the TXT. Continue?","domain.connect.title":"Your DNS provider ({provider}) supports automatic setup","domain.connect.hint":"Press the button, sign in at your DNS provider and confirm: Zomail's records are added for you, then you come back to this page.","domain.connect.mx_warning":"Note: the existing MX records are replaced — new mail moves to Zomail as soon as you confirm.","domain.connect.button":"Configure automatically","domain.connect.not_onboarded":"The domain's DNS is at {provider}, which supports automatic setup (Domain Connect) but has not onboarded Zomail's template yet. Use the DNS file below for now.","domain.connect.result.applied":"Your DNS provider added the records. The table below was checked again (DNS can take a few minutes to update everywhere).","domain.connect.result.denied":"You cancelled, or the DNS provider refused the change. Try again or use the DNS file.","domain.connect.result.failed":"The DNS provider reported an error while applying. Try again or use the DNS file.","domain.connect.result.invalid":"The return link is not valid (expired, or not for this domain).","dnssetup.title":"DNS setup for customers","dnssetup.lead":"DKIM by CNAME: customers' keys are published in Zomail's own DNS zone and rotated automatically. Domain Connect: the “Configure automatically” button on the domain page.","dnssetup.zone":"DKIM zone","dnssetup.delegation":"NS delegation","dnssetup.delegation_ok":"Working","dnssetup.delegation_missing":"Not working","dnssetup.checked":"checked {time}","dnssetup.listen":"DNS server (port 53)","dnssetup.listen_on":"Listening on the public IPs","dnssetup.listen_off":"Not enabled (run zomail-cluster dns on the control server)","dnssetup.howto":"Run “zomail-cluster dns” on the control server: it enables the DNS server (port 53) and prints the NS + A records to add once to the platform domain's zone (e.g. at Cloudflare) to delegate {zone}. Until then new domains use DKIM by TXT.","dnssetup.check_now":"Check again","dnssetup.rotation":"Automatic DKIM rotation (CNAME)","dnssetup.rotation_days":"every {days} days","dnssetup.rotation_manual":"only with “Rotate key”","dnssetup.save_rotation":"Save","dnssetup.dc_title":"Domain Connect","dnssetup.dc_lead":"The template {provider}.mail.json must be accepted into the Domain-Connect/Templates repository and onboarded by each DNS provider (Cloudflare, GoDaddy, IONOS…). Enable only once at least one provider accepted it; where a provider has no template yet the domain page keeps offering the DNS file.","dnssetup.dc_on":"On: “Configure automatically” appears when the customer's DNS provider supports the template.","dnssetup.dc_off":"Off.","dnssetup.dc_enable":"Enable Domain Connect","dnssetup.dc_disable":"Disable Domain Connect","dnssetup.dc_enable_confirm":"Enable only once the template is accepted (the PR to Domain-Connect/Templates merged and a provider onboarded it). Continue?","dnssetup.dc_template":"Template and signing key","dnssetup.dc_key":"Zomail publishes the request-signing public key itself at TXT {name}.","mailboxadmin.mfa.title":"2-step verification","mailboxadmin.mfa.hint":"For a user who lost both the phone and the recovery codes. Removes the authenticator app and every recovery code; signs out every session, app password and mobile device; the user is told by mail (at the recovery email too).","mailboxadmin.mfa.on":"On.","mailboxadmin.mfa.off":"Not on — nothing to reset.","mailboxadmin.mfa.self":"Your own mailbox: turn off or replace 2-step verification in Settings → Security.","mailboxadmin.mfa.no_role":"Only the organisation's owner/administrators, a superadmin or Zomail support can reset it.","mailboxadmin.mfa.verify_identity":"Before you press it, make sure the requester really owns the mailbox (call back a known number, ask their manager) — account thieves also report a \"lost phone\".","mailboxadmin.mfa.reenroll":"The next sign-in needs only the password. Administrators (and users where the organisation requires 2-step verification for the mobile app) must turn it on again before going on.","mailboxadmin.mfa.submit":"Reset 2-step verification","mailboxadmin.mfa.confirm":"Reset the 2-step verification of {address}? The user is signed out on every device and must turn 2-step verification on again.","mailboxadmin.status.support_hint":"Zomail support can only suspend a mailbox (in an incident, after confirming it's you); the organisation's administrators or a superadmin reactivate it.","adminui.success.reset-mfa":"2-step verification reset. The user was signed out on every device and told by mail.","adminui.error.cannot_reset_own_mfa":"You can't reset your own 2-step verification here — use Settings → Security.","adminui.error.mfa_not_enabled":"This mailbox has no 2-step verification — nothing to reset.","adminui.error.mfa_reset_forbidden":"Only the organisation's owner/administrators, a superadmin or Zomail support can reset 2-step verification.","adminui.error.mfa_reset_unavailable":"This server can't reset 2-step verification yet (needs 0.10.100).","adminui.error.reactivate_tenant_only":"Zomail support can only suspend; the organisation's administrators or a superadmin reactivate the mailbox.","fleet.new":"New private server","fleet.new.lead":"Fill this in once and get one command. Run it on the customer's server (Ubuntu/Debian, as root): everything else is automatic and you can follow the progress here.","fleet.open":"Details","fleet.section.customer":"1. Customer","fleet.customer.existing":"Existing private customer","fleet.customer.new":"New customer","fleet.customer.name":"Customer name","fleet.customer.seats":"Licensed users","fleet.customer.mail_gb":"Licensed mail storage (GB)","fleet.customer.drive_gb":"Drive storage (GB)","fleet.customer.unlimited":"Leave empty for unlimited","fleet.section.server":"2. Server and domain","fleet.server.name":"Server name (for your reference)","fleet.server.domain":"Customer's email domain","fleet.server.mail_host":"Mail server address","fleet.server.mail_host.hint":"Defaults to mail.<domain>. Web mail, IMAP and SMTP all use this address.","fleet.server.admin_email":"First administrator's email","fleet.server.admin_name":"Administrator's name","fleet.section.delivery":"3. Certificate and outgoing mail","fleet.tls.acme":"Free public certificate (Let's Encrypt) — ports 80 and 443 must be open","fleet.tls.internal":"Internal certificate — for private networks only; users must install the CA","fleet.tls.email":"Email for certificate notices","fleet.outbound.direct":"Deliver directly to recipients' servers — needs outbound port 25 and a PTR record","fleet.outbound.relay":"Send through the Zomail relay — better inbox placement, no outbound port 25 needed","fleet.outbound.relay_off":"The Zomail relay is not configured on this system","fleet.section.updates":"4. Updates and licence","fleet.updates.auto":"Install new versions automatically (backup first, automatic rollback on failure)","fleet.updates.window":"Hours when restarts are allowed","fleet.license.expires":"Licence expires (optional)","fleet.advanced":"Advanced: service ports","fleet.ports.http":"HTTP (certificate issuance)","fleet.ports.https":"HTTPS","fleet.ports.smtp":"SMTP (inbound)","fleet.ports.imaps":"IMAPS","fleet.ports.submission":"Submission","fleet.ports.submissions":"Submissions (TLS)","fleet.create":"Create install command","fleet.creating":"Creating…","fleet.command.title":"Run this command on the customer's server","fleet.command.hint":"Single use, expires in {hours} hours. Don't share it publicly — anyone with it can install this server.","fleet.command.copy":"Copy","fleet.command.copied":"Copied","fleet.command.new":"New install command","fleet.command.new.hint":"The previous command stops working.","fleet.progress":"Installation progress","fleet.progress.waiting":"Waiting for the server to run the command…","fleet.progress.running":"Installing","fleet.progress.failed":"Installation failed","fleet.progress.done":"Installed","fleet.progress.failed.hint":"Fix the problem on the server and run the same command again (it is safe to re-run). If the command has expired, create a new one.","fleet.progress.log":"Error log","fleet.step.preflight":"Server check","fleet.step.docker":"Docker","fleet.step.download":"Download","fleet.step.configure":"Secrets and configuration","fleet.step.start":"Start services","fleet.step.enroll":"Link to Zomail","fleet.step.bootstrap":"Domain and administrator","fleet.step.services":"Service health","fleet.step.done":"Finished","fleet.status.running":"running","fleet.status.ok":"done","fleet.status.warning":"warning","fleet.status.failed":"failed","fleet.detail.preflight":"{cpus} CPU · {ramMb} MB RAM · {diskGb} GB free · {os}/{arch}","fleet.detail.low_ram":"Low memory — 8 GB recommended","fleet.detail.low_disk":"Low disk space","fleet.detail.admin":"Administrator: {admin} (password shown on the server's terminal)","fleet.detail.url":"Address: {url}","fleet.detail.version":"Version {version}","fleet.error.unsupported_os":"Unsupported operating system — Linux required (Ubuntu 22.04+/Debian 12+)","fleet.error.not_root":"Must run as root (sudo)","fleet.error.docker_missing":"Docker is not installed","fleet.error.docker_not_running":"Docker is not running","fleet.error.compose_missing":"Docker Compose is missing","fleet.error.invalid_token":"The command expired or was already used — create a new one","fleet.error.bundle_download":"Could not download the Zomail bundle","fleet.error.api_not_ready":"The API did not start","fleet.checks":"Outside checks","fleet.checks.hint":"Zomail checks what the internet sees: DNS, ports and the certificate. Runs after installation and every 6 hours.","fleet.checks.run":"Check now","fleet.checks.never":"Not checked yet.","fleet.checks.at":"Checked {date}","fleet.check.dns_a_ok":"{host} points to {found}","fleet.check.dns_a_missing":"{host} has no A record (should point to {ip})","fleet.check.dns_a_mismatch":"{host} points to {found}, but the server's IP is {ip}","fleet.check.dns_mx_ok":"MX for {domain} points to {host}","fleet.check.dns_mx_missing":"{domain} has no MX record — it cannot receive mail","fleet.check.dns_mx_elsewhere":"MX for {domain} points to {found}, not {host}","fleet.check.dns_spf_ok":"{domain} has SPF","fleet.check.dns_spf_missing":"{domain} has no SPF — outgoing mail may land in spam","fleet.check.dns_spf_invalid":"The SPF record of {domain} is not valid ({found}) — \"v=spf1\" must be followed by a space; receivers treat the domain as having no SPF. The downloaded DNS file has the correct record to import","fleet.check.dns_spf_multiple":"{domain} has several SPF records ({found}) — merge them into one, or SPF fails","fleet.check.dns_spf_not_this_server":"The SPF record of {domain} ({found}) does not let {host} send — add a:{host} to it (do not create a second record)","fleet.check.dns_dmarc_ok":"{domain} has DMARC","fleet.check.dns_dmarc_missing":"{domain} has no DMARC","fleet.check.dns_dmarc_invalid":"The DMARC record of {domain} is not valid ({found}) — it must start with \"v=DMARC1;\"; receivers treat the domain as having no DMARC. The downloaded DNS file has the correct record to import","fleet.check.dns_ptr_ok":"PTR for {ip} is {host}","fleet.check.dns_ptr_wrong":"PTR for {ip} is not {host} (currently: {found}) — ask the hosting provider","fleet.check.port_open":"Port {name} ({port}) is open","fleet.check.port_closed":"Port {name} ({port}) is closed or blocked from the internet","fleet.check.ports_unknown_address":"The server's IP address is not known yet","fleet.check.tls_ok":"Certificate valid ({days} days left)","fleet.check.tls_untrusted":"Certificate not trusted ({reason})","fleet.check.tls_expiring":"Certificate expires soon ({days} days left)","fleet.check.tls_unreachable":"Could not connect to {host} over HTTPS","fleet.dns":"DNS records to create","fleet.dns.hint":"Create these where the customer manages the domain, or download the DNS file and import it: it is checked live at the domain's own DNS servers and records that already exist are commented out, so importing it again is safe. DKIM: the public key the server reports to Zomail is in the file; until then it is in the server's admin console.","fleet.dns.ptr":"Ask the hosting provider to set the IP's PTR (reverse DNS) to {host}","fleet.dns.dkim":"DKIM (from the server)","fleet.dns.dkim.at":"reported {date}","fleet.dns.dkim.stale":"reported {date} — over 7 days ago, not included in the DNS file","fleet.dns.dkim.status.active":"in use","fleet.dns.dkim.status.next":"new key (not signing yet)","fleet.dns.dkim.status.retiring":"previous key (being replaced)","fleet.dns.dkim.none":"The server has not reported a DKIM key yet (needs a release after 0.10.91). Get the DKIM record in the server's admin console.","fleet.updates":"Version and updates","fleet.updates.current":"Running {version}","fleet.updates.target":"Target version {version}","fleet.updates.latest":"Always the latest stable release","fleet.updates.pin":"Pin to version","fleet.updates.save":"Save","fleet.updates.state.running":"Updating {from} → {to}","fleet.updates.state.done":"Updated to {to} at {at}","fleet.updates.state.rolled_back":"Update to {to} failed and was rolled back automatically — {error}","fleet.updates.state.failed":"Update to {to} failed — {error}","fleet.releases":"Releases","fleet.releases.hint":"Private servers update themselves to the latest stable release during their update window (unless pinned).","fleet.releases.none":"No release published yet. New servers use the default image.","fleet.releases.version":"Version","fleet.releases.image":"Image","fleet.releases.channel":"Channel","fleet.releases.notes":"Notes","fleet.releases.publish":"Publish","fleet.releases.image_hint":"Only the cluster registry's novamail/app image, pinned by digest: <registry>/novamail/app:<version>@sha256:<64 hex> (get the digest: crane digest <registry>/novamail/app:<version>). Needs a superadmin and re-authentication.","fleet.releases.published":"Published. Private servers update themselves in their update window (signed offer).","fleet.releases.error.generic":"This release could not be published.","fleet.releases.error.image_not_pinned":"The image must be pinned by digest: <registry>/novamail/app:<version>@sha256:<64 hex>.","fleet.releases.error.image_not_platform_registry":"The image must come from the cluster's own registry (NODE_REGISTRY_HOST), not another one.","fleet.releases.error.registry_not_configured":"The cluster has no image registry yet (no release loaded with release-load).","fleet.releases.error.forbidden":"Only a superadmin (platform.secrets) may publish a release to Private servers.","fleet.releases.error.invalid_request":"Invalid version or image.","fleet.install_state.waiting":"Waiting","fleet.install_state.running":"Installing","fleet.install_state.failed":"Install failed","fleet.install_state.done":"Installed","fleet.error.generic":"That didn't work. Please check the details.","fleet.error.conflict":"This domain is already used elsewhere, or this customer already has a private server.","fleet.error.not_private":"This customer is not on the Private plan.","fleet.error.site_removed":"This customer's server was removed: for a new server choose \"+ New customer\".","fleet.error.previous_install_data":"The server still holds the data (Docker volumes) of an earlier Zomail install — remove it first (novamail-private uninstall, handbook 05 §8).","fleet.error.control_plane_only":"This server does not know where the control node is (NODE_CONTROL_MESH_HOST missing). Open the admin on the control node, or set it and restart.","fleet.error.control_plane_unreachable":"The control node did not answer (Private sites are managed by the control node). Check the control node and the private network, then try again.","ops.sites.removed":"Removed","fleet.remove.title":"Remove this server","fleet.remove.lead":"When the customer leaves, or before the server is reinstalled for another domain. This cannot be undone.","fleet.remove.effects":"The customer's licence is revoked; the server can no longer talk to Zomail (its key, install command and rebuild command stop working, the backup key Zomail holds is deleted); no more alerts for it; the domain {domain} is released. History, licences, orders and invoices are kept.","fleet.remove.machine":"Then, on the customer's server: cd /opt/novamail && ./novamail-private uninstall --yes-remove-this-site (final backup, then a clean removal).","fleet.remove.open":"Remove server…","fleet.remove.type_domain":"Type the domain {domain} to confirm","fleet.remove.reason":"Reason (optional)","fleet.remove.submit":"Remove for good","fleet.remove.no_permission":"Only staff with both infrastructure and billing rights (superadmin) can remove a server.","fleet.remove.done":"The server is removed from Zomail. One step left on the server itself: ./novamail-private uninstall --yes-remove-this-site.","fleet.removed.banner":"Removed on {at} by {by}. This server no longer talks to Zomail; the page is kept for reference.","fleet.remove.error.confirmation_mismatch":"The domain you typed does not match.","fleet.remove.error.site_removed":"This server was already removed.","fleet.remove.error.forbidden":"You are not allowed to remove servers (infrastructure and billing rights needed).","fleet.remove.error.not_found":"Server not found.","fleet.remove.error.generic":"Could not remove it ({code}).","fleet.update_error.health":"the new version failed its health checks","fleet.update_error.download":"the update could not be downloaded","fleet.update_error.services":"services did not start","fleet.update_error.migrations":"database migrations failed","fleet.update_error.unknown":"unknown error","fleet.update_result.rolled_back":"rolled back to the previous version","fleet.update_result.failed":"failed","fleet.licences.title":"Licences","fleet.licences.hint":"This customer's Private Mail licences (Revenue & plans → Private Mail licences). Open one for its term, mailbox count, token and renewal.","fleet.licences.none":"No licence is attached to this customer yet.","fleet.licences.new":"Sell / issue a licence","fleet.licences.line":"{max} mailboxes · valid until {until}","fleet.error.relay_not_configured":"The platform relay (FLEET_RELAY_HOST) or per-site relay logins are not configured.","fleet.error.relay_not_used":"This server does not send through the Zomail relay.","fleet.error.relay_sync_disabled":"Relay login sync is not enabled (FLEET_RELAY_SYNC_TOKEN).","fleet.error.offer_unsigned":"The setup from Zomail is not signed — not installed (the control plane lacks its signing key or the image is not pinned; re-run with --allow-unsigned if you trust this network).","fleet.error.offer_invalid":"The install offer's signature is invalid or expired — not installed.","fleet.error.offer_mismatch":"The setup does not match what Zomail signed for this command.","fleet.error.image_not_pinned":"The image is not pinned by digest — not installed.","fleet.error.bundle_mismatch":"The downloaded bundle is not the one Zomail signed — not extracted.","fleet.error.image_digest_mismatch":"The pulled image does not have the signed digest — not installed.","domain.purpose.mta_sts_host":"MTA-STS (policy host)","domain.purpose.mta_sts":"MTA-STS","domain.purpose.tls_rpt":"TLS reporting (TLS-RPT)","domain.purpose.dmarc_report_auth":"DMARC — reports for other domains","domain.dns.hint.dmarc_report_auth_wildcard":"Lets receivers send the DMARC reports of every domain hosted here to {address} (RFC 7489 §7.1): without it they silently drop them and Admin → DMARC stays empty. One wildcard record covers every domain.","domain.dns.hint.mta_sts_host":"Serves the MTA-STS policy (https://mta-sts.<domain>) so senders know mail to the domain must be encrypted.","domain.dns.hint.mta_sts":"Announces the MTA-STS policy ({mode} mode); the id changes when Zomail changes the policy.","domain.dns.hint.mta_sts_outdated":"The MTA-STS id is outdated or duplicated — replace it with this value so senders fetch the current policy.","domain.dns.hint.tls_rpt":"Optional: senders email daily reports about encryption problems reaching the domain.","domain.dns.hint.tls_rpt_multiple":"Only one TLS-RPT record is allowed.","domain.dns.hint.tls_rpt_other_address":"The TLS-RPT record sends reports to another address ({found}). Replace it with the value shown here (keep yours only if you collect the reports elsewhere on purpose).","ops.alert.delivery.tls":"{destination}: {failures} TLS/MTA-STS failures in 3 h ({mode} mode: {results})","mailflow.ops.rate_limited":"{count} rate-limited","mailflow.ops.tls_failures":"{count} TLS/MTA-STS failures","sendx.error.message_infected":"The message contains malware ({signature}) and was not sent. Remove the infected attachment and try again.","mailflow.platform.title":"System mail","mailflow.platform.hint":"Alerts, status updates, billing, sign-up codes and delivery reports are sent from {domain} (return path {envelope}) and DKIM-signed with the key below. Publish this DNS record so they do not land in spam.","mailflow.platform.no_key":"No DKIM key for the platform domain yet (needs DKIM_ENCRYPTION_KEY; the worker creates it at start-up).","mailflow.platform.queue":"Queue: {queued} waiting, {failed} failed in the last 24 hours","mailflow.platform.postmaster":"mail to the platform's postmaster/abuse goes to {address}","mailflow.platform.no_postmaster":"no platform postmaster address configured (PLATFORM_POSTMASTER)","mailflow.platform.records":"DNS records for system mail","mailflow.platform.status.active":"signs now","mailflow.platform.status.next":"new key: add now, signs once DNS serves it","mailflow.platform.status.retiring":"previous key: keep 7 days","mailflow.platform.status.standby":"standby selector for the next rotation: add now","mailflow.platform.status.helo_spf":"SPF for the sending host name (delivery reports leave with an empty sender)","signup.result.dns.verifyFirst":"Verify your domain first: until {domain} is verified (the records below), the mailbox can send only within your organisation; mail to outside addresses is refused.","junk.op.report_spam":"Report spam","junk.op.not_spam":"Not spam","junk.remember.block":"Always block this sender","junk.remember.allow":"Never send this sender to spam","junk.remember.block_bulk":"Always block these senders","junk.remember.allow_bulk":"Never send these senders to spam","junk.notice.reported_spam":"Moved to Spam. Thanks — the filter will learn from this report.","junk.notice.reported_spam_blocked":"Moved to Spam and the sender is blocked. New mail from them goes to Spam.","junk.notice.reported_ham":"Moved to the Inbox. The filter will learn from this report.","junk.notice.reported_ham_allowed":"Moved to the Inbox. Mail from this sender won't go to Spam again.","junk.notice.rate_limited":"You've reported too many messages this hour. Please try again later.","junk.notice.too_many":"You can report up to 50 messages at a time.","junk.settings.title":"Blocked and trusted senders","junk.settings.hint":"Mail from blocked senders always goes to Spam; mail from trusted senders never does. Applied on delivery, on every device.","junk.settings.blocked":"Blocked","junk.settings.allowed":"Trusted","junk.settings.empty":"No senders yet. Use “Report spam” / “Not spam”, or add one below.","junk.settings.sender":"Address or domain","junk.settings.sender_placeholder":"name@company.com or company.com","junk.settings.kind":"List","junk.settings.add":"Add","junk.settings.remove":"Remove","junk.settings.domain":"whole domain","junk.settings.from_report":"from a report","junk.settings.pending":"Applying to the mail server…","junk.settings.apply_error":"Not applied to the mail server yet; it will be retried automatically.","junk.settings.added":"Saved.","junk.error.invalid_sender":"Enter a valid email address or domain.","junk.error.sender_rules_full":"The lists are full (at most {max} senders). Remove some first.","junk.error.sender_rule_not_found":"That sender isn't in the lists.","junk.error.report_folder_invalid":"Messages in this folder can't be reported.","junk.error.junk_rate_limited":"You've reported too many messages this hour. Please try again later.","junk.error.failed":"Couldn't save. Please try again.","trace.state.pending":"Waiting to be sent","trace.state.deferred":"Retrying","trace.state.failed":"Not delivered","trace.state.cancelled":"Cancelled","trace.state.delivered":"Delivered","trace.state.delivered.local":"Delivered to the recipient's mailbox","trace.state.delivered.direct":"Accepted by the recipient's server","trace.state.delivered.relay":"Handed to the relay server","trace.summary.delivered.one":"{count} delivered","trace.summary.delivered.other":"{count} delivered","trace.summary.waiting.one":"{count} waiting","trace.summary.waiting.other":"{count} waiting","trace.summary.failed.one":"{count} failed","trace.summary.failed.other":"{count} failed","trace.summary.cancelled.one":"{count} cancelled","trace.summary.cancelled.other":"{count} cancelled","trace.next_retry.one":"Tried {count} time · next attempt at {time}","trace.next_retry.other":"Tried {count} times · next attempt at {time}","trace.attempts.one":"{count} attempt","trace.attempts.other":"{count} attempts","trace.bounce_sent":"failure notice sent","trace.raw":"Server's original reply","trace.action.retry":"Retry now","trace.action.cancel":"Cancel","trace.action.cancel.confirm":"Cancel sending this message? Recipients who haven't received it yet won't get it.","trace.outbox.done.retry":"The message will be retried in a moment.","trace.outbox.done.cancel":"Sending cancelled.","trace.why.ok":"Delivered successfully.","trace.why.cancelled":"You cancelled this message.","trace.why.paused":"An administrator has paused delivery to this domain; it will be sent automatically once resumed.","trace.why.postmaster":"An administrator removed the message from the queue.","trace.why.no_mailbox":"The recipient's address doesn't exist. Check the spelling.","trace.why.no_domain":"The recipient's domain doesn't exist or doesn't accept email.","trace.why.bad_address":"The recipient's address is not valid.","trace.why.mailbox_disabled":"The recipient's mailbox is suspended or no longer in use.","trace.why.mailbox_full":"The recipient's mailbox is full.","trace.why.too_large":"The message is larger than the recipient's server accepts.","trace.why.unreachable":"Couldn't reach the recipient's server yet; it will retry automatically.","trace.why.expired":"Retried for a long time without success.","trace.why.spam_block":"The recipient's server blocked the message as suspected spam or because of a blocklist.","trace.why.auth":"The recipient's server refused it because it failed authentication checks (SPF/DKIM/DMARC).","trace.why.policy":"The recipient's server refused the message under its own policy.","trace.why.rate_limited":"The recipient's server is temporarily limiting incoming mail; it will retry automatically.","trace.why.server_error":"The recipient's server has a temporary problem.","trace.why.no_route":"Outbound delivery isn't configured. Contact your administrator.","trace.why.rejected":"The recipient's server refused the message.","trace.why.temporary":"Temporary error; it will retry automatically.","trace.why.unknown":"Reason unknown; see the original reply below.","trace.error.generic":"That didn't work. Please try again.","trace.error.not_retryable":"This message is no longer waiting to be retried.","trace.error.not_cancellable":"Can't cancel: the message is being sent right now or has already been sent.","trace.error.submission_not_found":"Message not found.","trace.error.not_in_queue":"The message is no longer in the queue.","trace.error.validation_error":"The search criteria are not valid.","trace.error.forbidden":"You don't have permission to do that.","trace.error.not_found":"Not found.","trace.error.unreachable":"Couldn't reach the management server.","trace.error.invalid_session":"Your session has expired.","trace.nav":"Message trace","trace.eyebrow":"Mail flow","trace.title":"Message trace","trace.lead.platform":"Find outgoing and incoming messages across the platform and follow every processing step.","trace.lead.tenant":"Find your organisation's outgoing and incoming messages and follow every processing step.","trace.filter.direction":"Direction","trace.filter.sender":"Sender","trace.filter.recipient":"Recipient","trace.filter.message_id":"Message-ID","trace.filter.subject":"Subject contains","trace.filter.from":"From","trace.filter.to":"To","trace.filter.status":"Status","trace.filter.search":"Search","trace.filter.reset":"Clear","trace.direction.all":"All","trace.direction.outbound":"Outgoing","trace.direction.inbound":"Incoming","trace.status.any":"Any status","trace.status.delivered":"Delivered","trace.status.queued":"Queued","trace.status.deferred":"Retrying","trace.status.failed":"Failed","trace.status.rejected":"Rejected","trace.status.junk":"Junk","trace.results":"Results","trace.results.count.one":"{count} message (newest first)","trace.results.count.other":"{count} messages (newest first)","trace.results.empty":"No matching messages","trace.results.empty.hint":"Try looser criteria or a wider time range. The incoming log is kept for TRACE_RETENTION_DAYS.","trace.col.time":"Time","trace.col.direction":"Direction","trace.col.from":"Sender","trace.col.to":"Recipients","trace.col.subject":"Subject","trace.col.status":"Status","trace.col.route":"Route","trace.col.reply":"Reply","trace.col.domain":"Domain","trace.col.messages":"Messages","trace.col.oldest":"Oldest","trace.col.next":"Next attempt","trace.col.last_error":"Last error","trace.col.actions":"Actions","trace.col.waiting_for":"Waiting for","trace.col.age":"Waiting","trace.detail.not_found":"Message not found, or you don't have access to it.","trace.recipients":"Recipients","trace.timeline":"Timeline","trace.fact.sender":"Sender","trace.fact.tenant":"Organisation","trace.fact.size":"Size","trace.fact.attempts":"Attempts","trace.fact.sent_copy":"Sent folder copy","trace.fact.client":"Sending host","trace.fact.gateway":"Gateway / queue ID","trace.fact.spam":"Spam score · verdict","trace.fact.virus":"Virus","trace.fact.virus.none":"None found","trace.sent_copy.pending":"In progress","trace.sent_copy.saved":"Saved","trace.sent_copy.failed":"Failed","trace.sent_copy.skipped":"Not saved (the app saves its own copy, or the message failed)","trace.route.local":"Internal (LMTP)","trace.route.relay":"Relay server","trace.route.direct":"Direct to MX","trace.event.queued":"Message accepted into the sending queue","trace.event.completed":"Sending complete","trace.event.failed":"Finished: not delivered","trace.event.cancelled":"Cancelled by the sender","trace.event.bounced":"Failure notice sent to the sender ({recipient})","trace.event.bounce_requested":"Removed from the queue by administrator {who}","trace.event.recipient.delivered":"{recipient}: delivered via {route}","trace.event.recipient.deferred":"{recipient}: deferred ({route})","trace.event.recipient.failed":"{recipient}: failed ({route})","trace.event.connected":"Host {ip} connected to gateway {gateway}","trace.event.checked":"Virus, authentication and spam checks: {verdict}","trace.event.inbound.delivered":"{recipient}: delivered to the mailbox (cluster {cluster})","trace.event.inbound.junk":"{recipient}: delivered to Junk (cluster {cluster})","trace.event.inbound.rejected":"{recipient}: rejected","trace.event.inbound.deferred":"{recipient}: deferred, the sending server will retry","trace.verdict.accept":"clean","trace.verdict.junk":"spam","trace.verdict.reject":"rejected","trace.verdict.defer":"deferred","trace.verdict.rejected_virus":"virus found, rejected","trace.outcome.accepted":"Accepted","trace.outcome.junk":"Accepted into Junk","trace.outcome.rejected_spam":"Rejected: spam","trace.outcome.rejected_virus":"Rejected: virus","trace.outcome.rejected_policy":"Rejected: the sender's DMARC policy","trace.outcome.rejected_recipient":"Rejected: recipient doesn't exist or doesn't accept mail","trace.outcome.rejected_size":"Rejected: message too large","trace.outcome.rejected":"Rejected","trace.outcome.deferred":"Deferred","trace.outcome.failed":"Temporary delivery failure","trace.queue.nav":"Sending queue","trace.queue.title":"Sending queue","trace.queue.lead":"Messages not fully delivered yet, by destination domain. Retry, pause a domain, or remove a stuck message (the sender gets a failure notice).","trace.queue.domains":"By destination domain","trace.queue.domains.hint":"Paused: mail to that domain is held without using up retry attempts, and goes out automatically when resumed.","trace.queue.empty":"The queue is empty","trace.queue.messages_count.one":"{count} message","trace.queue.messages_count.other":"{count} messages","trace.queue.recipients_count.one":"{count} recipient","trace.queue.recipients_count.other":"{count} recipients","trace.queue.paused":"Paused","trace.queue.paused_by":"by {who} at {time}","trace.queue.pause_reason":"Reason (optional)","trace.queue.pause_other":"Pause a domain","trace.queue.messages":"Longest-waiting messages","trace.queue.messages_for":"Messages waiting for {domain}","trace.queue.messages.hint":"Removing a message from the queue sends the sender a normal failure notice.","trace.queue.all":"All domains","trace.queue.bouncing":"Being removed","trace.queue.done":"Done.","trace.action.retry_domain":"Retry domain","trace.action.pause":"Pause","trace.action.resume":"Resume","trace.action.bounce":"Remove & bounce","trace.action.bounce.confirm":"Remove this message from the queue? Recipients who haven't received it won't get it, and the sender gets a failure notice.","compose.chips.remove":"Remove {address}","compose.chips.invalid":"Invalid address: {address}","compose.chips.hint":"Press Enter or comma to add an address; Backspace removes the last one.","compose.chips.suggestions":"Suggestions from contacts","compose.error.invalid_address.one":"Invalid address: {addresses}. Fix or remove it, then send again.","compose.error.invalid_address.other":"{count} invalid addresses: {addresses}. Fix or remove them, then send again.","compose.send.shortcut":"Send (Ctrl+Enter)","richcompose.toolbar":"Text formatting","richcompose.bold":"Bold","richcompose.italic":"Italic","richcompose.underline":"Underline","richcompose.strike":"Strikethrough","richcompose.bullets":"Bulleted list","richcompose.numbers":"Numbered list","richcompose.quote":"Quote","richcompose.link":"Insert link","richcompose.clear":"Clear formatting","richcompose.color":"Text colour","richcompose.color.red":"Red","richcompose.color.orange":"Orange","richcompose.color.green":"Green","richcompose.color.blue":"Blue","richcompose.color.purple":"Purple","richcompose.color.gray":"Grey","richcompose.shortcut":"{label} ({keys})","richcompose.link.url":"Link address","richcompose.link.placeholder":"https://example.com or name@company.com","richcompose.link.apply":"Apply","richcompose.link.cancel":"Cancel","richcompose.link.remove":"Remove link","richcompose.link.invalid":"Only http://, https:// links or email addresses are allowed.","richcompose.mode.to_plain":"Plain text","richcompose.mode.to_rich":"Rich text","richcompose.mode.label":"Compose mode","richcompose.mode.confirm_plain":"Switching to plain text removes all formatting (bold, colours, links…). Continue?","richcompose.signature.insert":"Insert signature","migration.title":"Import mail from another account","migration.hint":"Copy all mail and folders from Gmail, Microsoft 365, Yahoo or any IMAP server into this mailbox. The old account is not changed.","migration.provider":"Provider","migration.provider.gmail":"Gmail / Google Workspace","migration.provider.microsoft":"Outlook / Microsoft 365","migration.provider.yahoo":"Yahoo Mail","migration.provider.custom":"Other IMAP server","migration.help.gmail":"Gmail does not accept your normal password. Turn on 2-Step Verification for the Google account, create an App password at myaccount.google.com/apppasswords and paste the 16 characters into the password field. For Google Workspace, the administrator must allow IMAP. Gmail limits downloads to about 2.5 GB per day: large mailboxes continue automatically the next day.","migration.help.microsoft":"Microsoft 365 and Outlook.com have turned off IMAP sign-in with a password for most accounts (OAuth only). If the connection is refused, ask your administrator to migrate your mail or export it to a PST file. Self-hosted (on-premises) Exchange with IMAP enabled still works with \"Other IMAP server\".","migration.help.yahoo":"Create an app password at login.yahoo.com → Account security → Generate app password, then paste it into the password field.","migration.help.custom":"Enter your old provider's IMAP server (usually imap.yourdomain.com, port 993 SSL/TLS). Ask your old provider if you are not sure.","migration.host":"IMAP server","migration.port":"Port","migration.security":"Security","migration.security.tls":"SSL/TLS","migration.security.starttls":"STARTTLS","migration.security.none":"None (testing only)","migration.username":"Username (old email address)","migration.password":"Password or app password","migration.password.note":"The password is encrypted, used only to read your mail during the import and deleted when it ends. Nobody can view it.","migration.options.all_mail":"Also copy Gmail's \"All Mail\" folder into Archive (may duplicate mail already under labels)","migration.options.junk_trash":"Also copy spam and trash","migration.test":"Test connection","migration.testing":"Testing…","migration.start":"Start import","migration.starting":"Starting…","migration.test.ok":"Connected. Folders will be copied like this:","migration.started":"The import is scheduled. You can close this page; progress is shown here.","migration.plan.source":"Source folder","migration.plan.target":"Copied to","migration.plan.messages":"Messages","migration.plan.skip":"Skipped","migration.skip.not_selectable":"holds no mail","migration.skip.all_mail":"duplicates the labels","migration.skip.virtual":"virtual folder","migration.skip.not_mail":"not mail","migration.skip.excluded":"excluded","migration.current":"Latest import","migration.history":"Earlier imports","migration.none":"No imports yet.","migration.from":"From {username} ({host})","migration.progress":"{done} / {total} messages","migration.counts":"Copied {imported} · already there {skipped} · failed {failed}","migration.size":"Copied size: {size}","migration.retry_at":"Retrying at {time}","migration.cancel":"Stop import","migration.cancel.confirm":"Stop this import? Mail already copied is kept.","migration.cancel_requested":"Stopping after the current batch…","migration.auto_refresh":"Updates automatically every few seconds","migration.folder":"Folder","migration.folder.status":"Status","migration.folder.status.pending":"Waiting","migration.folder.status.running":"Copying","migration.folder.status.done":"Done","migration.folder.status.skipped":"Skipped","migration.status.queued":"Waiting","migration.status.running":"Importing","migration.status.completed":"Completed","migration.status.failed":"Failed","migration.status.cancelled":"Stopped","migration.rerun_note":"Running it again with the same account is safe: mail already here is not copied twice.","migration.error.generic":"That did not work. Please try again.","migration.error.source_auth_failed":"The old account rejected the username or password. For Gmail/Yahoo use an app password.","migration.error.source_unreachable":"Could not connect to the old server. Check the server address and port.","migration.error.source_tls_failed":"Could not open a secure connection to the old server (invalid certificate or wrong security type).","migration.error.source_host_blocked":"This server is on a private network and cannot be used as a source.","migration.error.source_insecure_not_allowed":"An unencrypted connection would expose the password. Choose SSL/TLS or STARTTLS.","migration.error.source_throttled":"The old server is limiting access (for example Gmail's download limit). The import will continue later by itself.","migration.error.source_error":"The old server reported an error. The import will be retried.","migration.error.target_unavailable":"The Zomail mailbox is temporarily unavailable. The import will be retried.","migration.error.quota_exceeded":"The mailbox is full, so the import stopped. Delete some mail or ask for more storage, then run it again (nothing already copied is duplicated).","migration.error.internal_error":"A system error stopped the import. Please try again or contact your administrator.","migration.error.import_already_active":"This mailbox already has an import in progress.","migration.error.import_test_rate_limited":"Too many connection tests. Please wait a few minutes.","migration.error.source_host_required":"Please enter the IMAP server.","migration.error.validation_error":"Some fields are not valid. Please check them.","migration.error.import_unavailable":"Mail import is not enabled on this server.","migration.error.import_not_active":"This import has already ended.","migration.error.no_jobs_created":"No imports were created. See the errors per line below.","migration.error.forbidden":"You are not allowed to manage this customer's mailboxes.","migration.admin.nav":"Mail migration","migration.admin.eyebrow":"Administration","migration.admin.title":"Bulk mail migration","migration.admin.hint":"Move many employees' mail from the old system (Gmail, Microsoft 365, Yahoo, IMAP) into Zomail with one CSV file.","migration.admin.tenant":"Customer","migration.admin.choose_tenant":"Select","migration.admin.no_tenants":"You do not manage any customer yet.","migration.admin.csv.title":"Upload a CSV file","migration.admin.csv.hint":"One line each: target Zomail address, source server (or gmail / outlook / yahoo), source username, source password, [port], [tls|starttls]. A header line is skipped. Quote passwords that contain commas.","migration.admin.csv.file":"CSV file","migration.admin.csv.text":"Or paste the CSV","migration.admin.csv.example":"Example","migration.admin.csv.submit":"Create imports","migration.admin.csv.submitting":"Creating…","migration.admin.csv.empty":"Choose a CSV file or paste its content.","migration.admin.csv.created":"Created {count} import(s).","migration.admin.csv.row_error":"Line {line}{address}: {reason}","migration.admin.csv.security_note":"Source passwords are encrypted and deleted automatically when each import ends. Do not keep the CSV file with passwords after uploading.","migration.admin.jobs.title":"Progress","migration.admin.jobs.empty":"No imports for this customer yet.","migration.admin.col.mailbox":"Mailbox","migration.admin.col.source":"Source","migration.admin.col.status":"Status","migration.admin.col.progress":"Progress","migration.admin.col.created":"Created","migration.admin.col.by":"Created by","migration.admin.summary":"{active} running/waiting · {completed} completed · {failed} failed","migration.admin.cancelled":"Stop requested.","migration.row.invalid_target_address":"invalid target address","migration.row.missing_source_host":"source server missing","migration.row.missing_source_username":"source username missing","migration.row.missing_source_password":"source password missing","migration.row.invalid_source_port":"invalid port","migration.row.invalid_source_security":"security must be tls or starttls","migration.row.too_many_rows":"more than 1000 lines per upload","migration.row.target_mailbox_not_found":"no such mailbox in this customer","migration.row.target_mailbox_inactive":"the mailbox is suspended or not ready","migration.row.invalid_source_host":"invalid source server","migration.row.import_already_active":"the mailbox already has an import in progress","migration.error.source_port_not_allowed":"Only IMAP port 993 (SSL/TLS) or 143 (STARTTLS) is accepted.","migration.error.import_bulk_rate_limited":"Too many CSV uploads in the last hour. Please try again later.","migration.error.import_source_failed":"Could not sign in to or read the source mailbox. Check the server, port, security and password (an app password if the source uses 2-step verification).","migration.row.source_port_not_allowed":"only port 993 or 143 is accepted","migration.row.target_role_not_lower":"mailbox of an administrator ranked equal to or above you","migration.row.target_platform_admin":"mailbox of a Zomail administrator","cloudmig.eyebrow":"Migration","cloudmig.title":"Microsoft 365 and Google Workspace","cloudmig.lead":"Move the whole company's mail (folders, flags and dates kept), calendars and contacts without anyone's password. An administrator of the source grants read-only access once; Zomail deletes it when you click Finish or Cancel.","cloudmig.card.title":"From Microsoft 365 / Google Workspace","cloudmig.card.hint":"Microsoft 365 has turned off password IMAP and Gmail needs app passwords: use this to move a whole company (mail, calendar, contacts).","cloudmig.open":"Open Microsoft 365 / Google migration","cloudmig.cutover.open":"MX cut-over checklist","cloudmig.platform.open":"Platform apps","cloudmig.back":"Back to Migrations","cloudmig.tenant":"Customer","cloudmig.choose_tenant":"Choose","cloudmig.not_configured.microsoft":"This server has no platform Microsoft app yet. Use your company's own app below, or ask the platform administrator to configure one.","cloudmig.not_configured.google":"This server has no platform Google service account yet. Use your company's own service account below, or ask the platform administrator to configure one.","cloudmig.ms.title":"Microsoft 365 — one admin consent","cloudmig.ms.hint":"A Microsoft 365 Global Administrator allows the app to read the organisation's mail, calendars and contacts. Then you choose which mailbox goes where.","cloudmig.ms.permissions":"Read-only permissions: Mail.Read, Calendars.Read, Contacts.Read, User.Read.All. Nothing is sent, changed or deleted at the source.","cloudmig.credentials":"App used to read","cloudmig.credentials.platform":"The platform's app (recommended)","cloudmig.credentials.customer":"Your company's own app","cloudmig.credentials.broker":"Zomail's app through Zomail Cloud (no secret kept on this server)","cloudmig.credentials.via_cloud":"through Zomail Cloud","cloudmig.ms.client_id":"Application (client) ID","cloudmig.ms.client_secret":"Client secret","cloudmig.ms.redirect":"Redirect URI to register in that app (Web):","cloudmig.ms.connect":"Open Microsoft's consent page","cloudmig.ms.connect.note":"Sign in with a Global Administrator. After the consent Microsoft asks you to sign in once more, to confirm it is your organisation.","cloudmig.single.title":"One mailbox, no Global Administrator needed","cloudmig.single.hint":"For small companies: the user (or you, if you know the old password) signs in to the old Microsoft account and allows reading. Users can also do this themselves in Settings → Import.","cloudmig.single.mailbox":"Zomail mailbox receiving the data","cloudmig.single.login_hint":"Old Microsoft address (optional)","cloudmig.single.start":"Microsoft sign-in for this mailbox","cloudmig.google.title":"Google Workspace — domain-wide delegation","cloudmig.google.hint":"A Google Workspace super admin lets the service account read the domain's Gmail, Calendar and Contacts in the Admin console. No app passwords, no per-user consent.","cloudmig.google.steps":"In admin.google.com → Security → Access and data control → API controls → Manage domain-wide delegation → Add new: paste the Client ID and the scopes below, then Authorize. Wait a few minutes, then click Check.","cloudmig.google.client_id":"Client ID","cloudmig.google.scopes":"OAuth scopes (paste the whole line)","cloudmig.google.no_client":"The Client ID appears once a service account is chosen (the platform's, or your own key file).","cloudmig.google.domain":"Google Workspace primary domain","cloudmig.google.admin":"A super admin address of that domain","cloudmig.google.key":"Your own service account's JSON key file","cloudmig.google.connect":"Check and connect","cloudmig.google.personal":"Personal Gmail (@gmail.com) does not use this: each user uses \"Import mail from another account\" in mailbox Settings with an app password.","cloudmig.domain_rule":"Only source mailboxes on domains verified in Zomail can be migrated ({domains}). Moving to a new domain? Add the old domain under Admin → Domains and verify it with the TXT record (no MX change needed).","cloudmig.domain_rule.none":"none yet","cloudmig.scopes":"What to move","cloudmig.scope.mail":"Mail (folders, flags, dates)","cloudmig.scope.calendar":"Calendar (recurring events, attendees)","cloudmig.scope.contacts":"Contacts","cloudmig.connections.title":"Source connections","cloudmig.connections.empty":"No connections yet.","cloudmig.kind.m365_app":"Microsoft 365 (organisation)","cloudmig.kind.m365_delegated":"Microsoft (one mailbox)","cloudmig.kind.google_dwd":"Google Workspace","cloudmig.status.pending":"Waiting for consent","cloudmig.status.active":"Active","cloudmig.status.finished":"Finished (access deleted)","cloudmig.status.cancelled":"Cancelled (access deleted)","cloudmig.col.source":"Source","cloudmig.col.status":"Status","cloudmig.col.jobs":"Mailboxes","cloudmig.col.actions":"Actions","cloudmig.jobs.summary":"{total} mailboxes · {active} running · {completed} done · {failed} failed","cloudmig.credentials.own":"own app","cloudmig.signed_in_as":"confirmed by {who}","cloudmig.map":"Choose mailboxes","cloudmig.resync":"Sync again (delta)","cloudmig.finish":"Finish — delete access","cloudmig.finish.confirm":"Delete the read access to this source? Running passes stop; migrated data stays. Make sure the final sync after the MX switch has run.","cloudmig.cancel":"Cancel","cloudmig.cancel.confirm":"Cancel this migration and delete the read access? Migrated data stays.","cloudmig.notice.connected":"Connected. Now choose the mailboxes to migrate.","cloudmig.notice.resynced":"{queued} mailboxes queued for a new sync pass.","cloudmig.notice.finished":"Finished. The access was deleted from Zomail.","cloudmig.notice.cancelled":"Cancelled. The access was deleted from Zomail.","cloudmig.notice.jobs":"{count} migration jobs created.","cloudmig.notice.delegated":"Microsoft account connected; the migration is queued.","cloudmig.revoke.microsoft":"When done, a Microsoft 365 administrator should delete the app under Entra ID → Enterprise applications (Zomail cannot remove it on Microsoft's side).","cloudmig.revoke.google":"When done, the super admin should remove the Client ID from Domain-wide delegation in the Google Admin console.","cloudmig.map.title":"Choose the mailboxes to migrate","cloudmig.map.lead":"Suggestions match the part before @ (same domain first). Untick rows you do not need, change the target if it differs. The CSV below overrides rows with the same source address.","cloudmig.map.include":"Migrate","cloudmig.map.source":"Source mailbox","cloudmig.map.name":"Name","cloudmig.map.target":"Zomail mailbox","cloudmig.map.shared":"shared mailbox","cloudmig.map.disabled":"account disabled","cloudmig.map.unverified":"domain not verified","cloudmig.map.no_match":"no mailbox with that name","cloudmig.map.count":"{count} source mailboxes","cloudmig.map.csv":"CSV (optional): source address,Zomail mailbox — one mailbox per line","cloudmig.map.label_strategy":"Messages with several labels (Gmail)","cloudmig.map.label_strategy.copy":"Copy into every label's folder (like Gmail over IMAP; uses more storage)","cloudmig.map.label_strategy.primary":"One copy only (Inbox, Sent, then the first label by name)","cloudmig.map.junk_trash":"Also copy spam and trash","cloudmig.map.submit":"Start migrating","cloudmig.map.row_error":"Line {line}{address}: {reason}","cloudmig.map.unavailable":"Could not read the source's user list.","cloudmig.job.round":"pass {round}","cloudmig.job.pim":"{calendar} calendar items · {contacts} contacts","cloudmig.job.kind.graph":"Microsoft 365","cloudmig.job.kind.gmail":"Google Workspace","cloudmig.job.resync":"Sync again","cloudmig.cutover.title":"MX cut-over — checklist","cloudmig.cutover.lead":"Follow the order. Users keep using the old mailbox until step 2; the final sync in step 3 makes sure nothing is lost.","cloudmig.cutover.step1":"1. Pre-sync","cloudmig.cutover.step1.body":"Choose the mailboxes and run the first pass (hours to days for big mailboxes). Run it again as often as you like: each pass reads only what is new. A day before the MX switch, lower the MX record's TTL to 300 seconds.","cloudmig.cutover.step1.state":"{completed}/{total} mailboxes finished their last pass · {active} running · {failed} failed","cloudmig.cutover.step2":"2. Switch MX to Zomail","cloudmig.cutover.step2.body":"Once the pre-sync is done: point the domain's MX record to Zomail (see Domain → DNS), tell users to move to Zomail (webmail, apps, Outlook). Keep the old mailboxes running for a few more days.","cloudmig.cutover.step2.dns":"Open the DNS page of {domain}","cloudmig.cutover.step3":"3. Final delta sync","cloudmig.cutover.step3.body":"About 1–2 hours after the MX switch (old TTL expired), run one more pass: only mail, events and contacts that arrived at the source since the last pass are copied. Running it again after 24 hours does no harm.","cloudmig.cutover.step4":"4. Check, then revoke access","cloudmig.cutover.step4.body":"When users confirm their data is complete: click Finish so Zomail deletes the stored key/token, then remove the access on the source side. If forgotten, Zomail deletes it after {days} days without a pass.","cloudmig.cutover.none":"No Microsoft 365 / Google Workspace connection for this customer yet.","cloudmig.platform.title":"Platform apps for migration","cloudmig.platform.lead":"The multi-tenant Entra app and the Google service account customers authorize. Secrets are write-only and encrypted. How to create them: novamail-ops/MIGRATION-SETUP-GUIDE.md. On a Private server: the customer's own apps.","cloudmig.platform.microsoft":"Microsoft (Entra ID, multi-tenant)","cloudmig.platform.google":"Google (service account, domain-wide delegation)","cloudmig.platform.client_id":"Application (client) ID","cloudmig.platform.client_secret":"Client secret","cloudmig.platform.key":"Service account JSON key file","cloudmig.platform.save":"Save","cloudmig.platform.remove":"Remove","cloudmig.platform.saved":"Saved.","cloudmig.platform.removed":"Removed.","cloudmig.platform.set":"Configured by {who}, {when}","cloudmig.platform.missing":"Not configured — customers cannot use the platform's app.","cloudmig.platform.redirect":"Redirect URI (Web) to register in the Entra app:","cloudmig.platform.permissions":"Microsoft Graph permissions to add: Application — Mail.Read, Calendars.Read, Contacts.Read, User.Read.All; Delegated — User.Read, Mail.Read, Calendars.Read, Contacts.Read, offline_access, openid, profile, email.","cloudmig.platform.readonly":"You can only view this.","cloudmig.user.title":"Sign in with Microsoft (Microsoft 365, Outlook.com, Hotmail)","cloudmig.user.hint":"No IMAP or app password needed: sign in to the old Microsoft account, allow reading, and Zomail copies mail (with folders), calendar and contacts. The read access is deleted when you click Finish.","cloudmig.user.start":"Sign in with Microsoft and start","cloudmig.user.connection":"Reading from {address}","cloudmig.user.resync":"Sync what is new","cloudmig.user.finish":"Finish — delete read access","cloudmig.user.finish.confirm":"Delete the read access to the old Microsoft account? Migrated data stays.","cloudmig.user.notice.started":"Microsoft account connected. The migration runs below.","cloudmig.user.notice.resynced":"A new sync pass is queued.","cloudmig.user.notice.finished":"The read access to the Microsoft account was deleted.","cloudmig.error.generic":"That did not work. Please try again.","cloudmig.error.migration_not_configured":"This server has no Microsoft / Google app for migrations yet.","cloudmig.error.migration_unavailable":"Migration is not enabled on this server.","cloudmig.error.migration_state_invalid":"The sign-in expired or was opened in another browser. Please start again.","cloudmig.error.migration_consent_refused":"You (or the administrator) declined the permission at Microsoft.","cloudmig.error.migration_consent_failed":"Microsoft did not complete the consent. Try again or check the app.","cloudmig.error.migration_tenant_mismatch":"The account you signed in with belongs to another Microsoft organisation than the one that consented.","cloudmig.error.migration_not_admin":"Sign in with a Microsoft 365 Global Administrator (or Privileged Role Administrator).","cloudmig.error.source_domain_not_verified":"The source domain is not verified in Zomail. Add and verify the domain first.","cloudmig.error.source_connection_ended":"The access to this source was finished or cancelled.","cloudmig.error.invalid_client_id":"The client ID is a GUID.","cloudmig.error.invalid_client_secret":"The client secret is missing.","cloudmig.error.invalid_service_account_key":"This file is not a Google service account JSON key.","cloudmig.error.invalid_domain":"Enter the Google Workspace primary domain.","cloudmig.error.invalid_admin_email":"Enter a super admin address of that domain.","cloudmig.error.source_consent_missing":"Access is not granted at the source (Microsoft admin consent / Google domain-wide delegation) or a scope is missing.","cloudmig.error.source_auth_failed":"The source refused the credentials (client secret, key or token).","cloudmig.error.source_mailbox_not_found":"User / mailbox not found at the source.","cloudmig.error.source_throttled":"The source is limiting requests. Try again in a few minutes.","cloudmig.error.source_unreachable":"The server cannot reach Microsoft / Google.","cloudmig.error.source_host_blocked":"The server refused to call that address.","cloudmig.error.source_not_configured":"No app or key to read the source.","cloudmig.error.no_mappings":"Choose at least one mailbox.","cloudmig.error.no_jobs_created":"No job was created — see the line errors.","cloudmig.error.import_already_active":"The mailbox already has an unfinished migration.","cloudmig.error.migration_not_finished":"Wait until the current pass is finished, then sync again.","cloudmig.error.migration_not_cloud_job":"Only Microsoft 365 / Google migrations can sync again.","cloudmig.error.migration_delegated_single":"A one-mailbox connection already has its job; use Sync again.","cloudmig.error.rate_limited":"Too many attempts. Wait a few minutes.","cloudmig.error.not_found":"Not found.","cloudmig.error.target_mailbox_not_found":"No such target mailbox.","cloudmig.error.target_mailbox_inactive":"The target mailbox is not active.","cloudmig.error.csv_too_large":"The CSV is larger than 2 MB.","cloudmig.error.site_not_allowed":"Zomail Cloud refused: this server is suspended or removed from Zomail.","cloudmig.error.licence_revoked":"Zomail Cloud refused: this server's licence was revoked.","cloudmig.error.licence_expired":"Zomail Cloud refused: this server's licence has expired.","cloudmig.error.broker_domain_not_allowed":"Zomail Cloud has not verified the source domain for this server (the domain must be on this server and accepted by Zomail Cloud: TXT _novamail-site).","cloudmig.error.broker_not_configured":"Zomail Cloud has no Microsoft / Google app for migrations yet.","cloudmig.error.broker_state_invalid":"The sign-in through Zomail Cloud expired. Please start again.","cloudmig.error.handoff_invalid":"The code from Zomail Cloud is invalid or already used. Please start again.","cloudmig.error.grant_not_found":"Zomail Cloud has no such access for this server.","cloudmig.error.grant_revoked":"The access on Zomail Cloud was revoked. Connect again.","cloudmig.error.subject_not_allowed":"Zomail Cloud does not grant access to this mailbox.","cloudmig.error.source_broker_unreachable":"Zomail Cloud cannot be reached for access. The migration retries by itself; check the network / this server's fleet link.","cloudmig.error.source_broker_refused":"Zomail Cloud refused access (licence, domain, or access revoked).","migration.error.source_broker_unreachable":"Zomail Cloud cannot be reached to get read access to the source. The migration is paused and retries by itself.","migration.error.source_broker_refused":"Zomail Cloud refused read access to the source (licence revoked / expired, domain not verified, or access revoked).","cloudmig.error.invalid_row":"Invalid line (expected: source address,Zomail mailbox).","cloudmig.error.source_user_not_found":"No such user at the source.","cloudmig.error.too_many_rows":"More than 5,000 lines at once.","cloudmig.error.unknown_provider":"Unknown provider.","cloudmig.error.migration_source_failed":"Could not read the source (Microsoft / Google). Check the granted access and try again.","migration.error.source_consent_missing":"Access is not granted at the source (Microsoft admin consent / Google domain-wide delegation).","migration.error.source_mailbox_not_found":"Mailbox not found at the source (or not on Exchange Online / Gmail).","migration.error.source_connection_ended":"The access to the source was finished or cancelled.","migration.error.source_not_configured":"The server has no Microsoft / Google app to read the source.","migration.error.source_domain_not_verified":"The source mailbox's domain is not verified in Zomail.","migration.row.invalid_row":"invalid line (expected: source address,Zomail mailbox)","migration.row.source_domain_not_verified":"source domain not verified in Zomail","migration.row.source_user_not_found":"no such user at the source","dmarc.nav":"DMARC reports","dmarc.domain_link":"View DMARC reports","dmarc.title":"DMARC reports","dmarc.lead.platform":"Aggregate (RUA) reports that Gmail, Outlook, Yahoo… send for every hosted domain, last 30 days.","dmarc.lead.tenant":"Who sends mail as your domains, how much of it passes DMARC and what to fix — from the big mailbox providers' reports, last 30 days.","dmarc.not_configured":"No report address is configured (DMARC_REPORT_ADDRESS), so no DMARC reports are being received.","dmarc.error.load":"Could not load DMARC data. Please try again.","dmarc.error.not_found":"Domain not found, or you are not allowed to see it.","dmarc.tile.messages":"Messages reported (30 days)","dmarc.tile.domains":"{count}/{all} domains have reports","dmarc.tile.pass":"Passing DMARC","dmarc.tile.pass.hint":"SPF or DKIM passed and aligned with the From domain","dmarc.tile.failing":"{count} messages failed","dmarc.tile.unauthorized":"Likely spoofing","dmarc.tile.unauthorized.hint":"Neither SPF nor DKIM authenticated","dmarc.tile.sources":"{count} sending sources (IPs)","dmarc.tile.policy":"Current policy","dmarc.tile.policy.value":"pct={pct} · adkim={adkim} · aspf={aspf}","dmarc.domains":"Domains","dmarc.domains.hint":"Open a domain to see its sending sources and recommendations.","dmarc.domains.empty":"No domains yet.","dmarc.never":"No reports yet","dmarc.no_data":"No data in the last 30 days.","dmarc.no_ptr":"no hostname (PTR)","dmarc.platform_source":"Zomail server","dmarc.col.domain":"Domain","dmarc.col.customer":"Customer","dmarc.col.messages":"Messages","dmarc.col.pass":"Pass","dmarc.col.unauthorized":"Spoofed","dmarc.col.misaligned":"Needs DKIM","dmarc.col.sources":"Sources","dmarc.col.policy":"Policy","dmarc.col.last_report":"Last report","dmarc.col.source":"Source","dmarc.col.dkim":"DKIM (d=)","dmarc.col.spf":"SPF (MAIL FROM)","dmarc.col.status":"Assessment","dmarc.col.reporter":"Reporter","dmarc.col.period":"Period","dmarc.col.received":"Received","dmarc.detail.lead":"Last 30 days","dmarc.detail.dns_link":"Domain DNS records","dmarc.recs":"Recommendations","dmarc.recs.hint":"What to do next, based on the reports.","dmarc.recs.none":"Nothing to do — every source passes DMARC.","dmarc.severity.action":"To do","dmarc.severity.warning":"Warning","dmarc.severity.info":"Info","dmarc.rec.no_reports":"No reports in 30 days. Check that the _dmarc record has rua=mailto:… pointing to Zomail (see DNS below); the first reports usually arrive within 24–48 hours.","dmarc.rec.move_to_quarantine":"{percent}% of mail passed DMARC over the last {days} days: you can move the policy from p=none to p=quarantine so spoofed mail goes to spam.","dmarc.rec.move_to_reject":"{percent}% of mail passed DMARC over the last {days} days with p=quarantine: you can move to p=reject to block spoofed mail outright.","dmarc.rec.raise_pct":"The policy applies to only {pct}% of mail while {percent}% already passes: raise it to pct=100.","dmarc.rec.not_ready":"{percent}% of mail passes DMARC (14 days). Aim for ≥ {target}% steadily for {days} days before tightening the policy — fix the failing sources below first.","dmarc.rec.add_dkim":"Source {ip}{host} sent {count} messages as your domain but only authenticated with the service's own domain ({service}). If this is a service you use (CRM, newsletter, invoicing…), enable DKIM for your domain in that service.","dmarc.rec.unauthorized_sender":"Unknown source {ip}{host} sent {count} messages as your domain with neither SPF nor DKIM — most likely spoofing. If you do not recognise it, tighten your DMARC policy (currently p={policy}).","dmarc.rec.platform_failing":"Zomail server {ip}{host} has {count} messages failing DMARC — check the domain's DKIM/SPF records on the DNS page.","dmarc.rec.forwarding":"{count} messages ({percent}%) failed because they were forwarded or went through mailing lists — normal, nothing to do.","dmarc.kind.pass":"Pass","dmarc.kind.pass.hint":"SPF/DKIM aligned","dmarc.kind.misaligned":"Needs DKIM","dmarc.kind.misaligned.hint":"Legitimate service signing with another domain","dmarc.kind.forwarded":"Forwarded","dmarc.kind.forwarded.hint":"Forwarding/mailing lists broke authentication","dmarc.kind.unauthorized":"Likely spoofing","dmarc.kind.unauthorized.hint":"Nothing authenticated","dmarc.kind.platform_failing":"Misconfigured","dmarc.kind.platform_failing.hint":"Mail from Zomail fails — check DKIM","dmarc.daily":"By day","dmarc.daily.hint":"Messages reported per day: green passed, red failed.","dmarc.daily.bar":"{day}: {pass}/{total} passed","dmarc.legend.pass":"Passed","dmarc.legend.fail":"Failed","dmarc.failing":"Failing sources","dmarc.failing.hint":"Spoofing, or one of your services without DKIM/SPF set up.","dmarc.failing.none":"No failing sources.","dmarc.top":"Top sending sources","dmarc.top.hint":"IPs sending mail as this domain, with their hostname (PTR) when there is one.","dmarc.dns":"DNS for reports","dmarc.dns.hint":"To receive reports, the DMARC record's rua= must point to Zomail.","dmarc.dns.record":"Current _dmarc record","dmarc.dns.record.missing":"No DMARC record","dmarc.dns.rua":"rua= points to Zomail","dmarc.dns.rua.ok":"Yes","dmarc.dns.rua.missing":"No — add mailto:{address} to rua=","dmarc.dns.authorization":"Report authorization","dmarc.dns.authorization.ok":"Present","dmarc.dns.authorization.missing":"Missing","dmarc.dns.authorization.unchecked":"Not checked","dmarc.dns.authorization.platform":"Per RFC 7489 §7.1, receivers only send another domain's reports to this address when the report domain publishes this record. One wildcard record {wildcard} TXT \"v=DMARC1\" covers every domain.","dmarc.dns.authorization.tenant":"Zomail publishes this record; nothing to do on your side. If it says \"Missing\", contact support.","dmarc.reports":"Reports received","dmarc.reports.hint":"The 20 latest reports; a report sent again is counted once.","dmarc.setup.title":"Platform setup","dmarc.setup.hint":"Only platform administrators see this section.","dmarc.setup.address":"Report address","dmarc.setup.authorization":"Authorization record (once)","dmarc.setup.authorization.hint":"Without it, Google/Microsoft… will not send customer domains' reports to the address above (RFC 7489 §7.1).","dmarc.setup.intake":"Received (30 days)","dmarc.setup.intake.value":"{stored} reports stored · {duplicate} duplicates · {notHosted} for domains not hosted here · {invalid} unreadable","ops.alert.dmarc.passrate":"{domain}: only {percent}% of mail passed DMARC in 3 days (before: {baseline}%, {total} messages) — check DKIM/SPF of the sending sources","ops.alert.dmarc.spoofing":"{domain}: {count} messages spoofing the domain from {sources} sources in 3 days (policy p={policy})","domain.dns.hint.dmarc_platform_rua":"Tells receivers how to handle mail that spoofs the domain. Daily reports go to Zomail ({address}) and appear under Admin → DMARC reports; start with p=none and tighten when the report page says it is safe.","domain.dns.hint.dmarc_add_rua":"Add mailto:{address} to the rua= tag of the existing DMARC record (comma-separated) so Zomail can show who sends mail as this domain.","domain.dns.hint.dmarc_report_auth":"Published by Zomail, not the customer: receivers only send reports for {domain} to {address} when {name} has TXT \"v=DMARC1\" (RFC 7489 §7.1). One wildcard *._report._dmarc.{reportDomain} covers every domain.","archive.nav":"Compliance archive","archive.eyebrow":"Compliance · eDiscovery","archive.title":"Compliance archive & legal hold","archive.lead.platform":"Immutable copies of every message sent or received by customers with archiving on. You see all customers.","archive.lead.tenant":"Immutable copies of every message sent or received in your organisation. Only owners and administrators have access.","archive.system_of_record":"The archive is the system of record: messages users delete from their mailboxes stay here until retention ends (longer while under legal hold).","archive.audited":"Every search, view, download and export is recorded in the audit log.","archive.settings.title":"Archive settings","archive.settings.hint":"When on, every inbound, outbound and internal message of the organisation is copied once and cannot be changed or deleted before its retention ends.","archive.settings.col.tenant":"Organisation","archive.settings.col.status":"Status","archive.settings.col.retention":"Retention","archive.settings.col.stored":"Stored","archive.settings.col.change":"Change","archive.settings.on":"On","archive.settings.off":"Off","archive.settings.since":"since {date}","archive.settings.years":"{count} year(s)","archive.settings.stored":"{count} messages · {size}","archive.settings.pending":"{count} messages waiting to upload","archive.settings.enabled_label":"Archiving on","archive.settings.retention_label":"Retention in years (1–100)","archive.settings.save":"Save","archive.settings.retention_note":"A longer retention also applies to messages already archived; a shorter one only to new messages. Turning archiving off never deletes what is stored.","archive.settings.storage_missing":"No object storage is configured for the archive (ARCHIVE_STORAGE / DRIVE_STORAGE), so archiving cannot be turned on yet.","archive.worm.on":"Immutable (WORM): S3 Object Lock {mode}","archive.worm.on_hint":"Every message is locked in storage until its retention ends; legal holds set an S3 legal hold. Nobody can delete before then, administrators included.","archive.worm.off":"NOT WORM","archive.worm.off_hint":"Archived mail is stored where it can be deleted. A Zomail administrator must move it to storage with Object Lock (zomail-cluster archive-setup).","archive.worm.reason.shared_drive":"shares the Drive bucket and keys","archive.worm.reason.shared_credentials":"its own bucket, but the Drive keys","archive.worm.reason.shared_bucket":"same bucket as Drive","archive.worm.reason.fs_storage":"stored in a directory on a server","archive.worm.reason.lock_off":"Object Lock turned off (ARCHIVE_S3_LOCK_MODE=off)","archive.worm.reason.bucket_lock_disabled":"the bucket has no Object Lock","archive.worm.reason.probe_failed":"the bucket's lock configuration could not be read","archive.worm.warning.in_cluster":"Stored on the cluster's own SeaweedFS: the lock holds at the S3 API, but whoever administers the storage servers can still destroy data. For regulator-grade WORM use an outside bucket with Object Lock.","archive.worm.warning.legacy_pending":"Older archived messages are being copied from the Drive bucket into the locked bucket.","archive.worm.where":"Stored at: {describe}","archive.settings.empty":"No organisations.","archive.settings.other":"Turn on for another organisation","archive.backlog.title":"Upload queue","archive.backlog.ok":"Nothing waiting.","archive.backlog.pending":"{pending} messages waiting, oldest {minutes} min, {failing} retrying","archive.backlog.last_error":"Last error: {error}","archive.holds.title":"Legal holds","archive.holds.hint":"Messages covered by a legal hold are kept past their retention. Users of a held mailbox cannot permanently delete messages in webmail.","archive.holds.empty":"No legal holds yet.","archive.holds.col.name":"Name","archive.holds.col.tenant":"Organisation","archive.holds.col.scope":"Scope","archive.holds.col.range":"Date range","archive.holds.col.created":"Created by","archive.holds.col.status":"Status","archive.holds.scope.tenant":"Whole organisation","archive.holds.scope.mailboxes":"{count} mailboxes","archive.holds.scope.by_mailbox":"Specific mailboxes","archive.holds.any_date":"Any time","archive.holds.active":"Active","archive.holds.released":"Released {date}","archive.holds.release":"Release","archive.holds.release_confirm":"Release this legal hold? Messages past their retention may be deleted at the next purge.","archive.holds.new":"New legal hold","archive.holds.field.tenant":"Organisation","archive.holds.field.name":"Matter name","archive.holds.field.reason":"Reason (optional)","archive.holds.field.scope":"Scope","archive.holds.field.mailboxes":"Mailboxes (one per line or comma-separated)","archive.holds.field.from":"From date (optional)","archive.holds.field.to":"To date (optional)","archive.holds.create":"Create hold","archive.search.title":"eDiscovery search","archive.search.field.tenant":"Organisation","archive.search.field.participant":"Participant (from/to/Cc/Bcc)","archive.search.field.sender":"Sender","archive.search.field.recipient":"Recipient","archive.search.field.mailbox":"Mailbox","archive.search.field.subject":"Subject contains","archive.search.field.direction":"Direction","archive.search.field.from":"From date","archive.search.field.to":"To date","archive.search.any":"All","archive.search.submit":"Search","archive.search.reset":"Reset","archive.search.results":"Results","archive.search.results.count":"{count} messages on this page","archive.search.empty":"No messages match.","archive.search.empty.hint":"Try a wider date range or fewer conditions.","archive.search.more":"Next page →","archive.search.first":"← First page","archive.col.time":"Received","archive.col.direction":"Direction","archive.col.from":"From","archive.col.to":"To","archive.col.subject":"Subject","archive.col.size":"Size","archive.col.select":"Select","archive.direction.inbound":"Inbound","archive.direction.outbound":"Outbound","archive.direction.internal":"Internal","archive.no_subject":"(no subject)","archive.export.selected":"Export selected (.zip)","archive.export.all":"Export all results (.zip)","archive.export.hint":"The ZIP holds the original .eml files and manifest.csv (with SHA-256 for verification). Up to {maxMessages} messages / {maxMb} MB per export.","archive.view.back":"← Back to search","archive.view.download":"Download original .eml","archive.view.facts":"Archive record","archive.view.received":"Received (platform time)","archive.view.date_header":"Date header","archive.view.direction":"Direction","archive.view.from":"From","archive.view.envelope_from":"Envelope sender","archive.view.to":"To","archive.view.cc":"Cc","archive.view.recipients":"Envelope recipients (incl. Bcc)","archive.view.mailboxes":"Mailboxes involved","archive.view.message_id":"Message-ID","archive.view.size":"Size","archive.view.sha256":"SHA-256","archive.view.retention_until":"Retained until","archive.view.hold":"Legal hold","archive.view.held":"Held","archive.view.not_held":"No","archive.view.content":"Message content","archive.view.images_blocked":"{count} remote images blocked (the archive never loads outside content).","archive.view.no_text":"(no text content)","archive.view.missing":"The message file is missing from object storage. Tell the platform administrator.","archive.view.headers":"Original headers","archive.view.attachments":"Attachments","archive.notice.saved":"Archive settings saved.","archive.notice.hold_created":"Legal hold created.","archive.notice.hold_released":"Legal hold released.","archive.notice.legal_hold":"This mailbox is under legal hold — messages cannot be permanently deleted. Contact your administrator.","archive.error.generic":"That did not work. Please try again.","archive.error.unreachable":"Cannot reach the admin server.","archive.error.forbidden":"You are not allowed to do this.","archive.error.archive_forbidden":"Only the organisation's owners and administrators can access the archive.","archive.error.archive_unavailable":"Archiving is not enabled on this server.","archive.error.archive_storage_unavailable":"No object storage is configured for the compliance archive.","archive.error.hold_active":"Archiving cannot be turned off while a legal hold is active.","archive.error.export_too_large":"The results hold {count} messages / {mb} MB, over the {maxMessages} messages / {maxMb} MB limit. Narrow the filter.","archive.error.export_empty":"Nothing to export.","archive.error.no_selection":"Select at least one message to export.","archive.error.validation_error":"Some of the input is not valid.","archive.error.mailboxes_required":"Enter at least one mailbox for a mailbox-scoped hold.","archive.error.invalid_date_range":"The start date must be before the end date.","archive.error.tenant_not_found":"Organisation not found (or you have no access).","archive.error.hold_not_found":"Legal hold not found.","archive.error.hold_already_released":"This hold was already released.","archive.error.legal_hold":"This mailbox is under legal hold — messages cannot be permanently deleted. Lift the hold first if allowed.","archive.error.retention_active":"The message is still under mandatory retention (until {retentionUntil}) and cannot be deleted yet.","archive.error.archive_message_not_found":"The message is not in the archive — it may have been removed when its retention ended.","archive.error.archive_object_missing":"The message's stored copy is missing from archive storage (S3). Check the storage; this message cannot be restored.","ops.alert.archive.backlog":"Compliance archive: {pending} messages waiting to upload, oldest {oldestMinutes} min","console.card.erasures.title":"Erasure requests","console.card.erasures.desc":"Erase personal data under Decree 13 within 72 hours.","erasure.eyebrow":"Compliance · Decree 13","erasure.title":"Personal data erasure requests","erasure.lead":"When a data subject (or the customer on their behalf) asks for erasure, record it here and approve it: the system erases at once — no waiting period, unlike an ordinary deletion — within 72 hours of when the request was received. A certificate of erasure (Vietnamese + English) is ready for the customer when done.","erasure.back":"Console","erasure.notice.requested":"Request recorded. Nothing is erased yet: approve it to start.","erasure.notice.approved":"Approved: the system is erasing (see each step below).","erasure.notice.canceled":"Request canceled.","erasure.notice.reapply":"Every subject in the erasure ledger will be erased again (after a manual restore).","erasure.new.title":"Record a new request","erasure.new.hint":"Zomail staff who manage customers only. Enter when the request was received: the 72 hours run from then.","erasure.new.tenant_id":"Organisation (tenant ID)","erasure.new.scope":"Scope","erasure.scope.mailboxes":"Some mailboxes","erasure.scope.tenant":"The whole organisation","erasure.new.addresses":"Mailbox addresses (one per line — with \"Some mailboxes\")","erasure.new.confirm_slug":"Type the organisation's slug (with \"The whole organisation\")","erasure.new.reference":"Customer reference (letter number, ticket)","erasure.new.received_at":"Request received at","erasure.new.note":"Internal note","erasure.new.submit":"Record","erasure.list.title":"Requests","erasure.list.empty":"No request yet.","erasure.col.org":"Organisation","erasure.col.scope":"Scope","erasure.col.status":"Status","erasure.col.deadline":"72 h deadline","erasure.col.steps":"Steps","erasure.col.actions":"Actions","erasure.mailboxes":"{count} mailbox(es)","erasure.late":"LATE","erasure.status.requested":"Waiting for approval","erasure.status.approved":"Approved","erasure.status.running":"Erasing","erasure.status.done":"Erased","erasure.status.failed":"Error — see the failed step","erasure.status.canceled":"Canceled","erasure.step.ledger":"Erasure ledger","erasure.step.data":"Mail, Drive, accounts","erasure.step.mail_homes":"Mailbox directories","erasure.step.calendars":"Calendars, contacts","erasure.step.logs":"Logs (Loki)","erasure.step.redaction":"Addresses hidden in records","erasure.step.certificate":"Certificate","erasure.stepstate.pending":"pending","erasure.stepstate.waiting":"running","erasure.stepstate.done":"done","erasure.stepstate.skipped":"not applicable","erasure.stepstate.failed":"error","erasure.approve":"Approve and erase now","erasure.approve.confirm":"Permanently erase the data of {count} mailbox(es) of \"{slug}\"? This cannot be undone.","erasure.approve.slug":"Type the slug \"{slug}\" to confirm","erasure.retry":"Retry","erasure.cancel":"Cancel","erasure.certificate":"Certificate of erasure","erasure.certificate.vi":"Vietnamese","erasure.certificate.en":"English","erasure.certificate.hint":"Copy and send it to the customer. It holds no e-mail address.","erasure.ledger.title":"Erasure ledger and restores","erasure.ledger.hint":"Backups cannot be edited: every erased subject is in the erasure ledger, and the system erases again whatever a restore brings back (database, calendars, mail servers). After a restore done BY HAND (pgBackRest, restic, copying files), press the button below.","erasure.ledger.reason":"Reason (e.g. database restored at 10:00)","erasure.ledger.reapply":"Erase every ledger subject again","erasure.error.generic":"That did not work. Please try again.","erasure.error.unreachable":"Cannot reach the admin server.","erasure.error.platform_only":"Only Zomail staff who manage customers handle erasure requests.","erasure.error.forbidden":"You are not allowed to do this.","erasure.error.tenant_not_found":"Organisation not found.","erasure.error.confirm_slug_mismatch":"The slug does not match (expected: {slug}).","erasure.error.validation_error":"Some of the input is not valid.","erasure.error.erasure_not_found":"Request not found.","erasure.error.erasure_closed":"The request is running or finished; it can no longer be changed.","erasure.error.erasure_no_subject":"Enter at least one mailbox address.","erasure.error.erasure_too_many":"At most {max} mailboxes per request.","erasure.error.erasure_invalid_address":"\"{address}\" is not a valid mailbox address.","erasure.error.erasure_mailbox_not_found":"There is no mailbox {address} in this organisation.","erasure.error.erasure_invalid_date":"The date the request was received is not valid (it cannot be in the future).","erasure.error.erasure_unavailable":"The server has no BACKUP_ENCRYPTION_KEY, so erasure requests cannot be stored yet.","backups.error.restore_before_erasure":"This address was erased at the data subject's request on {erasedAt} and now belongs to someone else: mail from before that time is not restored.","ops.alert.erasure.deadline":"Erasure request close to / past its 72 h deadline ({deadline}, status {status})","ops.pb.erasure.deadline.cause":"A personal-data erasure request is within 24 hours of its 72-hour deadline (or past it): not approved yet, or a step is failing/waiting.","ops.pb.erasure.deadline.impact":"Decree 13 requires erasure within 72 hours; missing it is a breach the customer must be told about.","ops.pb.erasure.deadline.steps":"Open Admin → Erasure requests.\nNot approved: check and approve now.\nA failed step: read the error (zomail-cluster erasure-status <id>), fix it (doveadm, mail servers, Loki) and press Retry.","ops.alert.archive.not_worm":"Compliance archive is not WORM ({target}: {reasons})","ops.pb.archive.not_worm.cause":"An organisation uses the compliance archive but its mail is stored where it can be deleted: the Drive bucket, a directory, or a bucket without Object Lock.","ops.pb.archive.not_worm.impact":"Whoever holds the Drive keys or administers the storage servers can delete archived mail — not immutable storage.","ops.pb.archive.not_worm.steps":"On the control server: zomail-cluster archive-setup --internal (a bucket of its own with Object Lock in the cluster)\nor an outside bucket with Object Lock: ARCHIVE_S3_SECRET='…' zomail-cluster archive-setup --endpoint … --bucket … --access-key …\nCheck: zomail-cluster archive-setup --status (ARCHIVE_WORM=1).","statuspage.title":"System status","statuspage.lead":"Current status of {title} services.","statuspage.overall.operational":"All systems operational","statuspage.overall.degraded":"Some services are degraded","statuspage.overall.partial_outage":"Partial outage","statuspage.overall.major_outage":"Major outage","statuspage.overall.maintenance":"Scheduled maintenance in progress","statuspage.state.operational":"Operational","statuspage.state.degraded":"Degraded performance","statuspage.state.partial_outage":"Partial outage","statuspage.state.major_outage":"Major outage","statuspage.state.maintenance":"Under maintenance","statuspage.state.nodata":"No data","statuspage.incident.investigating":"Investigating","statuspage.incident.identified":"Identified","statuspage.incident.monitoring":"Monitoring","statuspage.incident.resolved":"Resolved","statuspage.incident.scheduled":"Scheduled","statuspage.incident.in_progress":"In progress","statuspage.incident.completed":"Completed","statuspage.impact.none":"No impact","statuspage.impact.degraded":"Degraded performance","statuspage.impact.partial_outage":"Partial outage","statuspage.impact.major_outage":"Major outage","statuspage.impact.maintenance":"Maintenance","statuspage.kind.incident":"Incident","statuspage.kind.maintenance":"Maintenance","statuspage.components":"Services","statuspage.uptime":"{percent}% uptime over 90 days","statuspage.uptime.none":"No uptime data yet","statuspage.bars.label":"90-day history of {component}","statuspage.bars.day":"{date}: {state}","statuspage.bars.dayUptime":"{date}: {state}, {percent}% uptime","statuspage.bars.ago":"90 days ago","statuspage.bars.today":"Today","statuspage.bars.utc":"Each bar is one day (UTC)","statuspage.legend":"Legend","statuspage.active":"Active incidents and maintenance","statuspage.upcoming":"Upcoming maintenance","statuspage.history":"Incident history (last 90 days)","statuspage.history.none":"No incidents in the last 90 days.","statuspage.window":"{start} → {end}","statuspage.affected":"Affected: {components}","statuspage.startedAt":"Started {time}","statuspage.resolvedAt":"Ended {time}","statuspage.readMore":"Details","statuspage.back":"Status page","statuspage.timeline":"Timeline","statuspage.unavailable":"Status could not be loaded right now. Please try again in a few minutes.","statuspage.notfound":"Incident not found.","statuspage.asOf":"As of {time}","statuspage.feed":"Atom feed","statuspage.json":"JSON API","statuspage.subscribe.title":"Get e-mail updates","statuspage.subscribe.lead":"Get an e-mail when we post an incident or scheduled maintenance. You will confirm your address by e-mail.","statuspage.subscribe.email":"E-mail address","statuspage.subscribe.language":"E-mail language","statuspage.subscribe.submit":"Subscribe","statuspage.subscribe.sent":"If the address is valid, we have sent a confirmation e-mail. Open it and follow the link.","statuspage.error.invalid_email":"That e-mail address is not valid.","statuspage.error.rate_limited":"Too many requests from your network. Please try again later.","statuspage.error.invalid_token":"This link is invalid or has expired.","statuspage.error.status_unavailable":"Subscriptions are temporarily unavailable.","statuspage.error.generic":"Something went wrong. Please try again.","statuspage.confirm.title":"Confirm subscription","statuspage.confirm.lead":"Press the button below to start receiving incident and maintenance e-mails.","statuspage.confirm.submit":"Confirm","statuspage.confirm.done":"Confirmed. You will get an e-mail whenever we post an update.","statuspage.unsubscribe.title":"Unsubscribe","statuspage.unsubscribe.lead":"Press the button below to stop receiving status e-mails.","statuspage.unsubscribe.submit":"Unsubscribe","statuspage.unsubscribe.done":"You have been unsubscribed and will not receive more e-mails.","statuspage.admin.nav":"Status page","statuspage.admin.title":"Public status page","statuspage.admin.lead":"Each service's status is derived every minute from ops alerts and synthetic checks. Publish incidents and maintenance for customers here.","statuspage.admin.platformOnly":"Only Zomail platform operators manage the status page.","statuspage.admin.view":"Open public page","statuspage.admin.components":"Components","statuspage.admin.col.component":"Service","statuspage.admin.col.status":"Status","statuspage.admin.col.since":"Since","statuspage.admin.col.reasons":"Why","statuspage.admin.col.override":"Manual override","statuspage.admin.override.auto":"Automatic","statuspage.admin.save":"Save","statuspage.admin.hidden":"Hidden from the public page","statuspage.admin.hide":"Hide","statuspage.admin.show":"Show","statuspage.admin.reason.worker_down":"Delivery worker is not running","statuspage.admin.reason.queue_stuck":"Outbound queue is stuck","statuspage.admin.reason.provider_refusing":"A major mail provider is refusing/deferring","statuspage.admin.reason.delivery_failures":"Many sending domains failing at once","statuspage.admin.reason.blocklisted":"Sending IP is blocklisted","statuspage.admin.reason.drive_capacity":"Drive storage cluster nearly full","statuspage.admin.reason.mail_capacity":"Mail shard nearly full","statuspage.admin.reason.probe":"Check \"{probe}\" failing","statuspage.admin.reason.slow":"Check \"{probe}\" is slow","statuspage.admin.reason.incident":"Published incident","statuspage.admin.reason.maintenance":"Maintenance window","statuspage.admin.reason.manual":"Set manually","statuspage.admin.incidents":"Incidents and maintenance","statuspage.admin.draft":"Draft","statuspage.admin.auto":"Automatic","statuspage.admin.published":"Published","statuspage.admin.none":"No incidents yet.","statuspage.admin.new.incident":"New incident","statuspage.admin.new.maintenance":"Schedule maintenance","statuspage.admin.field.titleVi":"Title (Vietnamese)","statuspage.admin.field.titleEn":"Title (English)","statuspage.admin.field.bodyVi":"Message (Vietnamese)","statuspage.admin.field.bodyEn":"Message (English)","statuspage.admin.field.components":"Affected services","statuspage.admin.field.impact":"Impact","statuspage.admin.field.status":"Status","statuspage.admin.field.start":"Start (your local time)","statuspage.admin.field.end":"End (your local time)","statuspage.admin.field.publish":"Publish now (untick to save a draft)","statuspage.admin.field.notify":"E-mail subscribers","statuspage.admin.bothLanguages":"Write both languages; if one is empty, visitors see the other.","statuspage.admin.create":"Create","statuspage.admin.subscribers":"{confirmed} confirmed subscribers, {pending} pending confirmation","statuspage.admin.subscriptionsOff":"E-mail subscriptions are off (no link-signing key).","statuspage.admin.postUpdate":"Post update","statuspage.admin.publish":"Publish","statuspage.admin.discard":"Discard draft","statuspage.admin.edit":"Edit details","statuspage.admin.closed":"This incident is closed. If the problem returns, open a new one.","statuspage.admin.by":"by {name}","statuspage.admin.emailed":"e-mailed","statuspage.admin.done":"Saved.","statuspage.admin.error.validation_error":"Some fields are not valid; please check them.","statuspage.admin.error.invalid_status":"That status does not fit this kind of event.","statuspage.admin.error.title_required":"At least one title is required.","statuspage.admin.error.body_required":"At least one message is required.","statuspage.admin.error.maintenance_window_invalid":"A maintenance window needs a start and an end (end after start).","statuspage.admin.error.incident_closed":"The incident is closed; no more updates can be added.","statuspage.admin.error.already_published":"The incident is already published.","statuspage.admin.error.not_draft":"Only drafts can be discarded.","statuspage.admin.error.forbidden":"You are not allowed to do this.","statuspage.admin.error.not_found":"Not found.","statuspage.admin.error.generic":"Could not save. Please try again.","ops.alert.status.probe":"Synthetic check \"{probe}\" failed {failures} times in a row ({detail})","ops.alert.status.draft":"An auto-drafted incident for \"{component}\" is waiting to be published on the status page","sendx.close":"Close","sendx.undo.sending":"Sending… ({seconds})","sendx.undo.action":"Undo","sendx.undo.undoing":"Undoing…","sendx.undo.view_outbox":"View outbox","sendx.undo.restored":"Sending cancelled. The message is back as a draft so you can edit it.","sendx.schedule.button":"Schedule send","sendx.schedule.title":"Schedule send","sendx.schedule.tomorrow":"Tomorrow morning (8:00)","sendx.schedule.monday":"Monday morning (8:00)","sendx.schedule.custom":"Pick date & time","sendx.schedule.zone":"Time zone: {zone} (change in Settings → Sending)","sendx.schedule.confirm":"Schedule for {time}","sendx.schedule.pick":"Pick a time to send","sendx.scheduled.link":"Scheduled","sendx.scheduled.eyebrow":"Outbox","sendx.scheduled.title":"Scheduled messages","sendx.scheduled.outbox":"Delivery status","sendx.scheduled.created":"Your message is scheduled.","sendx.scheduled.load_failed":"Couldn't load scheduled messages.","sendx.scheduled.empty":"No messages are waiting to be sent.","sendx.scheduled.empty.hint":"When writing a message, choose “Schedule send” to send it later.","sendx.scheduled.at":"Will be sent {time}","sendx.scheduled.send_now":"Send now","sendx.scheduled.cancel":"Cancel & edit","sendx.scheduled.cancel_confirm":"Cancel the schedule and reopen the message as a draft?","outbox.status.scheduled":"Scheduled","sendx.templates.button":"Templates","sendx.templates.title":"Templates","sendx.templates.empty":"No templates yet. Write a message and save it as a template to reuse it.","sendx.templates.insert":"Insert","sendx.templates.replace":"Replace","sendx.templates.replace_confirm":"Replace the current subject and body with this template?","sendx.templates.delete":"Delete template","sendx.templates.delete_confirm":"Delete the template “{name}”?","sendx.templates.name":"New template name","sendx.templates.save":"Save this message as a template","sendx.templates.saved":"Template “{name}” saved.","sendx.templates.overwrite":"A template named “{name}” exists. Overwrite it?","sendx.ai.button":"Help me write","sendx.ai.title":"Help me write (AI)","sendx.ai.prompt":"What would you like to write?","sendx.ai.prompt.placeholder":"For example: Invite Lan to the project review on Monday at 9am, formal tone","sendx.ai.tone":"Tone","sendx.ai.tone.formal":"Formal","sendx.ai.tone.friendly":"Friendly","sendx.ai.tone.short":"Brief","sendx.ai.language":"Language","sendx.ai.language.auto":"Automatic","sendx.ai.write":"Write it for me","sendx.ai.working":"Writing…","sendx.ai.rewrite":"Edit the current draft:","sendx.ai.mode.improve":"Improve","sendx.ai.mode.shorten":"Shorten","sendx.ai.mode.formal":"More formal","sendx.ai.mode.friendly":"Friendlier","sendx.ai.use":"Use this","sendx.ai.replace":"Replace message text","sendx.ai.insert":"Insert at cursor","sendx.ai.discard":"Discard","sendx.ai.review":"AI can make mistakes. Review before sending.","sendx.ai.empty_draft":"There is no text to edit yet.","sendx.ai.error":"The AI assistant couldn't answer. Please try again.","sendx.drive.button":"Attach from Drive","sendx.drive.title":"Choose from Drive","sendx.drive.mine":"My Drive","sendx.drive.shared":"Shared with me","sendx.drive.path":"Folder path","sendx.drive.loading":"Loading…","sendx.drive.empty":"This folder is empty.","sendx.drive.error":"Couldn't open Drive.","sendx.drive.attach":"Attach","sendx.drive.attached":"“{name}” attached.","sendx.drive.link":"Insert link","sendx.drive.link_expiry":"Link expires after","sendx.drive.expiry.days":"{count} days","sendx.drive.expiry.never":"Never","sendx.drive.link_inserted":"Link inserted: anyone with the link can download the file.","sendx.drive.link_scan_pending":"Link inserted. Recipients can download once the virus scan has finished.","sendx.drive.infected":"virus found","sendx.drive.too_large":"Over the 15 MB attachment limit; insert a link instead.","sendx.drive.hint":"Attach copies the file into the message (15 MB in total). Links work for your own files; anyone with the link can view.","sendx.attach.from_drive":"from Drive","sendx.attach.remove":"Remove {name}","sendx.oversize.title":"Attachments ({size}) exceed the {max} limit.","sendx.oversize.body":"Upload the files to Drive and send links instead of attachments?","sendx.oversize.action":"Upload to Drive and insert links","sendx.oversize.working":"Uploading {done}/{total}…","sendx.oversize.remove":"Remove selected files","sendx.oversize.failed":"Couldn't upload the files to Drive.","sendx.oversize.scan_note":"Recipients can download the files once the virus scan has finished.","sendx.prefs.title":"Sending","sendx.prefs.hint":"How long you can undo after pressing Send, and the time zone used by Schedule send.","sendx.prefs.undo":"Undo send for","sendx.prefs.undo.off":"Off","sendx.prefs.undo.seconds":"{count} seconds","sendx.prefs.zone":"Time zone","sendx.prefs.use_browser":"Use this device's time zone ({zone})","sendx.prefs.save":"Save","sendx.prefs.saved":"Saved.","sendx.error.generic":"That didn't work. Please try again.","sendx.error.validation_error":"Check the recipient addresses and message content.","sendx.error.schedule_in_past":"The scheduled time must be at least one minute from now.","sendx.error.schedule_limit":"Too many scheduled messages are waiting (at most {maxMessages} messages, {maxMb} MB). Send or cancel some scheduled messages first.","sendx.error.schedule_too_far":"Messages can be scheduled at most one year ahead.","sendx.error.schedule_invalid":"The scheduled time is not valid.","sendx.error.time_zone_invalid":"Unknown time zone.","sendx.error.undo_send_invalid":"Invalid undo delay.","sendx.error.recall_too_late":"Too late: the message has already been sent.","sendx.error.not_recallable":"Too late: the message has already been sent.","sendx.error.not_scheduled":"This message is no longer scheduled.","sendx.error.attachments_too_large":"Attachments exceed {maxMb} MB in total.","sendx.error.message_too_large":"The message is too large.","sendx.error.html_too_large":"The message text is too long.","sendx.error.draft_attachment_missing":"An attachment of the draft is missing. Please attach it again.","sendx.error.draft_unavailable":"Couldn't reach your mailbox. Please try again.","sendx.error.drive_not_found":"The Drive file was not found (it may have been deleted, or you lost access).","sendx.error.drive_forbidden":"You don't have access to this file.","sendx.error.drive_infected":"A virus was found in this file, so it can't be sent.","sendx.error.drive_external_sharing_disabled":"Your organisation has turned off sharing links outside the organisation.","sendx.error.drive_unavailable":"Drive is not enabled.","sendx.error.drive_quota_exceeded":"Your organisation's Drive storage is full.","sendx.error.drive_file_too_large":"The file exceeds Drive's maximum size.","sendx.error.drive_storage_unavailable":"Drive storage is temporarily unavailable.","sendx.error.sending_held":"Sending from this account is on hold. Contact your administrator.","sendx.error.sending_held_suspended":"Sending is paused because your organisation's account is suspended (see the notice at the top of the page).","sendx.error.virus_scan_unavailable":"The virus scanner is briefly unavailable, so the message was not sent. Please try again in a few minutes — your message is kept.","sendx.error.sender_domain_unverified":"Verify your domain first: {domain} is not verified yet, so mail to people outside your organisation cannot be sent. Mail to colleagues still works. An administrator adds the DNS records under Admin → Domains.","sendx.error.sending_unavailable":"Sending is not configured on this server. Contact your administrator.","sendx.error.rate_limited":"You've sent too many messages in the last hour. Please try again later.","sendx.error.template_limit":"Each mailbox can have up to {max} templates.","sendx.error.template_not_found":"Template not found.","sendx.error.ai_not_enabled":"Your organisation hasn't enabled the AI assistant.","sendx.error.ai_not_configured":"The AI assistant isn't configured on this server.","sendx.error.ai_rate_limited":"You've used all {limit} AI requests for this hour.","sendx.error.ai_budget_exhausted":"Today's AI usage budget has been used. Please try again later.","sendx.error.ai_refused":"The AI assistant declined this request.","sendx.error.ai_overloaded":"The AI assistant is busy. Please try again later.","sendx.error.ai_invalid_output":"The AI assistant returned an invalid result. Please try again.","sendx.error.mail_backend_busy":"The mail server is busy. Please try again in a moment.","sendx.error.compose_unavailable":"Advanced compose features are temporarily unavailable.","sendx.error.invalid_session":"Your session has expired.","sendx.error.mailbox_moving":"Your mailbox is being moved to another server. Please try again in a few seconds.","sendx.error.delegated_drive_forbidden":"Drive files cannot be attached when sending for another mailbox.","org.sidebar.labels":"Labels","org.sidebar.manage":"Manage","org.sidebar.snoozed":"Snoozed","org.sidebar.filters":"Filters","org.sidebar.no_labels":"No labels yet","org.sidebar.new_label":"+ New label","org.tabs.label":"Inbox categories","org.tab.primary":"Primary","org.tab.promotions":"Promotions","org.tab.social":"Social","org.tab.updates":"Updates","org.tab.forums":"Forums","org.tab.purchases":"Purchases","org.sort.label":"Sort","org.sort.newest":"Newest first","org.sort.unread_first":"Unread first","org.sort.starred_first":"Starred first","org.sort.priority":"Priority inbox","org.sort.apply":"Apply","org.link.organize":"Customize inbox","org.section.important":"Important and unread","org.section.starred":"Starred","org.section.pinned":"Pinned","org.section.others":"Everything else","org.section.rest":"Everything else","org.section.empty":"Nothing here.","org.bulk.label_pick":"Choose a label…","org.bulk.label_apply":"Apply label","org.bulk.label_remove":"Remove label","org.bulk.snooze":"Snooze","org.bulk.snooze_until":"Snooze until","org.bulk.mute":"Mute","org.bulk.mute_hint":"New replies in the conversation skip the inbox and go to Archive","org.bulk.move_tab":"Move to tab","org.bulk.tab_pick":"Tab","org.snooze.later_today":"Later today (in 3 hours)","org.snooze.tomorrow":"Tomorrow (8:00)","org.snooze.next_week":"Next week (Monday 8:00)","org.snooze.custom":"Pick date & time…","org.snooze.custom_label":"Custom date and time (used with “Pick date & time…”)","org.row.snoozed_back":"Snoozed","org.row.in_folder":"In {folder}","org.view.label_title":"Label: {name}","org.view.label_hint":"Messages with this label in Inbox, Archive, Sent and Drafts.","org.view.label_missing":"This label no longer exists.","org.view.snoozed_title":"Snoozed","org.view.snoozed_hint":"Messages come back to your Inbox, unread, at the time you chose.","org.view.snoozed_empty":"No snoozed messages.","org.view.snoozed_until":"Back at {time}","org.view.wake":"Unsnooze","org.view.open":"Open","org.view.retrying":"Not back yet; retrying automatically.","org.view.anywhere":"All folders","org.view.searching_in":"Searching: {folder}","org.view.unavailable":"The message list could not be loaded. Please try again.","org.search.help":"Search operators","org.search.help_intro":"Combine conditions (all must match). Use OR for either, a leading - to exclude, and \"…\" for an exact phrase.","org.search.op.from":"Sender","org.search.op.to":"Recipient (To)","org.search.op.cc":"Cc recipient","org.search.op.subject":"Subject contains","org.search.op.has_attachment":"Has an attachment","org.search.op.filename":"Attachment file name","org.search.op.is":"Unread / read / starred","org.search.op.in":"Search a folder (inbox, sent, drafts, archive, junk, trash) or all folders","org.search.op.label":"Has the label","org.search.op.dates":"Before / after a date (YYYY-MM-DD)","org.search.op.age":"Older / newer than (d = days, w = weeks, m = months, y = years)","org.search.op.size":"Larger / smaller than (K, M, G)","org.search.op.or":"Either condition","org.search.op.not":"Exclude","org.search.op.phrase":"Exact phrase","org.search.chips":"Search conditions","org.search.invalid":"Not understood, so it was ignored","org.search.remove":"Remove condition {chip}","org.page.title":"Customize your inbox","org.page.eyebrow":"Organize","org.page.back":"Back to Inbox","org.page.labels":"Labels","org.page.labels_hint":"Labels are stored on messages as IMAP keywords, so Thunderbird and other mail apps see them too. Up to {max} labels.","org.page.label_name":"Label name","org.page.label_color":"Colour","org.page.label_create":"Create label","org.page.label_save":"Save","org.page.label_delete":"Delete","org.page.label_delete_confirm":"Delete this label? It is removed from every message.","org.page.labels_empty":"No labels yet.","org.page.label_view":"View messages","org.page.display":"Inbox display","org.page.sort_hint":"Priority inbox puts unread mail from people you write to, or from colleagues writing to you directly, on top, followed by starred mail.","org.page.tabs":"Category tabs","org.page.tabs_hint":"Mail is sorted automatically from header signals (mailing lists, bulk-mail services, social networks, automated notifications…). Primary is always shown; mail of a tab you turn off stays in Primary.","org.page.save":"Save settings","org.page.muted":"Muted conversations","org.page.muted_hint":"New replies in these conversations go straight to Archive.","org.page.muted_empty":"No muted conversations.","org.page.unmute":"Unmute","org.page.rules":"Tab rules by sender","org.page.rules_hint":"Created when you move a message to another tab; later mail from that sender goes to the same tab.","org.page.rules_empty":"No rules yet.","org.page.rule_remove":"Remove rule","org.page.no_subject":"(no subject)","org.chips.label":"Message labels","org.chips.add":"Add label","org.chips.remove":"Remove label {name}","org.chips.manage":"Manage labels","org.notice.labeled":"Label applied.","org.notice.unlabeled":"Label removed.","org.notice.pick_label":"Choose a label first.","org.notice.updated":"Updated.","org.notice.snoozed":"Snoozed. It comes back to your Inbox on time.","org.notice.muted":"Conversation muted and archived.","org.notice.moved_tab":"Moved. Future mail from this sender goes to that tab too.","org.notice.woken":"Back in your Inbox.","org.notice.prefs_saved":"Display settings saved.","org.notice.label_created":"Label created.","org.notice.label_saved":"Label saved.","org.notice.label_deleted":"Label deleted; it is being removed from your messages.","org.notice.label_invalid":"Invalid label name (1–80 characters) or colour.","org.notice.label_exists":"A label with this name already exists.","org.notice.label_limit":"You have reached the maximum of 200 labels.","org.notice.label_not_found":"Label not found.","org.notice.keywords_unsupported":"This folder cannot store labels.","org.notice.unmuted":"Conversation unmuted.","org.notice.rule_removed":"Rule removed.","org.notice.snooze_time_past":"Pick a snooze time in the future.","org.notice.snooze_time_invalid":"Pick a date and time to snooze until.","org.notice.snooze_time_too_far":"You can snooze for at most a year.","org.notice.snooze_folder_not_allowed":"Only Inbox and Archive messages can be snoozed.","org.notice.snooze_not_found":"That snoozed message is gone.","org.notice.mute_no_thread":"Couldn't identify this message's conversation.","org.notice.mute_limit":"You have muted too many conversations (max 1000).","org.notice.multi_folder_selection":"“Select all” works on one folder at a time.","org.notice.category_rule_not_found":"This category rule no longer exists (it may have been removed elsewhere).","org.notice.muted_not_found":"This conversation is no longer muted.","org.notice.message_not_found":"Message not found — it may have been moved or deleted.","org.notice.mail_backend_busy":"The mail server is busy. Please try again in a few seconds.","org.color.5b7cfa":"Blue","org.color.0a6e5c":"Dark green","org.color.2e9d4f":"Green","org.color.d49b0b":"Yellow","org.color.e8710a":"Orange","org.color.d93025":"Red","org.color.e91e63":"Pink","org.color.8e44ad":"Purple","org.color.00897b":"Teal","org.color.607d8b":"Blue grey","org.color.custom":"Custom colour","org.notice.rate_limited":"You are listing mail too quickly. Please try again in {retryAfterSeconds} seconds.","reader.safety.danger.title":"Likely phishing","reader.safety.danger.body":"Don't click links, open attachments or send passwords, one-time codes or payment details. Images are blocked and every link asks before it opens.","reader.safety.warning.title":"Be careful with this message","reader.safety.warning.body":"Check the sender before you click links, open files or do what the message asks.","reader.safety.reasons":"What we noticed","reader.safety.external":"External sender ({domain}).","reader.safety.first_time":"You haven't received mail from this sender before.","reader.safety.report_hint":"If this is phishing, use “Report phishing” in the More menu.","reader.safety.images_blocked":"Images are blocked because this message looks like phishing.","reader.safety.signal.auth_dmarc_fail":"The message failed the DMARC check for {domain} — the sender may be forged.","reader.safety.signal.auth_spf_fail":"The sending server isn't authorised by {domain} (SPF failed).","reader.safety.signal.auth_dkim_fail":"The message's DKIM signature is invalid.","reader.safety.signal.auth_unverified":"We couldn't verify that the message really comes from {domain}.","reader.safety.signal.spoofed_own_domain":"The message imitates your own organisation's domain ({domain}).","reader.safety.signal.gateway_spam":"The spam filter rated this message as spam.","reader.safety.signal.display_name_impersonation":"The sender name looks like your colleague {name}, but the real address is {address} (external).","reader.safety.signal.display_name_address_mismatch":"The display name shows {shown}, but the message really comes from {address}.","reader.safety.signal.lookalike_domain":"The domain {domain} looks like {target} but isn't.","reader.safety.signal.homograph_domain":"The domain {domain} uses look-alike characters to imitate {target}.","reader.safety.signal.mixed_script_domain":"The domain {domain} mixes several alphabets.","reader.safety.signal.reply_to_mismatch":"Replies will go to {replyTo}, not to {address}.","reader.safety.signal.link_text_mismatch":"A link shows {shown} but actually leads to {actual}.","reader.safety.signal.link_ip_address":"A link points straight to the IP address {host}.","reader.safety.signal.dangerous_attachment":"The attachment {filename} can run programs on your computer.","reader.safety.signal.macro_attachment":"{filename} contains Office macros.","reader.safety.signal.disk_image_attachment":"The disk image {filename} is often used to slip past filters.","reader.safety.signal.html_attachment":"The HTML file {filename} may be a fake sign-in page.","reader.safety.signal.encrypted_archive":"{filename} is password-protected, so it couldn't be scanned for viruses.","reader.safety.signal.virus_unscanned_encrypted":"The server could not scan an attachment for viruses because it is a password-protected archive or document. Open it only if you trust the sender and expected the file.","reader.safety.signal.virus_unscanned_oversize":"The server could scan an attachment only partly: the archive is too large or nested too deeply. Open it only if you trust the sender.","reader.safety.signal.virus_unscanned_outage":"This message arrived while the server's virus scanner was temporarily unavailable, so it was not scanned for viruses. Open attachments or links only if you trust the sender.","reader.safety.signal.ai_suspicious":"The AI assistant noticed signs of fraud.","reader.safety.signal.multiple_warnings":"{count} warning signs at once.","reader.link.title":"Open this link?","reader.link.warning":"The message containing this link looks like phishing. Only open it if you're sure the page is safe, and never enter passwords or payment details there.","reader.link.destination":"Destination","reader.link.domain":"Domain","reader.link.open":"Open anyway","reader.link.back":"Back to the message","reader.link.invalid":"This link isn't valid.","reader.unsub.button":"Unsubscribe","reader.unsub.title":"Unsubscribe from {sender}?","reader.unsub.method.one_click":"Zomail will send the unsubscribe request to {target} for you.","reader.unsub.method.mailto":"Zomail will send an unsubscribe email from your address to {target}.","reader.unsub.method.link":"The unsubscribe page on {target} opens in a new tab; finish there.","reader.unsub.block":"Also block this sender","reader.unsub.confirm":"Unsubscribe","reader.unsub.open":"Open unsubscribe page","reader.unsub.cancel":"Cancel","reader.unsub.working":"Unsubscribing…","reader.unsub.done":"Unsubscribed. It can take a few days for the mail to stop.","reader.unsub.sent":"Unsubscribe email sent.","reader.unsub.opened":"Finish unsubscribing on the page that opened.","reader.unsub.blocked":"The sender is now blocked.","reader.unsub.block_failed":"Couldn't block the sender; you can try again in Settings.","reader.unsub.previous":"You unsubscribed on {date}.","reader.unsub.error.unsubscribe_rejected":"The list's server refused the request. Try again later.","reader.unsub.error.unsubscribe_unreachable":"Couldn't reach the list's server.","reader.unsub.error.unsubscribe_timeout":"The list's server didn't answer in time.","reader.unsub.error.unsubscribe_blocked_target":"The unsubscribe address isn't safe, so it was blocked.","reader.unsub.error.unsubscribe_not_https":"The unsubscribe address isn't safe, so it was blocked.","reader.unsub.error.unsubscribe_invalid_url":"The unsubscribe address isn't valid.","reader.unsub.error.unsubscribe_refused_suspicious":"This message looks like phishing: report it as spam instead of unsubscribing.","reader.unsub.error.unsubscribe_unavailable":"This message has no unsubscribe information.","reader.unsub.error.unsubscribe_rate_limited":"You've unsubscribed too many times this hour. Try again later.","reader.unsub.error.sending_held":"Sending is on hold for your account.","reader.unsub.error.virus_scan_unavailable":"The virus scanner is briefly unavailable. Try again in a few minutes.","reader.unsub.error.sender_domain_unverified":"Verify the domain {domain} first before sending mail outside your organisation.","reader.unsub.error.rate_limited":"You've sent too many messages. Try again later.","reader.unsub.error.generic":"Couldn't unsubscribe. Try again.","reader.unsub.error.unsubscribe_failed":"The sender did not accept the unsubscribe request. Use the unsubscribe link in the message, or mark it as junk.","reader.smart.label":"Quick replies","reader.smart.suggest":"Suggest replies","reader.smart.working":"Suggesting…","reader.smart.hint":"Pick one to open a reply with that text.","reader.smart.use":"Reply: {text}","delegation.filters.field.list":"Mailing list (List-Id)","delegation.filters.field.attachment":"Has attachment","delegation.filters.field.size":"Size","delegation.filters.size_over":"larger than","delegation.filters.size_kb":"Size (KB)","delegation.filters.and_attachment":"and has an attachment","delegation.filters.action.label":"Apply label","delegation.filters.action.important":"Mark as important","delegation.filters.action.forward":"Forward to","delegation.filters.action.never_spam":"Never send to Spam","delegation.filters.action.delete":"Delete permanently","delegation.filters.forward_to":"Forwarding address","delegation.filters.unverified":"{address} (not confirmed)","delegation.filters.label":"Label","delegation.filters.label_missing":"(label deleted)","delegation.filters.skip_inbox":"Skip the Inbox (archive)","delegation.filters.never_spam_hint":"Works with a From condition.","delegation.forward_all":"Forward all mail","delegation.forward_all.need_address":"Add and confirm a forwarding address in the section below first.","delegation.forward_all.enable":"Forward every incoming message","delegation.forward_all.to":"To","delegation.forward_all.keep_copy":"Keep a copy in this mailbox","delegation.forwarding.title":"Forwarding addresses","delegation.forwarding.hint":"Mail is only forwarded to confirmed addresses: we send a 6-digit code there and its owner gives it back to you.","delegation.forwarding.internal_only":"Your organisation only allows forwarding to addresses inside the organisation.","delegation.forwarding.address":"Address","delegation.forwarding.add":"Send confirmation code","delegation.forwarding.pending_address":"Address awaiting confirmation","delegation.forwarding.code":"Confirmation code","delegation.forwarding.verify":"Confirm","delegation.forwarding.code_sent":"Confirmation code sent. Enter the code the recipient gives you.","delegation.forwarding.verified":"Address confirmed. You can use it in filters or to forward all mail.","delegation.forwarding.status.pending":"Awaiting confirmation","delegation.forwarding.status.verified":"Confirmed","delegation.title":"Grant access to your mailbox","delegation.hint":"Let a colleague in your organisation read, send on your behalf and delete mail. They never see your settings, password or 2-step verification.","delegation.disabled_by_admin":"Your administrator has turned off mailbox delegation.","delegation.invite.address":"Colleague's email","delegation.invite.submit":"Invite","delegation.invite.sent":"Invitation sent. Your colleague accepts it in their Settings.","delegation.perm.read":"Read","delegation.perm.send":"Send on behalf","delegation.perm.send_as":"Send as the mailbox","delegation.perm.delete":"Delete mail","delegation.col.delegate":"Delegate","delegation.col.mailbox":"Mailbox","delegation.col.permissions":"Permissions","delegation.col.status":"Status","delegation.status.active":"Active","delegation.status.pending":"Awaiting acceptance","delegation.status.invited":"Invited","delegation.revoke":"Revoke","delegation.remove":"Remove","delegation.accept":"Accept","delegation.decline":"Decline","delegation.leave":"Leave","delegation.received":"Mailboxes you can access","delegation.kind.shared":"shared mailbox","delegation.open_hint":"Open these mailboxes from the account menu (your avatar, top right).","delegation.settings_owner_only":"You are in someone else's mailbox. Only its owner manages the settings.","delegation.menu.title":"Delegated mailboxes","delegation.menu.delegated":"Mailbox of {name} (delegated)","delegation.menu.shared":"{name} (shared mailbox)","delegation.admin.nav":"Delegation & shared mailboxes","delegation.admin.title":"Delegation, forwarding and shared mailboxes","delegation.admin.saved":"Saved.","delegation.admin.policy":"Policy","delegation.admin.policy_hint":"Turning an option off takes effect immediately, including existing access and saved filters.","delegation.admin.allow_delegation":"Let users delegate their mailbox to colleagues","delegation.admin.allow_external_forwarding":"Allow forwarding mail outside the organisation","delegation.admin.save":"Save policy","delegation.admin.delegations":"Current delegations","delegation.admin.delegations_hint":"Every step (invite, accept, open mailbox, send on behalf, revoke) is recorded in the audit log.","delegation.admin.none":"No delegations yet.","delegation.admin.shared":"Shared mailboxes","delegation.admin.shared_hint":"Team inboxes (e.g. info@) have no password of their own; members open them from the account menu.","delegation.admin.member":"Member","delegation.admin.member_address":"Member email","delegation.admin.add_member":"Add member","delegation.admin.create_shared":"Create a shared mailbox","delegation.admin.address":"Address","delegation.admin.display_name":"Display name","delegation.admin.quota_mb":"Storage (MB)","delegation.admin.seat_note":"Shared mailboxes count against the storage pool but not against user seats.","delegation.admin.create":"Create","delegation.error.generic":"That did not work. Please try again.","delegation.error.validation_error":"Please check the values you entered.","delegation.error.forbidden":"You do not have permission to do this.","delegation.error.delegate_not_found":"No colleague with this address in your organisation.","delegation.error.delegate_self":"You cannot delegate to yourself.","delegation.error.delegation_limit":"At most {max} delegates.","delegation.error.delegation_disabled":"Your organisation has turned off delegation.","delegation.error.delegation_exists":"This person already has access or was already invited.","delegation.error.delegation_not_found":"This access was not found.","delegation.error.delegation_not_pending":"This invitation is no longer open.","delegation.error.delegation_not_active":"Access has not been accepted yet or was revoked.","delegation.error.delegation_unavailable":"Delegated access is not configured on this server.","delegation.error.delegation_not_allowed":"Shared mailboxes are managed by administrators.","delegation.error.shared_mailbox_not_found":"Shared mailbox not found.","delegation.error.mailbox_exists":"This address is already in use.","delegation.error.domain_not_ready":"The domain is not verified yet.","delegation.error.domain_not_found":"Domain not found.","delegation.error.storage_limit_reached":"The plan's storage pool is full.","delegation.error.delegated_scope":"Not available while you are in someone else's mailbox.","delegation.error.delegated_send_forbidden":"This access does not include sending.","delegation.error.delegated_delete_forbidden":"This access does not include deleting mail.","delegation.error.forward_self":"A mailbox cannot forward to itself.","delegation.error.forward_external_disabled":"Your organisation does not allow forwarding outside it.","delegation.error.forward_mail_unavailable":"The code could not be sent: sending is not configured.","delegation.error.forward_already_verified":"This address is already confirmed.","delegation.error.forward_resend_too_soon":"Wait {seconds} seconds before sending another code.","delegation.error.forward_resend_limit":"Too many codes were sent to this address. Remove it and try again later.","delegation.error.forward_address_limit":"At most {max} forwarding addresses.","delegation.error.forward_not_found":"Add the address first.","delegation.error.forward_code_attempts":"Too many wrong codes. Send a new code.","delegation.error.forward_code_expired":"The code has expired. Send a new code.","delegation.error.forward_code_invalid":"Incorrect code.","delegation.error.forward_code_locked":"Too many wrong codes today. Try again tomorrow.","delegation.error.forward_daily_limit":"Too many confirmation codes were sent today. Try again tomorrow.","settingsui.error.forward_not_verified":"{address} has not been confirmed yet.","settingsui.error.forward_external_disabled":"Your organisation does not allow forwarding outside it.","settingsui.error.forward_self":"A mailbox cannot forward to itself.","settingsui.error.forward_loop":"{address} forwards back to you — that would loop.","settingsui.error.forward_rule_limit":"At most {max} forwarding filters.","settingsui.error.forward_target_limit":"At most {max} different forwarding addresses.","settingsui.error.forward_address_required":"Choose a forwarding address.","settingsui.error.label_required":"Choose a label.","settingsui.error.label_not_found":"The label no longer exists.","settingsui.error.size_invalid":"Size must be a number of KB.","settingsui.error.never_spam_from_only":"“Never send to Spam” only works with a From condition.","settingsui.apppw.current_password":"Current password (to confirm)","settingsui.error.reauth_required":"Enter your current password to confirm.","settingsui.error.password_too_weak":"The password is too easy to guess. Mix upper and lower case, digits and symbols; avoid common words. With a long password only the first 72 bytes are used (an accented letter takes 2–3 bytes), so the beginning must be strong on its own.","settingsui.error.password_contains_name":"The password must not contain the user's name or e-mail address.","settingsui.error.password_too_long":"The password can have at most {max} characters.","settingsui.error.mfa_throttled":"Too many incorrect codes. Try again in {minutes} minutes.","sidepanel.label":"Side panel: Calendar, Tasks, Contacts","sidepanel.open":"Open side panel (Calendar, Tasks, Contacts)","sidepanel.close":"Close side panel","sidepanel.tab.calendar":"Calendar","sidepanel.tab.tasks":"Tasks","sidepanel.tab.contacts":"Contacts","sidepanel.loading":"Loading…","sidepanel.refresh":"Refresh","sidepanel.cancel":"Cancel","sidepanel.save":"Save","sidepanel.delete":"Delete","sidepanel.calendar.new":"New event","sidepanel.calendar.from_email":"Create event from this email","sidepanel.calendar.attendees":"Invite (emails, comma-separated)","sidepanel.calendar.agenda":"Next 7 days","sidepanel.calendar.today":"Today","sidepanel.calendar.tomorrow":"Tomorrow","sidepanel.calendar.free":"No events","sidepanel.calendar.open":"Open Calendar →","sidepanel.tasks.eyebrow":"Syncs with your phone over CalDAV","sidepanel.tasks.new":"Add a task","sidepanel.tasks.new_placeholder":"Add a task…","sidepanel.tasks.title":"Title","sidepanel.tasks.notes":"Notes","sidepanel.tasks.due":"Due","sidepanel.tasks.add":"Add","sidepanel.tasks.details":"Add notes / due date","sidepanel.tasks.hide_details":"Hide notes / due date","sidepanel.tasks.added":"Task added.","sidepanel.tasks.deleted":"Task deleted.","sidepanel.tasks.add_email":"Add this email as a task","sidepanel.tasks.email_added":"Email added to your tasks.","sidepanel.tasks.email_exists":"This email is already in your tasks.","sidepanel.tasks.empty":"No tasks yet. Add one above.","sidepanel.tasks.open_list":"Open tasks","sidepanel.tasks.done_list":"Completed tasks","sidepanel.tasks.completed.one":"Completed ({count})","sidepanel.tasks.completed.other":"Completed ({count})","sidepanel.tasks.mark_done":"Mark as done: {title}","sidepanel.tasks.mark_open":"Mark as not done: {title}","sidepanel.tasks.edit":"Edit task: {title}","sidepanel.tasks.overdue":"Overdue · {date}","sidepanel.tasks.open_email":"Open email","sidepanel.tasks.sync_hint":"The “Tasks” list also shows up in Reminders (iPhone), Thunderbird and Tasks.org via CalDAV (see Settings → Calendar & contacts).","sidepanel.tasks.open":"Open Tasks page →","sidepanel.contacts.search":"Search contacts","sidepanel.contacts.results.one":"{count} contact","sidepanel.contacts.results.other":"{count} contacts","sidepanel.contacts.empty":"Your contacts are empty.","sidepanel.contacts.no_match":"No matching contacts.","sidepanel.contacts.sender":"Sender","sidepanel.contacts.recipient":"Recipient","sidepanel.contacts.add":"Add to contacts","sidepanel.contacts.added":"Added to contacts.","sidepanel.contacts.compose":"Send email","sidepanel.contacts.compose_to":"Send email to {address}","sidepanel.contacts.open":"Open Contacts →","sidepanel.error.signed_out":"Your session has ended. Please sign in again.","sidepanel.error.offline":"Couldn't reach the server. Please try again.","sidepanel.error.calendar_load":"Couldn't load the calendar.","sidepanel.error.event_create":"Couldn't create the event.","sidepanel.error.tasks_load":"Couldn't load your tasks.","sidepanel.error.task_save":"Couldn't save the task.","sidepanel.error.task_delete":"Couldn't delete the task.","sidepanel.error.contacts_load":"Couldn't load your contacts.","sidepanel.error.contact_save":"Couldn't save the contact.","sidepanel.error.tasks_unavailable":"The tasks service (CalDAV) isn't available.","sidepanel.error.calendar_unavailable":"Couldn't connect to the calendar service.","sidepanel.error.task_not_found":"This task no longer exists (it may have been deleted on another device).","sidepanel.error.task_conflict":"This task was just changed elsewhere. Please refresh.","sidepanel.error.invalid_task_id":"Invalid task id.","sidepanel.error.message_not_found":"Email not found (it may have been moved or deleted).","sidepanel.error.mail_unavailable":"The mailbox isn't available.","sidepanel.error.mail_backend_busy":"The mail server is busy. Please try again in a moment.","sidepanel.error.invalid_date":"Invalid date.","sidepanel.error.empty_update":"Nothing to save.","sidepanel.error.end_before_start":"The end time must be after the start.","sidepanel.error.invalid_range":"Invalid time range.","sidepanel.error.sending_unavailable":"Invitations can't be sent: sending isn't configured on this server.","sidepanel.error.sending_held":"Sending is on hold for this account, so invitations weren't sent.","sidepanel.error.virus_scan_unavailable":"The virus scanner is briefly unavailable, so invitations weren't sent. Try again in a few minutes.","sidepanel.error.sender_domain_unverified":"Invitations to people outside your organisation weren't sent: the domain {domain} is not verified yet.","sidepanel.error.validation_error":"Some details aren't valid. Please check and try again.","billing.nav":"Billing & plan","billing.eyebrow":"Billing","billing.title":"Plan & billing","billing.lead":"Your plan, users, storage, bills to pay and receipts.","billing.back":"Billing","billing.pick.title":"Choose an organisation","billing.pick.hint":"Platform administrators can see every customer's billing.","billing.pick.tenant":"Organisation","billing.pick.open":"Open","billing.pick.change":"Choose another organisation","billing.platform.nav":"Revenue console","billing.platform.title":"Revenue & plans (Zomail)","billing.platform.lead":"Price list, customer subscriptions, OnePay orders and bank-transfer payments.","billing.platform.tab.overview":"Overview","billing.platform.tab.plans":"Price list","billing.platform.tab.subscriptions":"Subscriptions","billing.platform.tab.orders":"Orders","billing.payments_disabled":"Online payment is not configured on this server. Contact Zomail to pay by bank transfer.","billing.buy_now":"Buy now","billing.pay_now":"Pay now","billing.pay_onepay":"Pay with OnePay","billing.onepay_note":"You will be taken to the OnePay gateway (Vietnamese ATM cards, Visa/Mastercard/JCB, QR).","billing.onepay_note_methods":"You will be taken to the OnePay gateway ({methods}).","billing.line.plan":"{name} plan — {users} × {period}","billing.line.users.one":"{count} user","billing.line.users.other":"{count} users","billing.line.period.monthly":"1 month","billing.line.period.yearly":"12 months","billing.line.storage":"Extra storage {gb} GB ({blocks} × 10 GB) × {period}","billing.bank_transfer":"Prefer a bank transfer? Contact Zomail with your organisation name; we record it and activate as soon as the money arrives.","billing.last_attempt":"The last payment attempt failed: {reason}","billing.status.trialing":"Trial","billing.status.active":"Active","billing.status.past_due":"Payment overdue","billing.status.suspended":"Suspended","billing.status.canceled":"Cancelled","billing.cycle.monthly":"Monthly","billing.cycle.yearly":"Yearly","billing.banner.trialing.title":"Free trial","billing.banner.trialing.body":"Your trial ends on {date} ({days} days left). Pay now to avoid any interruption — you keep the remaining trial days.","billing.banner.past_due.title":"Payment overdue","billing.banner.past_due.body":"Your plan has ended. Service continues until {date}; after that the account is suspended.","billing.banner.suspended.title":"Account suspended","billing.banner.suspended.body":"Users can still sign in, read and export mail, but cannot send mail and no new mailboxes can be created. Pay to reactivate immediately.","billing.banner.canceled.title":"Plan cancelled","billing.banner.canceled.body":"The plan ended on {date}. Users can still read and export mail; choose a plan below to come back.","billing.banner.suspended.partner_body":"Your service is suspended by your provider{provider} — contact them to resume it. Users can still sign in, read and export mail, but cannot send mail and no new mailboxes can be created.","standing.suspended.title":"Account suspended","standing.suspended.partner.admin":"Your service is suspended by your provider{provider} — contact them to resume it. Mail can still be read and exported; sending is on hold.","standing.suspended.partner.user":"Your organisation's service is suspended by its provider{provider}. Mail can still be read and exported; sending is on hold. Contact your organisation's administrator.","standing.suspended.direct.admin":"Your organisation's account is suspended for non-payment. Mail can still be read and exported; sending is on hold. Pay the outstanding bill to reactivate it at once.","standing.suspended.direct.user":"Your organisation's account is suspended. Mail can still be read and exported; sending is on hold. Contact your organisation's administrator.","standing.billing_link":"Open billing","billing.current.title":"Current plan","billing.current.hint":"Limits follow the plan you bought.","billing.current.plan":"Plan","billing.current.users":"Users","billing.current.mail":"Mail storage allocated","billing.current.drive":"Drive","billing.current.of":"of {total}","billing.current.extra":"+{gb} GB extra","billing.current.trial_ends":"Trial ends","billing.current.renews":"Renews","billing.current.ends":"Ends","billing.current.features":"Features: {list}","billing.pending_change":"From {date}: {plan} plan, {users} users, +{gb} GB, {cycle}. Choose your current plan again to drop this change.","billing.none.title":"No plan yet","billing.none.body":"This organisation has no plan. Choose one below and pay to start.","billing.outstanding.title":"Bills to pay","billing.outstanding.hint":"Renewal bills are created before the end date and e-mailed with a payment link.","billing.change.title":"Change plan, add users or storage","billing.choose.title":"Choose a plan","billing.change.hint":"Upgrades apply now (you pay the difference for the remaining days). Downgrades and cycle changes apply from the next period and cannot go below what you use today.","billing.change.plan":"Plan","billing.change.users":"Users","billing.change.storage":"Extra storage (GB, multiples of 10)","billing.change.cycle":"Billing cycle","billing.change.preview":"See price","billing.kind.none":"Nothing changes.","billing.kind.upgrade":"Upgrade now — pay the difference for the remaining {days}/{total} days of this period.","billing.kind.downgrade":"Takes effect on {date} (next period). Nothing to pay now.","billing.kind.trial_change":"During the trial changes apply at once and nothing is charged yet.","billing.kind.new":"Pay the first period.","billing.kind.renewal":"Pay to reactivate with this selection.","billing.next_period":"Price per period after the change:","billing.confirm.pay":"Pay {amount}","billing.confirm.apply":"Confirm change","billing.confirm.keep":"Keep the current plan","billing.plan.current":"Current","billing.plan.per_user_month":"/ user / month","billing.plan.yearly_discount":"{percent}% off when paid yearly","billing.plan.storage":"{gb} GB mail per user","billing.plan.drive":"{gb} GB Drive per user","billing.plan.meet":"Video meetings","billing.plan.ai":"AI assistant","billing.plan.archive":"Compliance archive & eDiscovery","billing.plan.min_users.other":"At least {count} users","billing.plan.min_users.one":"At least {count} user","billing.lines.item":"Item","billing.lines.qty":"Qty","billing.lines.unit":"Unit price","billing.lines.amount":"Amount","billing.lines.subtotal":"Subtotal","billing.lines.vat":"VAT ({percent}%)","billing.lines.total":"Total","billing.details.title":"Invoice details","billing.details.hint":"Used on receipts and VAT invoices. This address receives renewal notices and payment links.","billing.details.company":"Company name","billing.details.tax_code":"Tax code (MST)","billing.details.email":"Billing e-mail","billing.details.address":"Address","billing.details.locale":"E-mail language","billing.details.save":"Save details","billing.details.einvoice_note":"The official VAT e-invoice (hóa đơn điện tử) is issued by Zomail accounting from these details after payment.","billing.invoices.title":"Receipts","billing.invoices.hint":"Every payment has a printable receipt.","billing.invoices.empty":"No payments yet.","billing.invoices.view":"View receipt","billing.col.number":"Number","billing.col.date":"Date","billing.col.created":"Created","billing.col.description":"Description","billing.col.total":"Amount","billing.cancel.title":"Cancel renewal","billing.cancel.hint":"The plan keeps working until the end of the paid period and is not renewed after that. You can undo this before then.","billing.cancel.scheduled":"The plan ends on {date} and will not renew.","billing.cancel.button":"Cancel renewal","billing.cancel.revoke":"Keep renewing","billing.notice.changed_none":"Kept the current plan.","billing.notice.changed_trial_change":"Trial plan changed.","billing.notice.changed_downgrade":"Change scheduled for the next period.","billing.notice.changed_upgrade":"Upgraded.","billing.notice.cancel_scheduled":"Renewal cancelled. The plan works until the end of the period.","billing.notice.cancel_revoked":"The plan will keep renewing.","billing.notice.details_saved":"Invoice details saved.","billing.notice.plan_saved":"Plan saved.","billing.notice.marked_paid":"Payment recorded.","billing.notice.order_cancelled":"Order cancelled.","billing.notice.requeried":"Asked OnePay again.","billing.notice.subscription_started":"Subscription created.","billing.notice.subscription_edited":"Subscription updated.","billing.error.generic":"That didn't work. Please try again.","billing.error.unreachable":"Cannot reach the server.","billing.error.forbidden":"Only the organisation's owners, administrators and billing contacts can see billing.","billing.error.billing_owner_only":"Only the organisation's owner or billing role can change billing.","billing.readonly":"You are viewing billing read-only. Plan changes, payments, the billing e-mail and cancellation are done by the organisation's owner or billing role.","billing.error.admin_session_required":"Your session has expired. Please sign in again.","billing.error.admin_session_idle":"Administration has not been used for a while. Please sign in again.","billing.error.mfa_required":"Turn on 2-step verification to administer.","billing.error.billing_unavailable":"Billing is not enabled on this server.","billing.error.payments_unavailable":"Online payment is not configured.","billing.error.not_found":"Not found.","billing.error.order_not_found":"Bill not found, or the payment link is invalid.","billing.error.invoice_not_found":"Receipt not found.","billing.error.link_expired":"This link has expired.","billing.error.promo_hold_limit":"Too many open orders from your network or e-mail address use this promo code. Pay or cancel one, or try again in {minutes} minutes.","billing.link_expired.title":"This link has expired","billing.link_expired.body":"For your safety, payment and receipt links only work for a limited time. Ask for a new link — we send it to the order's e-mail address.","billing.link_expired.request":"E-mail me a new link","billing.link_expired.sent":"A new link is on its way to the order's e-mail address. Check your inbox (and the Spam folder).","billing.link_expired.not_sent":"No new link could be sent (the order has no e-mail address). Please contact Zomail.","billing.link_expired.failed":"A new link could not be sent right now. Please try again later or contact Zomail.","billing.link_expired.rate_limited":"Several mails already went to this address today. Please try again tomorrow or contact Zomail.","billing.admin.rotate_link":"Rotate pay link","billing.admin.rotate_link_hint":"Every pay / receipt link already sent for this order stops working at once (use it when a link leaked). New mails and pages carry a new link.","billing.notice.pay_link_rotated":"Pay link rotated. The old links no longer work.","billing.error.tenant_not_found":"Organisation not found.","billing.error.plan_not_found":"This plan does not exist or is no longer sold.","billing.error.no_subscription":"The organisation has no plan yet. Choose one first.","billing.error.subscription_exists":"The organisation already has a subscription.","billing.error.already_paid":"This has already been paid.","billing.error.reference_used":"This reference is already recorded on another paid order — one transfer pays one order.","billing.error.order_closed":"This bill can no longer be paid.","billing.error.order_expired":"The payment session expired. Please start again.","billing.error.platform_only":"Only Zomail can do this.","billing.error.below_min_users":"This plan needs at least {min} users.","billing.error.above_max_users":"This plan allows at most {max} users.","billing.error.invalid_extra_storage":"Extra storage is sold in blocks of 10 GB.","billing.error.below_current_seats":"Cannot go below the mailboxes in use ({used}).","billing.error.below_current_storage":"Mail storage cannot be less than what is allocated to mailboxes ({usedGb} GB).","billing.error.below_current_drive":"Drive storage cannot be less than what is in use ({usedGb} GB).","billing.error.zero_amount":"There is nothing to pay.","billing.error.invalid_lines":"The bill's lines are invalid.","billing.error.vat_line_not_allowed":"Lines must not contain VAT (billing adds it).","billing.error.invalid_return_to":"Invalid return address.","billing.error.invalid_purpose":"Invalid order type.","billing.error.invalid_reference":"Invalid reference.","billing.error.validation_error":"Please check the values.","billing.error.invalid_email":"Invalid e-mail address.","billing.error.invalid_tax_code":"Invalid tax code (10 or 13 digits).","billing.error.reference_required":"Enter the bank transfer reference.","billing.error.invalid_plan_code":"Plan codes use lowercase letters, digits, - or _ (2–40 characters).","billing.error.invalid_max_users":"The maximum is below the minimum.","billing.error.no_current_period":"There is no paid period yet.","billing.error.invalid_token":"Invalid link.","billing.reason.paid":"Paid.","billing.reason.pending":"Waiting for confirmation.","billing.reason.failed":"The payment did not go through.","billing.reason.bank_declined":"The bank declined the transaction.","billing.reason.issuer_not_found":"The card's issuing bank was not found.","billing.reason.card_expired":"The card has expired.","billing.reason.insufficient_funds":"Insufficient funds.","billing.reason.bank_error":"The bank reported an error. Please try again later.","billing.reason.system_error":"Payment system error. Please try again later.","billing.reason.not_registered_internet_banking":"The card/account is not registered for internet banking.","billing.reason.invalid_card":"Wrong card details (name or number).","billing.reason.card_locked":"The card is expired or locked.","billing.reason.not_registered_online":"The card is not enabled for online payments.","billing.reason.invalid_date":"Wrong issue/expiry date.","billing.reason.over_limit":"The payment limit was exceeded.","billing.reason.invalid_account":"Invalid account.","billing.reason.account_locked":"The account is locked.","billing.reason.wrong_otp":"Wrong OTP code.","billing.reason.timeout":"The payment timed out.","billing.reason.cancelled":"You cancelled the payment.","billing.reason.invalid_signature":"The gateway's answer was invalid (bad signature). Nothing was recorded.","billing.reason.amount_mismatch":"The amount returned does not match the order.","billing.reason.merchant_mismatch":"The answer does not belong to this merchant.","billing.reason.unknown_order":"Transaction not found.","billing.reason.not_found":"The gateway has no record of this payment yet.","billing.reason.expired":"The payment session expired.","billing.reason.superseded":"Replaced by a newer bill.","billing.reason.cancelled_by_admin":"Cancelled by Zomail.","billing.reason.canceled":"The plan was cancelled.","billing.reason.payments_unavailable":"Online payment is not configured.","billing.result.paid.title":"Payment successful","billing.result.paid.body":"Thank you! Your plan is active and the receipt is ready.","billing.result.paid.processing":"Thank you! We received the payment and are activating the service (a few seconds).","billing.result.pending.title":"Waiting for confirmation","billing.result.pending.body":"The gateway has not confirmed the result yet. If your account was charged, the payment is recorded automatically within a few minutes.","billing.result.failed.title":"Payment not completed","billing.result.help":"Need help? Send Zomail the order details on this page.","billing.result.to_portal":"Back to billing","billing.result.sign_in":"Sign in","billing.result.licence_sent":"Your licence key and management link have been emailed to you. Paste the key in Admin → Licence on your Private server (servers connected to Zomail receive it automatically).","billing.result.refresh":"Check again","billing.result.retry":"Try again","billing.pay.title":"Pay your Zomail bill","billing.pay.already_paid":"This bill has been paid. Thank you!","billing.pay.closed":"This bill is no longer valid. Open Billing in the admin area to create a new one.","billing.receipt.title":"Receipt","billing.receipt.subtitle":"Phiếu thu — confirmation of payment received","billing.receipt.number":"Receipt no.","billing.receipt.issued":"Issued","billing.receipt.paid":"Paid","billing.receipt.method":"Method","billing.receipt.seller":"Seller","billing.receipt.buyer":"Buyer","billing.receipt.tax_code":"Tax code","billing.receipt.received":"Received in full: {amount}","billing.receipt.print":"Print / save as PDF","billing.receipt.not_einvoice":"This receipt confirms the payment; it does not replace the VAT invoice. The official e-invoice is issued separately from your invoice details.","billing.receipt.einvoice":"E-invoice no. {number}.","billing.gateway.onepay":"OnePay","billing.gateway.manual":"Bank transfer","billing.summary.title":"Revenue","billing.summary.hint":"Vietnam time, including VAT (except MRR).","billing.summary.month":"This month","billing.summary.last_month":"Last month","billing.summary.year":"This year","billing.summary.mrr":"MRR (before VAT)","billing.summary.mrr_vat":"{amount} incl. VAT","billing.summary.users":"Paying users","billing.summary.outstanding":"Outstanding","billing.summary.orders.other":"{count} orders","billing.summary.orders.one":"{count} order","billing.summary.unfulfilled":"{count} paid order(s) not fully activated — check the worker/API logs (billing fulfilment).","billing.plans.title":"Price list","billing.plans.hint":"Prices exclude VAT ({vat}%). Changes apply to new orders and the next renewals.","billing.plans.code":"Code","billing.plans.name_vi":"Name (Vietnamese)","billing.plans.name_en":"Name (English)","billing.plans.description_vi":"Description (Vietnamese)","billing.plans.description_en":"Description (English)","billing.plans.price":"Price / user / month (₫)","billing.plans.discount":"Yearly discount (%)","billing.plans.storage":"Mail per user (GB)","billing.plans.extra_price":"Extra 10 GB / month (₫)","billing.plans.drive":"Drive per user (GB)","billing.plans.meet_max":"Max people per meeting room","billing.plans.meet_max_hint":"Empty = the cluster's limit","billing.plans.min_users":"Minimum users","billing.plans.max_users":"Maximum (empty = unlimited)","billing.plans.trial_days":"Trial days","billing.plans.sort":"Order","billing.plans.tenant_plan":"Tenant tier","billing.plans.active":"On sale","billing.plans.inactive":"Retired","billing.plans.new":"New plan","billing.plans.save":"Save plan","billing.plans.note":"Every change is written to the audit log.","billing.subs.title":"Subscriptions","billing.subs.hint":"Every customer with a plan. Click a name to open that customer's billing page.","billing.subs.status":"Status","billing.subs.all":"All","billing.subs.search":"Search (name, e-mail)","billing.subs.filter":"Filter","billing.subs.empty":"No subscriptions.","billing.subs.tenant":"Customer","billing.subs.until":"Ends / renews","billing.subs.canceling":"Cancels at period end","billing.subs.set":"Set","billing.subs.start.title":"Create a subscription for an existing customer","billing.subs.start.hint":"Customers created before billing existed: start a trial, or activate a period paid outside the system. The organisation's limits then follow the plan.","billing.subs.start.button":"Create subscription","billing.orders.title":"Orders","billing.orders.hint":"Search by vpc_MerchTxnRef, OnePay transaction number, order id, e-mail or customer name.","billing.orders.search":"Search","billing.orders.empty":"No orders.","billing.orders.purpose":"Type","billing.orders.reference":"Reference","billing.orders.txn_onepay":"OnePay transaction","billing.orders.txn_paypal":"PayPal capture","billing.orders.txn_manual":"Transfer reference","billing.orders.manual_ref":"Transfer reference","billing.orders.note":"Note","billing.orders.mark_paid":"Record bank transfer","billing.orders.requery":"Ask OnePay again (QueryDR)","billing.orders.cancel":"Cancel order","billing.orders.cancel_confirm":"Cancel this unpaid order?","billing.orders.code":"Response code","billing.orders.queries":"Queries","billing.orders.pay_link":"Payment link","billing.orders.fulfil_error":"Activation error: {error}","billing.orders.refund_note_onepay":"OnePay has no refund API: refund by hand in OnePay's merchant portal, then record it here (a credit note is issued).","billing.orders.refund_note_paypal":"PayPal payments are refunded through PayPal's API from this page (in full or in part); the credit note is recorded automatically.","billing.orders.refund_note_manual":"Bank transfer payments are refunded by hand (a transfer back to the customer), then recorded here (a credit note is issued).","billing.orders.record_refund":"Record a refund already made","billing.orders.refund_ref_onepay":"Refund reference in the OnePay portal","billing.orders.refund_ref_manual":"Bank reference of the refund transfer","billing.attempt_refund.needs_refund":"Refund needed","billing.attempt_refund.refunded":"Refunded","billing.attempt_refund.partially_refunded":"Partially refunded","billing.reason.order_paid_by_other_method":"Closed: the order was paid another way.","billing.order_status.pending":"Awaiting payment","billing.order_status.paid":"Paid","billing.order_status.failed":"Failed","billing.order_status.expired":"Expired","billing.order_status.refunded":"Refunded","billing.attempt.pending":"Pending","billing.attempt.paid":"Paid","billing.attempt.failed":"Failed","billing.attempt.expired":"Expired","billing.attempt.duplicate":"Duplicate (refund needed)","billing.purpose.signup":"New signup","billing.purpose.renewal":"Renewal","billing.purpose.upgrade":"Upgrade","billing.purpose.invoice":"Other bill","adminui.error.tenant_suspended":"The organisation's account is suspended, so no mailboxes can be added until it is reactivated.","delegation.error.tenant_suspended":"The organisation's account is suspended.","archive.error.archive_not_in_plan":"The current plan does not include the compliance archive. Upgrade on the Billing page.","drive.error.tenant_suspended":"The organisation's account is suspended: Drive is read-only (you can still view and download, not upload or share).","drive.error.attachment_not_found":"Attachment not found — the message may have been moved or deleted.","drive.error.attachment_too_large":"The attachment is too large to save to Drive.","drive.error.scan_failed":"This file could not be scanned for viruses, so downloading and previewing it is blocked. Contact your administrator.","billing.details.buyer_type":"Invoice to","billing.details.buyer_type.company":"Company / organisation","billing.details.buyer_type.individual":"Individual","billing.details.tax_code.hint":"10-digit MST (check digit verified), 10-3 digits for a branch, 12-digit citizen ID for individuals, or a foreign tax ID.","billing.receipt.in_words":"Amount in words: {words}.","billing.receipt.credit_notes":"Adjustments / refunds","billing.receipt.credit_note":"Credit note {number}: {amount} refunded on {date} (refund reference {reference}).","billing.reason.refund_pending":"This checkout had been replaced by another order, so the amount you just paid will be refunded (Zomail handles it within a few business days).","billing.reason.checkout_cancelled":"You cancelled the payment.","billing.error.order_not_paid":"The order is not paid.","billing.error.selection_mismatch":"The plan / users differ from what was paid.","billing.error.refund_not_allowed":"A refund cannot be recorded for this item.","billing.error.already_refunded":"The refund was already recorded.","billing.error.deletion_not_found":"Deletion request not found.","billing.error.deletion_exists":"This organisation already has an open deletion request.","billing.error.deletion_closed":"This deletion is running or finished.","billing.error.confirm_slug_mismatch":"The slug you typed does not match the organisation.","billing.error.partner_billed":"This customer is billed by its partner; plan changes go through the partner.","billing.error.selection_missing":"This order has no saved plan selection and cannot be processed. Create a new order or contact Zomail.","billing.error.rate_limited":"Too many payment attempts for this order. Please try again in a few minutes.","billing.error.order_not_cancellable":"This bill cannot be cancelled here; please contact Zomail.","billing.error.payment_unavailable":"Online payment is temporarily unavailable. Try again later or contact Zomail.","billing.error.signup_not_found":"The signup for this order was not found. Please sign up again.","billing.error.promo_used_up":"This promo code has been used up.","billing.summary.hint_net":"Vietnam time. Revenue excludes VAT and amounts waiting for a refund; MRR counts only subscriptions with a paid current period.","billing.summary.gross":"{amount} incl. VAT","billing.summary.refunds":"Refunds pending","billing.platform.tab.refunds":"Refunds","billing.platform.tab.deletions":"Data deletion","billing.notice.refund_recorded":"Refund recorded; a credit note was issued.","billing.notice.deletion_requested":"Deletion requested; the worker deletes the organisation within minutes.","billing.notice.deletion_approved":"Deletion approved; the worker deletes the organisation within minutes.","billing.notice.deletion_canceled":"The organisation is kept (deletion cancelled).","billing.refunds.title":"Refunds to make","billing.refunds.hint":"Money received but not applied: duplicate payments, an old order paid after a newer one existed, a renewal/upgrade priced on a plan that changed meanwhile. PayPal: refund through the API with the button below. OnePay: refund in the merchant portal; bank transfer: transfer it back — then record it here (a credit note is issued).","billing.refunds.empty":"Nothing to refund.","billing.refunds.when":"When","billing.refunds.customer":"Customer","billing.refunds.reason":"Reason","billing.refunds.reference":"Transaction","billing.refunds.record":"Record","billing.refunds.reference_placeholder":"OnePay / bank refund reference","billing.refunds.mark":"Refunded","billing.refunds.confirm":"Confirm that {amount} was refunded to the customer?","billing.refunds.reason.duplicate_payment":"Second payment for a paid order","billing.refunds.reason.superseded_order_paid":"Old order paid late (a newer order existed)","billing.refunds.reason.subscription_changed":"Subscription changed before the payment","billing.refunds.reason.already_paid_subscription":"Signup paid while a paid period already existed","billing.deletions.title":"Organisation data deletion","billing.deletions.hint":"Cancelled organisations past the export window are scheduled for deletion, but nothing is deleted until a platform admin approves by typing the slug. A dry-run plan is computed first. Receipts and orders are kept for accounting.","billing.deletions.empty":"No deletion requests.","billing.deletions.tenant":"Organisation","billing.deletions.reason":"Reason","billing.deletions.status":"Status","billing.deletions.plan":"Will delete (dry run)","billing.deletions.actions":"Actions","billing.deletions.reason.billing_canceled":"Cancelled, export window over","billing.deletions.reason.customer_request":"Customer request (Decree 13/2023)","billing.deletions.reason.platform":"Zomail decision","billing.deletions.status.scheduled":"Awaiting approval","billing.deletions.status.approved":"Approved, queued","billing.deletions.status.running":"Deleting","billing.deletions.status.done":"Deleted","billing.deletions.status.failed":"Failed (approve to retry)","billing.deletions.status.canceled":"Kept","billing.deletions.approved_by":"Approved by {who}","billing.deletions.grace":"Permanently deleted on {date} — until then “Keep” undoes it, nothing is lost","billing.deletions.plan_summary":"{mailboxes} mailboxes, {domains} domains, {files} Drive files; keeps {orders} orders","billing.deletions.missing_doveadm":"{count} mailboxes have no doveadm endpoint — the deletion stops until it is configured","billing.deletions.confirm":"Permanently delete all data of {slug}? This cannot be undone.","billing.deletions.type_slug":"Type {slug} to confirm","billing.deletions.approve":"Approve deletion","billing.deletions.keep":"Keep","billing.deletions.delete_title":"Delete an organisation","billing.deletions.delete_hint":"For personal-data deletion requests (Decree 13/2023/ND-CP) or a Zomail decision. Deletes mailboxes, Drive and data; cannot be undone.","billing.deletions.delete_confirm":"Permanently delete this organisation? This cannot be undone.","billing.deletions.tenant_id":"Organisation ID (UUID)","billing.deletions.type_slug_any":"Type the organisation's slug to confirm","billing.deletions.note":"Note (request reference…)","billing.deletions.delete":"Delete organisation","transfer.title":"Bank transfer","transfer.lead":"Transfer the exact amount with the exact reference below so we can match your payment.","transfer.bank":"Bank","transfer.branch":"Branch","transfer.account":"Account number","transfer.holder":"Account holder","transfer.swift":"SWIFT code","transfer.amount":"Amount","transfer.reference":"Transfer reference","transfer.reference_hint":"Write it exactly as shown.","transfer.order_number":"Order number","transfer.due":"Transfer by","transfer.qr_alt":"VietQR code: scan with your banking app","transfer.qr_hint":"Scan with your banking app: account, amount and reference are filled in.","transfer.no_qr":"No QR code for this account — please enter the transfer details by hand.","transfer.activation":"We'll activate within business hours after the transfer arrives and e-mail you the receipt.","transfer.or_onepay":"Or pay now through OnePay:","transfer.signup.finish":"Get bank transfer details","transfer.signup.finish_hint":"{amount}. Your workspace is created once Zomail receives the transfer (business hours).","transfer.signup.waiting.title":"Waiting for your bank transfer","transfer.signup.waiting.body":"Your workspace is created as soon as Zomail records the transfer (business hours); we e-mail you when it is ready. You can close this page.","transfer.signup.details":"View the transfer details","transfer.signup.due":"Transfer by {date}.","transfer.portal.pay":"Get bank transfer details ({amount})","transfer.portal.bill":"Transfer details","transfer.portal.note":"You will see the account, amount, transfer reference and a QR code. The plan is activated once Zomail receives the money.","transfer.quote.promotion":"{name} applied (−{percent}%): you save {amount} before VAT.","billing.kind.trial_paid":"Pay to start your paid plan with this selection (the remaining trial days are kept).","billing.platform.tab.payments":"Payment","transfer.admin.title":"Bank transfer","transfer.admin.hint":"When on, Cloud customers can choose \"bank transfer\" when they sign up, buy, upgrade or renew: the order waits for payment, the pay page shows the details below with a VietQR code, and you record the money in the Orders tab (\"Mark paid\"). Independent of OnePay — both can be on.","transfer.admin.onepay_on":"OnePay: active ({profiles}) and takes VND orders — customers can choose OnePay or bank transfer.","transfer.admin.onepay_no_vnd":"OnePay: active ({profiles}), but no profile takes VND orders — add VND to a profile's order currencies (a USD merchant also needs the exchange rate).","transfer.admin.onepay_off":"OnePay: no merchant profile is active (OnePay above) — bank transfer is the only way to pay VND orders once it is on.","transfer.admin.enabled":"Accept payment by bank transfer","transfer.admin.bank_name":"Bank name","transfer.admin.bank_bin":"VietQR bank code (BIN, 6 digits)","transfer.admin.bank_bin_hint":"E.g. Vietcombank 970436, Techcombank 970407. Leave empty for no QR code.","transfer.admin.account_number":"Account number","transfer.admin.account_holder":"Account holder","transfer.admin.branch":"Branch","transfer.admin.swift":"SWIFT code (optional)","transfer.admin.reference_format":"Transfer reference format","transfer.admin.reference_format_hint":"Must contain {code} (the 8-character order number). Plain letters, digits, spaces and hyphens only. E.g. ZM {code} → ZM 1A2B3C4D.","transfer.admin.instructions_vi":"Extra instructions (Vietnamese)","transfer.admin.instructions_en":"Extra instructions (English)","transfer.admin.expiry_days":"Keep transfer orders open (days)","transfer.admin.expiry_days_hint":"After that the order closes and any promo code it held is released. Money that arrives late can still be recorded on it.","transfer.admin.save":"Save","transfer.admin.readonly":"Only billing staff can change this.","billing.notice.bank_transfer_saved":"Bank transfer settings saved.","billing.error.invalid_bank_bin":"The VietQR bank code is exactly 6 digits.","billing.error.invalid_account_number":"The account number is 4–19 digits or letters.","billing.error.invalid_swift":"A SWIFT code has 8 or 11 characters (e.g. BFTVVNVX).","billing.error.invalid_reference_format":"The format must contain {code} and only plain letters, digits, spaces and hyphens.","billing.error.bank_transfer_incomplete":"Enter the bank name, account number and account holder before turning bank transfer on.","transfer.orders.awaiting":"Bank transfers awaiting","transfer.orders.all":"All orders","transfer.orders.hint":"Search by the transfer reference or order number (e.g. ZM 1A2B3C4D). When the money arrives: open the order → enter the bank transaction reference → Mark paid.","transfer.orders.number":"Order no.","transfer.orders.reference":"Transfer reference","transfer.orders.chosen":"Customer chose bank transfer","currency.field":"Currency","currency.option.VND":"VND (₫)","currency.option.USD":"USD ($)","currency.total_usd":"Total (USD)","currency.not_sold_usd":"Not sold in USD","currency.admin.usd.title":"USD sales","currency.admin.usd.hint":"Customers abroad pay in USD through OnePay's international card gateway. USD prices are set per plan, never converted from VND. Bank transfer / VietQR is for VND only.","currency.admin.usd.onepay_on":"OnePay takes USD orders ({profiles}): customers can pay by card in USD.","currency.admin.usd.onepay_off":"No active OnePay profile takes USD orders (OnePay above): USD prices still show, but OnePay cannot charge them — customers pay with PayPal when it is on, otherwise they are asked to contact sales.","currency.admin.usd.vat":"VAT on USD sales (%)","currency.admin.usd.vat_hint":"Empty = same as VND ({percent} %).","currency.admin.usd.effective":"In effect: {percent} %.","currency.admin.usd.accountant":"Your accountant decides the VAT treatment of services sold abroad (for example 0 %).","currency.admin.usd.save":"Save USD settings","currency.summary.vnd_only":"The figures above are VND orders only.","currency.summary.usd_title":"USD revenue","currency.summary.usd_hint":"Orders in USD, reported separately — never added to the VND figures. Revenue is net of VAT.","currency.plans.price_usd":"Price per user / month (USD)","currency.plans.extra_price_usd":"Extra storage per 10 GB / month (USD)","currency.plans.usd_hint":"In dollars, up to 2 decimals (e.g. 3.50). Empty = not sold in USD.","currency.subs.start_hint":"Fixed for the subscription's life. USD needs a plan with a USD price.","currency.portal.fixed":"This subscription is billed in {currency} (fixed for the subscription's life).","currency.portal.usd_unavailable":"Card payment in USD is not available yet. Choose VND or contact sales.","currency.pay.usd_unavailable":"Card payment in USD is not available yet. Please contact Zomail sales to pay this order.","currency.checkout.usd_unavailable":"Card payment in USD is not available yet — switch to VND or contact sales.","currency.licence.year_usd":"Price per mailbox / year (USD)","currency.licence.month_usd":"Price per mailbox / month (USD)","currency.licence.field_hint":"Later renewals and upgrades are billed in this currency. USD needs the USD price list.","currency.licence.manage_hint_usd":"Renew or add mailboxes to the licence (billed in USD). Card payment in USD is not available yet: create the bill here, then contact Zomail sales to pay it.","currency.licence.usd_note":"Card payment in USD is not available yet. The bill shows the exact amount; contact Zomail sales with the customer name to pay it.","signup.error.currency_not_offered":"This plan is not sold in USD yet. Please choose VND.","signup.error.payment_unavailable_usd":"Card payment in USD is not available yet — switch to VND or contact sales.","billing.error.currency_not_offered":"This plan is not sold in USD yet. Choose VND or another plan.","billing.error.currency_fixed":"This organisation pays in {currency}; the currency cannot change while a subscription is live.","billing.error.invalid_vat_percent":"VAT must be between 0 and 100 %, or empty.","billing.error.invalid_usd_amount":"Invalid USD price. Enter dollars with up to 2 decimals (e.g. 3.50), or leave it empty.","billing.notice.usd_settings_saved":"USD sales settings saved.","lic.error.currency_not_offered":"Private Mail licences are not sold in USD yet. Please choose VND.","lic.error.invalid_usd_amount":"Invalid USD price. Enter dollars with up to 2 decimals (e.g. 3.50), or leave it empty.","pay.onepay.title":"Card / wallet through OnePay","pay.onepay.method.INTERCARD":"International card (Visa/Mastercard/JCB/Amex)","pay.onepay.offer.INTERCARD":"International cards (Visa/Mastercard/JCB/Amex)","pay.onepay.offer.APPLEPAY":"Apple Pay","pay.onepay.offer.GOOGLEPAY":"Google Pay","pay.onepay.offer.SAMSUNGPAY":"Samsung Pay","pay.onepay.offer.MOBILEBANKING_EWALLET":"Mobile banking / e-wallets","pay.onepay.offer.ALL_VND":"Domestic ATM cards, Visa/Mastercard/JCB, QR","pay.onepay.offer.ALL_USD":"International cards (Visa/Mastercard/JCB/Amex)","pay.onepay.offer.charged":"{methods} (charged as {amount})","pay.onepay.method.APPLEPAY":"Apple Pay","pay.onepay.method.GOOGLEPAY":"Google Pay","pay.onepay.method.SAMSUNGPAY":"Samsung Pay","pay.onepay.method.MOBILEBANKING_EWALLET":"Mobile banking / e-wallet","pay.onepay.method.ALL":"Pay with OnePay","pay.onepay.converted":"Charged as {amount} (rate {rate})","pay.onepay.note":"Amount {amount}. You will be taken to the OnePay gateway to finish the payment.","pay.open_attempt.wait":"A OnePay payment for this order is still open (ref {ref}). Finish it in the other tab; OnePay can be tried again from {time}.","pay.open_attempt.wait_others":"A OnePay payment for this order is still open (ref {ref}), so OnePay is locked until {time}. You can pay with {others} below right now — or finish the OnePay payment in the other tab.","pay.open_attempt.other.paypal":"PayPal","pay.open_attempt.other.bank_transfer":"bank transfer","pay.open_attempt.other.both":"PayPal or bank transfer","pay.open_attempt.review":"We are checking an earlier payment for this order with OnePay; we will e-mail you — contact support if needed.","pay.paypal.title":"PayPal","pay.paypal.converted":"PayPal charges {amount} (rate {rate}).","pay.paypal.converted_dated":"PayPal charges {amount} (rate {rate}, updated {date}).","pay.paypal.sandbox":"PayPal is in test mode (sandbox): no real money is taken.","pay.paypal.loading":"Loading PayPal…","pay.paypal.working":"Processing your payment…","pay.paypal.pending":"PayPal is processing the payment; we will e-mail you when it is done.","pay.paypal.load_failed":"PayPal could not be loaded. Turn off ad blockers / reload the page, or choose another way to pay.","pay.paypal.unavailable":"No PayPal payment option is turned on.","pay.paypal.card_title":"Debit / credit card","pay.paypal.card_submit":"Pay {amount}","pay.paypal.card_invalid":"Please check the card details.","pay.charged.onepay":"Charged as {amount} via OnePay (rate {rate}).","pay.charged.paypal":"Charged as {amount} via PayPal (rate {rate}).","pay.receipt.charged":"Charged as {amount} via {gateway}.","pay.receipt.charged_rate":"Charged as {amount} via {gateway} (rate {rate}).","pay.receipt.partial":"partial refund","pay.signup.paypal":"Pay with PayPal ({amount})","pay.signup.paypal_hint":"PayPal wallet, card, Apple Pay or Google Pay (charged in USD).","pay.signup.paypal_open":"Open the PayPal payment page","pay.portal.paypal":"Pay with PayPal ({amount})","pay.portal.paypal_note":"You will be taken to the PayPal payment page (charged in USD).","billing.gateway.paypal":"PayPal","billing.attempt.unresolved":"Needs reconciliation","billing.reason.merchant_not_found":"The gateway does not know this merchant. Please contact Zomail.","billing.reason.bank_processing_error":"The bank could not process the transaction. Please try again.","billing.reason.invalid_card_number":"Wrong card number.","billing.reason.invalid_card_name":"Wrong cardholder name.","billing.reason.card_declined":"The transaction was declined.","billing.reason.missing_transaction_no":"OnePay reported success without a transaction number; we will check it by hand and confirm by e-mail.","billing.reason.needs_reconciliation":"We received an answer from OnePay we must check by hand; we'll confirm by e-mail.","billing.reason.reconciled_failed":"After checking with OnePay, the payment did not go through.","billing.reason.access_code_mismatch":"The answer does not match this merchant's access code. Nothing was recorded.","billing.reason.currency_mismatch":"The answer's currency does not match the payment. Nothing was recorded.","billing.reason.transaction_no_used":"This transaction number was already used for another payment.","billing.reason.paypal_declined":"PayPal declined the payment.","billing.reason.paypal_cancelled":"You cancelled the PayPal payment.","billing.reason.paypal_error":"PayPal reported an error. Please try again or choose another way to pay.","billing.reason.instrument_declined":"The funding source was declined — please choose another card or account.","billing.reason.query_unavailable":"We could not ask the gateway for the payment's status yet.","billing.reason.exchange_rate_missing":"There is no exchange rate to convert this order yet. Please choose another way to pay or contact Zomail.","billing.reason.payment_in_progress":"A payment for this order is still open at OnePay. Finish it in the other tab, or try again in a few minutes.","billing.error.payment_in_progress":"A payment for this order is still open at OnePay. Finish it in the other tab, or try again in a few minutes.","billing.error.paypal_error":"PayPal could not start the payment. Please try again.","billing.error.exchange_rate_missing":"There is no exchange rate to convert this order to USD yet.","billing.error.amount_mismatch":"The amount does not match what the attempt asked for.","billing.error.transaction_no_required":"Enter OnePay's transaction number (vpc_TransactionNo).","billing.error.transaction_no_used":"This transaction number is already recorded for another payment.","billing.error.attempt_closed":"This attempt already has a final answer.","billing.error.attempt_not_found":"No such OnePay attempt.","billing.error.invalid_refund_amount":"Invalid refund amount (at most what is left to refund).","billing.error.paypal_refund_failed":"PayPal refused the refund.","billing.notice.reconciled_paid":"The attempt was recorded as paid.","billing.notice.reconciled_failed":"The attempt was recorded as failed.","billing.notice.paypal_refunded":"Refunded through PayPal; a credit note was issued.","billing.notice.paypal_partially_refunded":"Partly refunded through PayPal; a credit note was issued.","payset.title":"Payment gateways","payset.lead":"OnePay (one profile per merchant), PayPal and the exchange rate. Secrets are write-only and never shown again; every save asks you to confirm it's you.","payset.save":"Save","payset.test":"Test connection","payset.test.ok":"Connection works","payset.test.fail":"Connection failed","payset.test.stage":"stage {stage}","payset.active":"Active","payset.not_active":"On, but not usable yet","payset.disabled":"Off","payset.problems":"{count} problem(s)","payset.environment":"Environment","payset.env.sandbox":"Test (sandbox)","payset.env.live":"Live","payset.source.database":"database","payset.source.environment":"environment","payset.source.database+environment":"database + environment","payset.updated":"updated {date} by {by}","payset.sandbox_in_production":"This production server uses a test environment: customers cannot pay real money.","payset.secrets_not_writable":"Secrets cannot be stored: the server has no BILLING_SECRETS_KEY.","payset.secret.set":"Set {hint} ({source})","payset.secret.unset":"Not set","payset.secret.replace":"Replace","payset.secret.clear":"Clear the stored value","payset.reauth.title":"Confirm it's you","payset.reauth.password":"Your current password","payset.reauth.mfa":"2-step verification code (6 digits)","payset.reauth.hint":"Re-enter your password, or your 2-step verification code if you have it on, to confirm. Payment settings decide where customers' money goes.","payset.notice.onepay_saved":"OnePay merchant saved.","payset.notice.onepay_removed":"OnePay merchant removed.","payset.notice.paypal_saved":"PayPal settings saved.","payset.notice.rate_saved":"Exchange rate saved.","payset.error.onepay_incomplete":"Merchant {id} cannot be turned on yet:","payset.error.paypal_incomplete":"PayPal cannot be turned on yet:","payset.error.invalid_profile_id":"Profile ids are 1–40 lowercase letters, digits, - or _.","payset.error.duplicate_profile_id":"A profile with id {id} already exists.","payset.error.hash_key_not_hex":"The Secure Hash of {id} must be the hex string OnePay issued (at least 16 characters).","payset.error.secrets_key_missing":"The server has no BILLING_SECRETS_KEY, so secrets cannot be stored.","payset.error.query_incomplete":"QueryDR of {id} needs its user.","payset.error.invalid_domain_association":"Paste the file's text exactly as PayPal gives it.","payset.error.invalid_exchange_rate":"Enter VND per 1 USD (1,000–1,000,000, up to 6 decimals, decimal point).","payset.error.reauth_required":"Enter your password or 2-step verification code to confirm the change.","payset.error.wrong_password":"The confirmation password is incorrect.","payset.error.mfa_invalid_code":"The code is wrong or already used — wait for the next code","payset.error.validation_error":"A field is invalid — check the URLs (https only) and the minutes.","payset.problem.merchant_missing":"Merchant ID missing.","payset.problem.access_code_missing":"Access code missing.","payset.problem.hash_key_missing":"Secure Hash missing.","payset.problem.hash_key_not_hex":"The Secure Hash is not a hex string.","payset.problem.sandbox_in_production":"Test environment / test keys on a production server.","payset.problem.client_id_missing":"Client ID missing.","payset.problem.client_secret_missing":"Client secret missing.","payset.problem.webhook_id_missing":"Webhook ID missing.","payset.problem.profile_not_found":"This profile is not saved yet.","payset.problem.paypal_disabled":"PayPal is off.","payset.problem.connect_failed":"Could not connect to the gateway.","payset.problem.unexpected_answer":"The gateway answered unexpectedly.","payset.problem.onepay_url_not_onepay":"The OnePay address must be https on onepay.vn (live) or mtf.onepay.vn (sandbox).","payset.problem.rejected":"The gateway refused the request.","payset.problem.INVALID_INVOICE":"INVALID_INVOICE — usually a wrong Secure Hash, access code or merchant ID.","payset.onepay.title":"OnePay","payset.onepay.hint":"Each profile is one OnePay merchant (e.g. a VND merchant and a USD merchant). VND orders can be paid through a USD merchant at the rate below.","payset.onepay.empty":"No OnePay merchant yet.","payset.onepay.new":"Add a OnePay merchant","payset.onepay.add":"Add merchant","payset.onepay.id":"Profile id","payset.onepay.id_hint":"Lowercase letters, digits, - or _; cannot be changed later.","payset.onepay.label":"Label","payset.onepay.merchant":"Merchant ID","payset.onepay.access_code":"Access code","payset.onepay.hash_key":"Secure Hash (secret)","payset.onepay.hash_key_hint":"The hex string OnePay issued for this merchant.","payset.onepay.settlement":"Merchant settlement currency","payset.onepay.order_currencies":"Takes orders in","payset.onepay.order_currencies_hint":"VND orders are converted at the exchange rate when the merchant settles in USD.","payset.onepay.pay_url":"Payment gateway URL","payset.onepay.pay_url_hint":"Test: {sandbox} · Live: {live}","payset.onepay.return_url_field":"Return URL","payset.onepay.return_url_hint":"Must be exactly the URL registered with OnePay. Empty = the default URL.","payset.onepay.send_callback":"Send vpc_CallbackURL (IPN)","payset.onepay.send_callback_hint":"Off by default. Turn on only when OnePay registered the IPN for this merchant ({url}).","payset.onepay.methods":"Methods enabled at OnePay","payset.onepay.methods_hint":"Each method is one button on the pay page. Tick only what OnePay enabled for the merchant.","payset.onepay.show_all":"Also offer OnePay's full method list","payset.onepay.link_validity":"Payment link validity (minutes)","payset.onepay.reconcile_after":"Reconcile after (minutes)","payset.onepay.reconcile_after_hint":"An attempt without an answer after this long goes to \"Needs reconciliation\".","payset.onepay.query":"QueryDR (ask a transaction's status)","payset.onepay.query_enabled":"QueryDR on","payset.onepay.query_hint":"Leave off unless OnePay gave you a working query API.","payset.onepay.query_url":"QueryDR URL","payset.onepay.query_user":"QueryDR user","payset.onepay.query_password":"QueryDR password (secret)","payset.onepay.enabled":"Take payments with this merchant","payset.onepay.register":"Register with OnePay:","payset.onepay.return_url":"Return URL: ","payset.onepay.ipn_url":"IPN URL: ","payset.onepay.env_fallback":"Environment fallback: merchant {merchant}, {url}.","payset.onepay.test_hint":"Sends a test payment request (nothing is charged) to OnePay with the saved settings.","payset.onepay.remove":"Remove merchant","payset.onepay.remove_confirm":"Remove merchant {label}? Its stored secrets are deleted too.","payset.onepay.remove_env_hint":"The settings from the server environment remain after removal.","payset.paypal.title":"PayPal","payset.paypal.hint":"PayPal buttons, card, Apple Pay and Google Pay through PayPal. PayPal charges in USD; VND orders are converted at the exchange rate.","payset.paypal.client_id":"Client ID","payset.paypal.client_secret":"Client secret (secret)","payset.paypal.webhook_id":"Webhook ID","payset.paypal.webhook_id_hint":"PayPal issues it once you create a webhook with the URL below.","payset.paypal.webhook_url":"Webhook URL: ","payset.paypal.webhook_events":"Events to subscribe: ","payset.paypal.apple_url":"Apple Pay domain verification file: ","payset.paypal.options":"Show on the pay page","payset.paypal.buttons":"PayPal buttons","payset.paypal.card_fields":"Card fields","payset.paypal.options_hint":"Apple Pay / Google Pay must be enabled in the PayPal account; Apple Pay needs the domain verification file.","payset.paypal.apple_file":"Apple Pay domain verification file content","payset.paypal.apple_file_hint":"Paste the apple-developer-merchantid-domain-association file PayPal provides.","payset.paypal.apple_file_set":"File stored — paste new content to replace it","payset.paypal.apple_file_keep":"File stored. Leave empty to keep it.","payset.paypal.enabled":"Take payments with PayPal","payset.paypal.test_hint":"Gets an OAuth token with the saved credentials.","payset.rate.title":"VND/USD exchange rate","payset.rate.hint":"Converts VND orders paid through a USD merchant or PayPal. The converted amount is fixed per payment attempt.","payset.rate.field":"VND per 1 USD","payset.rate.field_hint":"E.g. 25400. Empty removes the rate (VND orders cannot be paid in USD).","payset.rate.effective":"In use: {rate} ({source})","payset.rate.none":"No exchange rate yet.","payset.orders.reconcile":"Needs reconciliation","payset.orders.gateway":"Gateway","payset.orders.charged":"Charged","payset.orders.details":"Details","payset.orders.gateway_amount":"gateway reported {amount}","payset.orders.received":"received {date}","payset.orders.resolved_by":"Reconciled by {who} on {date}","payset.orders.reconcile_title":"Reconcile attempt {ref}","payset.orders.reconcile_hint":"Find vpc_MerchTxnRef {ref} in the OnePay Merchant Portal; confirm only if it is Approved with this exact amount ({amount}).","payset.orders.transaction_no":"OnePay transaction no. (vpc_TransactionNo)","payset.orders.amount":"Amount ({currency})","payset.orders.expected":"Must be exactly: {amount}","payset.orders.max":"At most: {amount}","payset.orders.proof":"Proof (screenshot / reference)","payset.orders.mark_paid":"Mark paid","payset.orders.mark_paid_confirm":"Confirm OnePay approved attempt {ref} for exactly {amount}? The order will be fulfilled.","payset.orders.mark_failed":"Mark failed","payset.orders.mark_failed_confirm":"Mark attempt {ref} as failed?","payset.orders.paypal_refund":"Refund via PayPal","payset.orders.paypal_refund_duplicate":"Refund this duplicate via PayPal","payset.orders.paypal_refund_confirm":"Refund {amount} through PayPal? This cannot be undone.","payset.orders.paypal_refund_amount":"the amount entered (or all that is left)","payset.orders.refund_amount":"Refund amount (USD)","payset.orders.refund_amount_all":"Empty = all that is left","payset.orders.refunded_so_far":"Refunded so far: {amount}","payres.paid.title":"Payment successful","payres.paid.lead":"Thank you! Zomail has received your payment. The receipt has been e-mailed to you.","payres.pending.title":"Waiting for payment confirmation","payres.cancelled.title":"Payment cancelled","payres.cancelled.lead":"You have not been charged. Choose a payment method to pay, or cancel the order.","payres.failed.title":"Payment not completed","payres.failed.lead":"{reason} You have not been charged. Choose a payment method to try again, or cancel the order.","payres.open.title":"This order is not paid yet","payres.open.lead":"Choose a payment method to complete it, or cancel the order.","payres.expired.title":"This checkout expired","payres.expired.lead":"The order expired before it was paid; you have not been charged. Choose a payment method to open a new order at today's price.","payres.expired.lead_start_over":"The order expired before it was paid; you have not been charged. Please start again.","payres.canceled.title":"Order cancelled","payres.canceled.lead":"The order has been cancelled; you have not been charged.","payres.canceled.lead_signup":"The order has been cancelled; you have not been charged. You can edit your signup in the browser you signed up in, or start again.","payres.invalid.title":"This order could not be opened","payres.order":"Order","payres.amount":"Amount","payres.method":"Method","payres.method.onepay":"OnePay (card / wallet / bank)","payres.method.paypal":"PayPal","payres.method.manual":"Bank transfer (recorded by Zomail)","payres.paid_at":"Paid at","payres.receipt":"Receipt","payres.receipt.view":"View receipt","payres.workspace.ready":"Your workspace is ready — sign in at {url} as {address}.","payres.workspace.mail":"We are setting up your workspace and will e-mail you sign-in instructions when it is ready.","payres.workspace.open":"See your workspace","payres.choose":"Choose a payment method","payres.cancel":"Cancel order","payres.cancel.confirm.title":"Cancel this order?","payres.cancel.confirm.body":"The order can no longer be paid.","payres.cancel.confirm.body_signup":"The order can no longer be paid and your signup opens again for editing. You can start again at any time.","payres.cancel.yes":"Yes, cancel the order","payres.cancel.no":"No, go back","payres.start_over":"Start over","payres.continue_signup":"Continue your signup","payres.pricing":"See pricing","payres.see_options":"See your options","payres.error.already_paid":"This order is already paid — it cannot be cancelled.","payres.error.order_not_cancellable":"This bill cannot be cancelled here; please contact Zomail.","payres.error.signup_expired":"The signup expired. Please start again.","payres.error.signup_locked":"This signup no longer waits for this order's payment.","payres.error.payment_in_progress":"An earlier payment for this order is still waiting for the gateway's answer. Please try again in a few minutes.","pay.paypal.cancelled_notice":"You cancelled the PayPal payment — choose a payment method.","pay.paypal.error_retry":"PayPal ran into an error processing the payment. You have not been charged — try again or choose another payment method.","pay.paypal.retry":"Try PayPal again","payset.refund_policy.title":"On refunds","payset.refund_policy.hint":"Applies when a customer's first / only paid order is refunded in full (PayPal API refund or a recorded refund). Partial refunds change nothing.","payset.refund_policy.field":"On a full refund of a customer's first / only paid order","payset.refund_policy.suspend":"Suspend the workspace (default)","payset.refund_policy.cancel_at_period_end":"Cancel at the end of the period","payset.refund_policy.none":"Do nothing","payset.refund_policy.scope":"Only applied Cloud plan orders, when the customer has no other paid order; never partner-billed subscriptions. The owner is notified; Zomail reactivates a suspended account as usual (Subscriptions → status).","payset.refund_policy.save":"Save","billing.notice.refund_policy_saved":"Refund settings saved.","billing.error.invalid_refund_policy":"Choose what a refund does.","signup.page.title":"Create your workspace","signup.page.lead":"Email on your company domain, calendar, contacts, Drive and meetings — ready in minutes.","signup.closed":"Online signup is not open yet. Please contact Zomail sales.","signup.nav.label":"Links","signup.nav.pricing":"Pricing","signup.nav.login":"Sign in","signup.nav.signup":"Create a workspace","signup.nav.status":"System status","signup.legal.terms":"Terms of Service","signup.legal.privacy":"Privacy Policy","login.legal.label":"Legal","signup.login.cta":"Your company is not on Zomail yet?","signup.login.link":"Create a workspace","signup.steps.label":"Signup steps","signup.step.company":"Company","signup.step.domain":"Domain","signup.step.admin":"Administrator","signup.step.plan":"Plan","signup.step.verify":"Verify","signup.step.finish":"Finish","signup.continue":"Continue","signup.checking":"Checking…","signup.saving":"Saving…","signup.resume":"You can come back and finish in this browser until {date}.","signup.restart":"Start over","signup.company.title":"About your company","signup.company.lead":"We use this to create your workspace and send invoices.","signup.company.name":"Company name","signup.company.country":"Country","signup.company.size":"Company size","signup.company.size.people":"{size} people","signup.company.contactName":"Contact name","signup.company.contactEmail":"Your current e-mail","signup.company.contactEmail.hint":"The address you use today (e.g. Gmail). Verification codes and invoices go here.","signup.company.phone":"Phone number","signup.company.terms.before":"I agree to the","signup.company.terms.and":"and the","signup.domain.title":"Choose your e-mail domain","signup.domain.lead":"Use your company's own domain, or start right away with a free .{freeDomain} address.","signup.domain.lead_own":"Use your company's own domain. After signup you update its DNS (MX, TXT) to receive mail.","signup.domain.free":"Use a free Zomail address now","signup.domain.free.hint":"your-company.{freeDomain} — works immediately, no DNS changes. You can add your own domain later.","signup.domain.own":"I have a domain","signup.domain.own.hint":"For example acme.com — you will need to update DNS (MX, TXT) afterwards to receive mail.","signup.domain.free.label":"Workspace name","signup.domain.free.rules":"Lower-case letters, digits and hyphens, 3–40 characters.","signup.domain.own.label":"Your company's domain","signup.domain.own.dns":"After signup, add a TXT verification record and change MX at your domain provider. Meanwhile you can already sign in and set things up.","signup.domain.check":"Check","signup.domain.available":"{domain} is available","signup.admin.title":"First administrator account","signup.admin.lead":"This is the mailbox you sign in with and manage the workspace from.","signup.admin.name":"Display name","signup.admin.username":"User name","signup.admin.username.hint":"Lower-case letters, digits, dots, underscores or hyphens.","signup.admin.password":"Password","signup.admin.confirm":"Repeat the password","signup.admin.passwordKept":"Your password is saved. Enter it again to change the user name or password.","signup.admin.rule.length":"At least 12 characters","signup.admin.rule.mix":"At least 3 of: lower case, upper case, digits, symbols","signup.admin.rule.name":"Not your name, user name or company name","signup.admin.rule.bytes":"The first 72 bytes must be strong on their own: only that part is used","signup.admin.mismatch":"The passwords do not match.","signup.plan.title":"Choose a plan","signup.plan.lead":"Prices exclude VAT. You can change the plan or number of users at any time.","signup.plan.cycle":"Billing cycle","signup.plan.cycle.monthly":"Monthly","signup.plan.cycle.yearly":"Yearly","signup.plan.save":"save up to {percent}%","signup.plan.perUser":"{price} / user / month","signup.plan.storage":"{gb} GB per user","signup.plan.trial":"{days}-day trial","signup.plan.users":"Users: {count}","signup.plan.minUsers":"At least {min} users on this plan.","signup.plan.usersSlider":"Drag to choose the number of users","signup.plan.usersNumber":"Number of users","signup.plan.extraStorage":"Extra storage","signup.plan.extraStorage.hint":"{price} per 10 GB per month, shared by the whole company.","signup.plan.extraStorage.none":"None","signup.plans.none":"The price list could not be loaded. Please try again later.","signup.quote.users.one":"{count} user","signup.quote.users.other":"{count} users","signup.quote.storage":"Extra storage {gb} GB","signup.quote.subtotal":"Subtotal","signup.quote.vat":"VAT","signup.quote.total":"Total","signup.quote.totalMonth":"Total per month","signup.quote.totalYear":"Total per year","signup.quote.loading":"Calculating…","signup.quote.unavailable":"The price cannot be calculated right now.","signup.quote.estimate":"Estimate — the exact amount is shown at checkout.","signup.verify.title":"Verify your contact e-mail","signup.verify.lead":"Enter the 6-digit code we just sent to confirm the address is yours.","signup.verify.sending":"Sending a code to {email}…","signup.verify.sent":"We sent a code to {email}. It is valid for 15 minutes — check your spam folder too.","signup.verify.code":"Verification code","signup.verify.submit":"Verify","signup.verify.resend":"Resend code","signup.verify.resendIn":"Resend in {seconds} s","signup.verify.wrongEmail":"Wrong address? Go back to the Company step to fix it.","signup.finish.title":"Finish","signup.finish.lead":"Check the details, then choose how to start.","signup.summary.company":"Company","signup.summary.domain":"Domain","signup.summary.dnsLater":"DNS changes needed later","signup.summary.admin":"Administrator","signup.summary.plan":"Plan","signup.summary.contact":"Contact e-mail","signup.finish.trial":"Start a free {days}-day trial","signup.finish.trial.hint":"No card needed. Your workspace is created right away.","signup.finish.pay":"Pay {amount} with OnePay","signup.finish.pay.hint":"Domestic ATM cards, Visa/Master/JCB, QR. The invoice goes to your contact e-mail.","signup.finish.pay_converted":"Pay {amount} with OnePay — charged as {charged}","signup.finish.pay.hint_methods":"{methods}. The invoice goes to your contact e-mail.","signup.finish.pay.hint_rate":"{methods} — charged in {currency} at {rate}. The invoice goes to your contact e-mail.","signup.finish.working":"Working on it — please keep this page open…","signup.current.trialing":"Your signup is being set up (trial).","signup.current.paid":"Payment received — your workspace is being set up.","signup.current.provisioned":"Your workspace is ready.","signup.current.failed":"We could not set up your workspace yet. The Zomail team has been notified and will contact you.","signup.current.expired":"This signup expired (not finished within 24 hours). Please start again.","signup.current.open":"View status","signup.result.title":"Your workspace","signup.result.none":"No signup was found in this browser.","signup.result.start":"Create a workspace","signup.result.unfinished":"The signup is not finished yet.","signup.result.continue":"Continue signup","signup.result.payFailed":"The payment did not go through","signup.result.payFailed.lead":"You have not been charged. Try again to pay, or go back and change the plan first.","signup.result.retryPay":"Try again","signup.result.waitingPayment":"Waiting for payment confirmation…","signup.result.waitingPayment.lead":"This usually takes a few seconds. The page updates by itself.","signup.result.waitingPayment.long":"The payment gateway has not confirmed yet. If you were charged, we set up your workspace as soon as the confirmation arrives and e-mail you.","signup.result.failed":"We could not set up your workspace yet","signup.result.failed.lead":"The Zomail team has been notified and will contact you at {email}. If you paid, your payment is safe.","signup.result.reference":"Reference: {code} / {id}","signup.result.provisioning":"Setting up your workspace…","signup.result.provisioning.lead":"This usually takes less than a minute.","signup.result.queued":"Received — queued for setup","signup.result.queued.lead":"We are adding capacity. We will e-mail {email} as soon as your workspace is ready; you do not need to do anything.","signup.result.step.paid":"Payment received","signup.result.step.trial":"Trial started","signup.result.step.tenant":"Create the workspace","signup.result.step.domainFree":"Activate the domain","signup.result.step.domainOwn":"Add the domain (waiting for DNS)","signup.result.step.mailbox":"Create the administrator mailbox","signup.result.step.welcome":"Send the welcome e-mail","signup.result.done":"done","signup.result.pending":"pending","signup.result.ready":"Your workspace is ready","signup.result.ready.lead":"Sign in with {address} and the password you just chose.","signup.result.trialEnds":"Your trial ends on {date}.","signup.result.signIn":"Sign in","signup.result.dns.title":"Update DNS for {domain}","signup.result.dns.lead":"Add these records at your domain provider. Mail to this domain reaches Zomail only after MX is changed.","signup.result.dns.type":"Type","signup.result.dns.name":"Name","signup.result.dns.value":"Value","signup.result.dns.more":"DKIM, DMARC and app autoconfiguration: follow the DNS wizard in Admin → Domains after you sign in.","signup.result.next":"Next steps","signup.result.next.users":"Add users: Admin → Domains → Create mailbox.","signup.result.next.import":"Bring old mail from Gmail, Microsoft 365 or any IMAP server: Admin → Migrations.","signup.result.next.apps":"Use Outlook, Thunderbird or your phone: Settings → “Use with Outlook, Thunderbird and phones”.","signup.result.next.ownDomain":"Want your own domain? Admin → Domains → Add domain.","signup.result.welcomeSent":"Detailed instructions were sent to the new mailbox and to {email}.","signup.error.generic":"Something went wrong. Please try again.","signup.error.unreachable":"The server cannot be reached. Please try again later.","signup.error.signup_unavailable":"Online signup is temporarily unavailable.","signup.error.signup_disabled":"Online signup is not open yet.","signup.error.invalid_input":"Please check what you entered.","signup.error.terms_required":"Please accept the Terms of Service and the Privacy Policy.","signup.error.bot_check_failed":"We could not verify your browser. Reload the page and try again.","signup.error.too_fast":"The form was sent too quickly. Please try again.","signup.error.challenge_expired":"The form expired. Please send it again.","signup.error.rate_limited":"Too many requests. Please try again in {minutes} minutes.","signup.error.promo_hold_limit":"Too many open orders from your network or e-mail address use this promo code. Pay or cancel one, or try again in {minutes} minutes.","signup.error.promo_used_up":"The promo code has just run out of uses, so it no longer applies. The amount below has been recalculated at the regular price — check it, then choose again to continue.","signup.error.price_changed":"The price changed since you chose the plan. The amount below has been recalculated — check it, then choose again to continue.","signup.error.invalid_email":"The e-mail address is not valid.","signup.error.disposable_email":"Please use your real e-mail address, not a disposable one.","signup.error.email_blocked":"This e-mail address cannot be used to sign up. Please contact support.","signup.error.invalid_phone":"The phone number is not valid.","signup.error.invalid_domain":"The domain name is not valid.","signup.error.platform_domain":"This domain belongs to Zomail and cannot be used.","signup.error.domain_taken":"{domain} is already in use or being signed up on Zomail. If it is your company, contact its current administrator.","signup.error.free_domain_disabled":"Free addresses are not offered here: please use your company's own domain.","signup.error.domain_in_signup":"Someone is signing up with {domain} right now. Try again later or choose another name.","signup.error.domain_blocked":"This domain cannot be used to sign up.","signup.error.slug_too_short":"Use at least {min} letters or digits.","signup.error.invalid_slug":"The name is not valid.","signup.error.reserved_name":"\"{name}\" is reserved. Please choose another name.","signup.error.invalid_username":"The user name is not valid.","signup.error.password_too_short":"The password needs at least {min} characters.","signup.error.password_too_long":"The password can have at most {max} characters.","signup.error.password_too_weak":"The password is too easy to guess. Mix upper and lower case, digits and symbols; avoid common words. With a long password only the first 72 bytes are used (an accented letter takes 2–3 bytes), so the beginning must be strong on its own.","signup.error.password_contains_name":"The password must not contain your name, user name or company name.","signup.error.unknown_plan":"This plan does not exist.","signup.error.users_below_minimum":"This plan needs at least {min} users.","signup.error.step_missing":"Please complete the previous steps first.","signup.error.code_cooldown":"Please wait {seconds} seconds before requesting another code.","signup.error.code_limit":"Too many codes were sent for this signup. Please start again later.","signup.error.code_expired":"The code has expired. Request a new one.","signup.error.code_attempts":"Too many wrong codes. Request a new one.","signup.error.code_invalid":"Wrong code. {remaining} attempts left.","signup.error.trial_unavailable":"This plan has no free trial.","signup.error.payment_unavailable":"Online payment is temporarily unavailable. Please contact sales.","signup.error.signup_not_found":"The signup was not found. Please start again.","signup.error.signup_expired":"The signup expired (24 hours). Please start again.","signup.error.signup_locked":"This signup can no longer be changed.","signup.error.no_capacity":"Waiting for platform capacity","signup.error.incomplete_signup":"The signup is missing information","signup.error.mailbox_taken":"The mailbox address exists in another customer","signup.error.password_missing":"The password was wiped (signup expired before payment) — set a password manually","signup.error.domain_missing":"The created domain was not found","signup.error.not_found":"Not found.","signup.error.forbidden":"You do not have permission to do this.","pricing.title":"Pricing","pricing.lead":"Pay per user. Free trial, no card required. Prices exclude VAT.","pricing.perUserMonth":"/ user / month","pricing.billedYearly":"billed yearly, save {percent}%","pricing.minUsers":"At least {min} users","pricing.calculate":"Calculate","pricing.startTrial":"Try free for {days} days","pricing.buy":"Sign up","pricing.calculator":"Cost calculator — {plan}","pricing.cta":"Start with this setup","pricing.feature.storage":"{value} GB mail per user","pricing.feature.mail":"E-mail on your company domain, spam and virus protection","pricing.feature.calendar":"Shared calendars and meeting scheduling","pricing.feature.contacts":"Company contacts","pricing.feature.mobile":"Phone and desktop apps (IMAP, CalDAV, CardDAV)","pricing.feature.driveGbPerUser":"Drive {value} GB per user","pricing.feature.meet":"Video meetings","pricing.feature.ai":"AI assistant to write and summarise mail","pricing.feature.archive":"Compliance archive and legal hold","pricing.faq":"Frequently asked questions","pricing.faq.trial.q":"Does the trial cost anything?","pricing.faq.trial.a":"No. You get every feature during the trial without a card; when it ends, choose a plan and pay to continue.","pricing.faq.domain.q":"What if I do not have a domain?","pricing.faq.domain.a":"You need a domain to receive mail (from any domain registrar). Where the provider offers free addresses, you can start right away with your-company.<provider domain> and add your own domain whenever you like.","pricing.faq.vat.q":"Do prices include VAT?","pricing.faq.vat.a":"Listed prices exclude VAT. The total including VAT is shown before you pay and on the invoice.","pricing.faq.import.q":"Can I bring my old mail?","pricing.faq.import.a":"Yes. The migration tool imports mail from Gmail, Microsoft 365 or any IMAP server.","signup.ops.nav":"Signups","signup.ops.eyebrow":"Platform administration","signup.ops.title":"Self-service signups","signup.ops.lead":"Customers who signed up at /signup: status, retry provisioning, block e-mails or domains.","signup.ops.openWizard":"Open the signup page","signup.ops.filter":"Filter by status","signup.ops.all":"All","signup.ops.search":"Search e-mail, domain, company","signup.ops.searchButton":"Search","signup.ops.empty":"No signups yet.","signup.ops.page":"Page {page} of {pages}","signup.ops.done":"Done.","signup.ops.col.created":"Time","signup.ops.col.company":"Company / contact","signup.ops.col.domain":"Domain","signup.ops.col.plan":"Plan","signup.ops.col.status":"Status","signup.ops.mode.own":"own domain","signup.ops.mode.free":"free address","signup.ops.retry":"Retry provisioning","signup.ops.outcome.provisioned":"Provisioned.","signup.ops.outcome.already":"This signup was already provisioned.","signup.ops.outcome.busy":"Another provisioning run is in progress; try again in a few minutes.","signup.ops.outcome.not_ready":"The signup is not in a state that can be provisioned.","signup.ops.outcome.queued":"No shard has room — queued, the worker will retry.","signup.ops.outcome.failed":"Provisioning failed — see the error below.","signup.ops.outcome.retry":"Temporary error — the worker will retry.","signup.ops.lastError":"Last error","signup.ops.nextAttempt":"next attempt {time}","signup.ops.choice":"Choice","signup.ops.choice.trial":"Trial","signup.ops.choice.pay":"Payment","signup.ops.order":"Order","signup.ops.paid":"Paid","signup.ops.tenant":"Customer","signup.ops.domainStatus":"Domain status","signup.ops.mailboxStatus":"Mailbox status","signup.ops.attempts":"Provisioning attempts","signup.ops.ip":"IP","signup.ops.expires":"Expires","signup.ops.provisioned":"Provisioned at","signup.ops.blocks":"Block list","signup.ops.blocks.lead":"Blocked e-mails or domains (including sub-domains) cannot sign up.","signup.ops.blockThis":"Stop this person from signing up again.","signup.ops.block.kind":"Type","signup.ops.block.domain":"Domain","signup.ops.block.email":"E-mail","signup.ops.block.value":"Value","signup.ops.block.reason":"Reason","signup.ops.block.submit":"Block","signup.ops.blockEmail":"Block e-mail {value}","signup.ops.blockDomain":"Block domain {value}","signup.ops.unblock":"Unblock","signup.status.started":"In progress","signup.status.verified":"Verified","signup.status.trialing":"Trial","signup.status.paid":"Paid","signup.status.provisioned":"Provisioned","signup.status.failed":"Failed","signup.status.expired":"Expired","pricing.feature.storage.size":"{size} mail per user","pricing.feature.driveGbPerUser.size":"Drive {size} per user","signup.plan.storage.size":"{size} per user","signup.checkout.open.title":"Waiting for payment.","signup.checkout.open.body":"The signup is locked to the order you just created. Pay it, or cancel the payment to change something (the old order can then no longer be paid).","signup.checkout.open.pay":"Continue to OnePay","signup.checkout.open.other":"Other ways to pay","signup.checkout.expired.title":"The payment order has expired.","signup.checkout.expired.body":"The order was not paid in time and can no longer be paid. Your signup details are kept — choose how to pay again below, or change something first.","signup.checkout.expired.change":"Change details","signup.checkout.open.change":"Cancel payment to edit","signup.review.title":"Waiting for Zomail's review.","signup.review.body":"{domain} resembles the name of a brand or organisation, so it is reviewed by hand (usually within one business day). We will e-mail you the result.","signup.company.buyerType":"Invoice to","signup.company.buyerType.company":"Company / organisation","signup.company.buyerType.individual":"Individual","signup.company.taxCode":"Tax code (optional)","signup.company.taxCode.hint":"10 digits, or 10 digits + \"-\" + 3 digits for a branch; individuals use the 12-digit citizen ID.","signup.company.billingAddress":"Billing address (optional)","signup.finish.trial.capped":"Free trials allow at most {max} users and no extra storage. Lower the number of users or pay.","signup.error.trial_limit":"Free trials allow at most {maxUsers} users and no extra storage. Lower the number of users or choose Pay.","signup.error.trial_already_used":"These details (e-mail, phone or company name) already had a free trial. Please choose Pay.","signup.error.checkout_in_progress":"This signup has an open payment. Pay it or cancel the payment first.","signup.error.invalid_tax_code":"Invalid tax code (check the 10 digits, or 10 digits-3 digits for a branch).","signup.error.already_paid":"The payment went through; your workspace is being created.","signup.error.selection_mismatch":"The amount paid does not match the chosen plan — handle by hand or refund","signup.error.review_rejected":"Domain rejected by the brand review","signup.status.awaiting_payment":"Awaiting payment","signup.status.review":"In review","signup.ops.block.token":"Brand token","signup.ops.review.title":"Brand review","signup.ops.review.lead":"{domain} contains a brand name ({reason}). Approve if the customer really owns the brand or the name is not misleading; reject if it looks like impersonation.","signup.ops.review.approve":"Approve","signup.ops.review.reject":"Reject","signup.ops.review.note":"Note","nodes.title":"Infrastructure servers","nodes.lead":"Each VPS is added with one command: Docker, the private WireGuard network and its own keys are set up, then it takes its role (mail shard, storage, backup…) automatically.","nodes.add":"Add server","nodes.empty":"No server has been added with the installer yet.","nodes.col.name":"Server","nodes.col.role":"Role","nodes.col.region":"Region / rack","nodes.col.mesh":"Private address","nodes.col.disk":"Data disk","nodes.col.status":"Status","nodes.col.seen":"Last contact","nodes.never":"never","nodes.lab":"lab","nodes.role.mail_shard":"Mail shard","nodes.role.mail_standby":"Mail standby","nodes.role.storage":"Storage (Drive/archive)","nodes.role.storage_gateway":"Storage gateway (master/filer/S3)","nodes.role.backup":"Backup target","nodes.role.app":"App (API/web/worker)","nodes.role.mail_shard.hint":"Dovecot with the platform configuration; joins the shard list and new domains are placed on it.","nodes.role.mail_standby.hint":"Warm copy of one shard, takes no mail directly; used for failover.","nodes.role.storage.hint":"Big-disk machine: joins the SeaweedFS cluster and adds Drive capacity immediately.","nodes.role.storage_gateway.hint":"The first 3 run a master; every one runs filer + S3 (put them behind a load balancer).","nodes.role.backup.hint":"Single-machine S3 store in another datacenter for backups.","nodes.role.app.hint":"A public entry point on its own IP (web/API, IMAP, sending and receiving mail). After adding one: run zomail-cluster dns and add its A records; open ports 25/80/443/465/587/993; ask the provider to set the IP's PTR to mx.<domain>.","nodes.status.pending":"Waiting for install","nodes.status.installing":"Installing","nodes.status.active":"Running","nodes.status.draining":"Draining","nodes.status.failed":"Failed","nodes.status.offline":"Offline","nodes.status.decommissioned":"Decommissioned","nodes.wizard.title":"Add server","nodes.wizard.lead":"Choose a role, get a one-line command, paste it on a fresh VPS (Ubuntu 22.04+/Debian 12+, as root). This page shows the progress live.","nodes.wizard.role":"Role","nodes.wizard.protects":"Shard to protect","nodes.wizard.protects.none":"No shard needs a standby (every active local-disk shard already has one).","nodes.wizard.name":"Server name","nodes.wizard.name.hint":"Lowercase letters, digits, dashes (e.g. mail-hcm-03). Used as the shard name.","nodes.wizard.region":"Region","nodes.wizard.rack":"Rack / provider","nodes.wizard.rack.hint":"What fails together (provider, zone, physical host). The two copies of Drive data go to different racks.","nodes.wizard.capacity":"Capacity override (optional)","nodes.wizard.capacity.hint":"Empty: computed from disk and RAM with the sizing model.","nodes.wizard.capacity_mailboxes":"Max mailboxes","nodes.wizard.capacity_gb":"Allocatable quota (GB)","nodes.wizard.disk":"Data disk (optional)","nodes.wizard.disk.hint":"E.g. /dev/sdb. This disk is ERASED, encrypted with LUKS and mounted at /srv/novamail-data. The system disk is never touched. Empty: the installer lists unused disks for you to choose.","nodes.wizard.lab":"Lab server (no WireGuard, testing only)","nodes.wizard.submit":"Create install command","nodes.wizard.creating":"Creating…","nodes.command.disk":"This command formats {disk}.","nodes.progress":"Install progress","nodes.progress.waiting":"Waiting for the server to run the command…","nodes.progress.running":"Installing…","nodes.progress.done":"Installed.","nodes.progress.failed":"The installation stopped.","nodes.progress.failed.hint":"Fix the cause below and run the same command again — the installer is safe to re-run.","nodes.progress.log":"Error log","nodes.step.preflight":"Machine check","nodes.step.docker":"Docker","nodes.step.download":"Setup download","nodes.step.disks":"Disks","nodes.step.mesh":"WireGuard network","nodes.step.configure":"Node keys","nodes.step.register":"Registration","nodes.step.agent":"Agent","nodes.step.role":"Role deployment","nodes.step.done":"Done","nodes.stepstatus.running":"running","nodes.stepstatus.ok":"done","nodes.stepstatus.warning":"warning","nodes.stepstatus.failed":"failed","nodes.stepstatus.info":"info","nodes.detail.preflight":"{cpus} CPU · {ramMb} MB RAM · {diskGb} GB free · {os}/{arch}","nodes.detail.mesh":"address {meshAddress}","nodes.detail.unused":"unused disks: {unused}","nodes.detail.encrypted":"data disk encrypted with LUKS","nodes.error.data_disk_choice_required":"Unused disks were found — choose one below (it will be formatted) or re-run with --no-data-disk.","nodes.error.disk_not_confirmed":"The disk format confirmation code did not match.","nodes.error.chat_needs_redis":"A second chat server needs the shared Redis first: zomail-cluster redis-ha enable.","nodes.error.chat_main_elsewhere":"Another chat server still reports Synapse's main process — never two at once. Use zomail-cluster chat move (it stops the old one first).","nodes.error.chat_stop_failed":"The server could not stop its old chat processes (Synapse main/Sygnal) — see the job log, then redeploy.","nodes.error.chat_media_sync_failed":"The chat files check against S3 did not finish — see the job log (does S3 answer?).","nodes.error.chat_not_here":"This server does not run chat.","nodes.error.data_disk_bad_path":"A second disk's path in state/data-disks.json is not valid (zomail-node disk status).","nodes.error.chat_not_enabled":"Chat is not enabled on the cluster: zomail-cluster chat enable.","nodes.error.chat_secret_missing":"A chat key is missing on the control node: run zomail-cluster chat enable again.","nodes.error.control_env_missing":"The control node has no application settings for a second control node yet (app-node.env).","nodes.error.media_domain_unknown":"The platform's domain is unknown (NODE_PUBLIC_API_URL / OFFICE_PUBLIC_URL).","nodes.error.media_meet_not_configured":"Video meetings are not set up on the cluster (LIVEKIT_API_SECRET).","nodes.error.media_needs_redis":"Two or more media servers need the shared Redis: zomail-cluster redis-ha enable.","nodes.error.media_public_ip_missing":"A media server needs a public IP (install again with --public-ip).","nodes.error.redis_ha_not_a_member":"This server is not in the shared Redis member list (run zomail-cluster redis-ha enable again).","nodes.error.storage_secrets_exist":"The storage cluster already has its keys and S3 identities — they are not overwritten. To replace them, rotate as in handbook 12 §6.","nodes.error.rate_limited":"Too many requests from this server — wait a moment and try again.","nodes.error.mailfs_not_configured":"Mail on S3 is not configured on the control plane (MAILFS_ADMIN_DB_URL).","nodes.error.no_storage_gateway":"No storage gateway yet: build the S3 cluster before adding an S3 mail shard.","nodes.error.mail_storage_retired":"S3 mail storage and shared spare servers can no longer be added: mail lives on the shard's own disk, protected by a standby server (Mail HA). Existing S3 servers keep running.","nodes.error.data_disk_in_use":"The chosen disk is in use or does not exist.","nodes.error.data_disk_is_root":"The chosen disk is the system disk — refused.","nodes.error.invalid_token":"The install token expired or was used — create a new command.","nodes.error.unsupported_os":"Linux is required (Ubuntu 22.04+/Debian 12+).","nodes.error.not_root":"Run it as root (sudo).","nodes.error.docker_not_running":"Docker is installed but not running.","nodes.error.agent_not_ready":"The agent could not reach the control plane.","nodes.error.role_failed":"Role deployment failed — see the deploy_role job below.","nodes.error.role_timeout":"Role deployment is still running.","nodes.error.lab_flag_required":"Lab server: add --lab to the command.","nodes.error.generic":"That did not work. Try again.","nodes.error.node_name_taken":"This server name is already used.","nodes.error.standby_needs_shard":"Choose the shard this standby protects.","nodes.error.standby_shard_not_eligible":"Shard {cluster} cannot get a standby: only active shards storing mail on local disk can.","nodes.error.standby_exists":"Shard {cluster} already has a standby.","nodes.error.lab_not_allowed":"Lab servers are for development only.","nodes.error.shard_not_empty":"The shard still holds {mailboxes} mailboxes — move them (Mail HA → moves) and decommission again. It no longer takes new mailboxes.","nodes.error.last_gateway":"This is the last storage gateway and storage nodes remain — add another gateway first.","nodes.error.already_installed":"This server is installed; no new command is needed.","nodes.error.job_already_queued":"This job is already queued.","nodes.error.job_not_retryable":"This job cannot be run again (mail restore or mail folder erase): a second run would duplicate or erase again. Start a new request instead.","nodes.error.mesh_ip_taken":"This private-network address is already used by a server or is outside the private network — leave it empty to get one assigned.","nodes.detail.back":"Infrastructure servers","nodes.detail.facts":"Machine","nodes.detail.public_ip":"Public IP","nodes.detail.version":"Agent version","nodes.detail.cluster":"Shard","nodes.detail.protects":"Protects shard","nodes.detail.health":"Health","nodes.detail.disks":"Disks","nodes.detail.jobs":"Jobs","nodes.detail.events":"Log","nodes.detail.no_jobs":"No jobs yet.","nodes.detail.command":"New install command","nodes.detail.command.hint":"The previous command stops working. Use it while the server is not installed yet.","nodes.detail.use_disk":"Use disk {disk}","nodes.detail.unused_disks":"Unused disks on the server","nodes.action.redeploy":"Redeploy role","nodes.action.upgrade":"Upgrade agent","nodes.action.upgrade.image":"Image (e.g. novamail/app:1.0.0)","nodes.action.decommission":"Decommission","nodes.action.decommission.confirm":"Drain and remove this server? A mail shard must be empty; a storage node first moves all its data to other nodes.","nodes.action.retry":"Retry","nodes.action.cancel":"Cancel","nodes.action.new_command":"New command","nodes.action.done":"Sent.","nodes.job.type":"Type","nodes.job.status":"Status","nodes.job.progress":"Progress","nodes.job.attempt":"Attempt","nodes.job.error":"Error","nodes.job.queued":"queued","nodes.job.running":"running","nodes.job.succeeded":"done","nodes.job.failed":"failed","nodes.job.canceled":"canceled","nodes.capacity.title":"Capacity by role","nodes.capacity.hint":"Total/used from the servers' data disks; forecast from the last 14 days of growth.","nodes.capacity.empty":"No figures yet (needs installed servers sending heartbeats).","nodes.capacity.nodes.one":"{count} server","nodes.capacity.nodes.other":"{count} servers","nodes.capacity.forecast":"Full in about {days} days","nodes.capacity.stable":"Not growing","nodes.capacity.suggest":"Filling up — add a {role} server.","nodes.capacity.suggest.action":"Add server","nodes.help.title":"How to add a server","nodes.help.body":"1. Rent an Ubuntu 22.04+/Debian 12+ VPS (mail shards/storage: preferably with a separate data disk). 2. Click Add server and choose the role. 3. Paste the command on the VPS as root. 4. Allow UDP 51820 between servers (WireGuard); nothing else needs to be open to the Internet. The server registers, gets its configuration and starts serving; follow it on this page.","ops.alert.node.offline":"Server {name} ({role}) is not reporting","ops.alert.media.cpu_high":"Media server {name}: CPU above 60% for 15 minutes","ops.alert.media.bandwidth_high":"Media server {name}: outbound bandwidth above 60% for 15 minutes","ops.alert.node.disk":"Server {name}: disk {mount} {percent}% full","ops.alert.node.mesh":"Server {name}: private WireGuard network down ({up}/{peers} peers answering)","ops.alert.node.health":"Server {name}: failing services {failing}","ops.alert.node.job":"Server {name}: job {type} failed ({code})","ops.alert.node.capacity":"{role}: {percent}% used, full in about {days} days — add a server","cluster.link":"Plan cluster","cluster.title":"Plan the cluster","cluster.lead":"Enter users and storage; Zomail recommends the servers to rent per role, then gives each one its install command in the right order. The checklist ticks as servers register and become healthy, and a final outside-in check says when the cluster is ready.","cluster.control":"Control node: {node} · domain {domain}","cluster.unavailable":"Cluster status is unavailable (the node platform is off on this API, or migration 0041 has not run).","cluster.form.title":"Requirements","cluster.form.hint":"Same model as the sizing calculator (docs/sizing.md): space really used, zstd compression, 30% headroom. Mailboxes per shard (5,000 by default) and connections per proxy are estimates, not measurements: calibrate them with a load test on the real hardware (ADR 0003: one test shard pair saturated at a 5,000-user peak).","cluster.form.users":"Users","cluster.form.quota":"Average quota (GB)","cluster.form.usage":"Expected usage (% of quota)","cluster.form.usage.hint":"Business mail is usually 20–40%.","cluster.form.disks":"Provider disk sizes (GB)","cluster.form.disks.hint":"For example: 500, 1000, 2000, 4000","cluster.form.drive":"Drive per user (GB)","cluster.form.drive.hint":"0 = no self-hosted Drive storage cluster.","cluster.form.prefix":"Server name prefix","cluster.form.prefix.hint":"For example hcm → hcm-mail-1, hcm-backup-1…","cluster.form.ha":"High availability: a standby for every shard, one extra app server","cluster.form.save":"Save plan","cluster.form.update":"Update plan","cluster.form.saving":"Saving…","cluster.preview":"{shards} shards (limited by {limit}) · {servers} servers to add","cluster.limit.mailboxes":"mailbox count","cluster.limit.disk":"disk space","cluster.limit.memory":"RAM","cluster.summary.title":"Recommended servers","cluster.summary.hint":"About {used} GB used per mailbox; {logical} TB of mail ({stored} TB compressed); {connections} IMAP connections at peak; about {backup} TB of backups.","cluster.role.control":"Control node (installed by bootstrap)","cluster.col.count":"Servers","cluster.col.cpu":"vCPU","cluster.col.ram":"RAM","cluster.col.disk":"Data disk","cluster.warning.backup_disk_too_small":"The largest disk is too small for the backups: add a bigger disk size.","cluster.warning.control_low_ram":"The control node should have at least 8 GB of RAM.","cluster.warning.no_ha_many_shards":"Several shards without standbys: one failed server interrupts part of the users.","cluster.warning.small_storage_disks":"Small disks for the storage cluster: many storage servers will be needed.","cluster.steps.title":"Servers to add (in order)","cluster.steps.hint":"Backup first, then storage, mail shards, standbys and app servers. Click \"Get command\" and paste it on the new VPS as root; the status updates by itself.","cluster.steps.progress":"{done}/{total} done","cluster.status.blocked":"Waiting for an earlier server","cluster.status.todo":"Not installed","cluster.status.command_ready":"Command created","cluster.status.installing":"Installing","cluster.status.failed":"Failed","cluster.status.healthy":"Healthy","cluster.status.unhealthy":"Services failing","cluster.status.offline":"Not reporting","cluster.status.skipped":"Skipped","cluster.step.control":"control node of {domain}","cluster.step.protects":"standby for {cluster}","cluster.step.after":"needs first: {after}","cluster.step.command":"Get command","cluster.step.new_command":"New command","cluster.step.skip":"Skip","cluster.step.unskip":"Don't skip","cluster.step.open":"Open server","cluster.checks.title":"Cluster ready checks","cluster.checks.hint":"DNS, certificates, ports 25/465/587/993/443 from outside, backups that have succeeded, standbys in sync, and a real test message sent and read back.","cluster.checks.run":"Run checks","cluster.checks.running":"Checking (up to ~2 minutes)…","cluster.checks.never":"Not checked yet.","cluster.checks.at":"Last checked: {at}","cluster.backups.setup":"Set up backups","cluster.backups.starting":"Setting up…","cluster.backups.started":"Default backup policies created and a first run started for {count} data sources. Run the checks again in a few minutes.","cluster.ready":"The cluster is ready.","cluster.ready.hint":"Every server is healthy and every critical check passes.","cluster.group.nodes":"Servers","cluster.group.database":"Database","cluster.group.dns":"DNS","cluster.group.tls":"TLS certificates","cluster.group.ports":"Ports","cluster.group.backups":"Backups","cluster.group.standby":"Standbys","cluster.group.mail":"Test mail","cluster.check.node_healthy":"{name} is healthy","cluster.check.control_node_not_active":"Control node {name} is not running ({status})","cluster.check.node_blocked":"{name}: waiting for an earlier server","cluster.check.node_todo":"{name}: not installed","cluster.check.node_command_ready":"{name}: command created, not installed","cluster.check.node_installing":"{name}: installing","cluster.check.node_failed":"{name}: installation failed","cluster.check.node_unhealthy":"{name}: services failing","cluster.check.node_offline":"{name}: not reporting","cluster.check.skipped_lab":"Public DNS not checked (lab)","cluster.check.dns_a_ok":"{host} → {found}","cluster.check.dns_a_mismatch":"{host} points to {found}, should be {ip}","cluster.check.dns_a_missing":"No A record for {host} (→ {ip})","cluster.check.dns_mx_ok":"MX of {domain} → {host}","cluster.check.dns_mx_elsewhere":"MX of {domain} is {found}, should be {host}","cluster.check.dns_mx_missing":"No MX for {domain} (→ {host})","cluster.check.dns_txt_ok":"TXT {name} present","cluster.check.dns_txt_missing":"TXT {name} missing ({expect}…)","cluster.check.dns_ptr_ok":"PTR of {ip} → {host}","cluster.check.dns_ptr_wrong":"PTR of {ip} is \"{found}\", should be {host} (set it at your VPS provider)","cluster.check.ports_unknown_address":"No public entry address is known (control node, edge nodes)","cluster.check.port_open":"Port {port} ({name}) open","cluster.check.port_closed":"Port {port} ({name}) closed on {host}","cluster.check.tls_ok":"{host}:{port} valid certificate ({days} days left)","cluster.check.tls_untrusted":"{host}:{port} certificate not trusted ({reason})","cluster.check.tls_expiring":"{host} certificate expires soon ({days} days)","cluster.check.tls_unreachable":"No TLS handshake with {host}:{port}","cluster.check.backups_no_target":"No backup target yet (add a backup server)","cluster.check.backups_target_ok":"Backup target {name}","cluster.check.backups_policy_missing":"No backup policy for {dataset} {source}","cluster.check.backups_never_succeeded":"Backup of {dataset} {source} has not succeeded yet","cluster.check.backups_ok":"Backup of {dataset} {source}: {runs} successful runs","cluster.check.standby_missing":"{name} is not attached to {cluster}","cluster.check.standby_in_sync":"Standby of {cluster} in sync","cluster.check.standby_state":"Standby of {cluster}: {state} ({lag} s behind)","cluster.check.db_ha_ok":"PostgreSQL HA is on: {members} members, primary {primary}","cluster.check.db_ha_off":"{nodes} database server(s) but PostgreSQL HA is off: install {expected} and run zomail-cluster db-ha --enable","cluster.check.db_ha_members":"PostgreSQL HA has only {members}/{expected} members running ({names})","cluster.check.db_ha_no_primary":"PostgreSQL HA ({members} members) has no primary — check zomail-cluster db-status","cluster.check.db_ha_split":"Several members report being the primary: {names} — check zomail-cluster db-status","cluster.check.roundtrip_no_shard":"No mail shard yet for the test message","cluster.check.roundtrip_send_failed":"Sending the test message on port {port} failed: {error}","cluster.check.roundtrip_ok":"{path}: test message arrived after {seconds} s","cluster.check.roundtrip_imap_failed":"{path}: reading over IMAPS {port} failed: {error}","cluster.check.roundtrip_not_delivered":"{path}: test message not delivered after {seconds} s","cluster.error.generic":"That did not work. Try again.","cluster.error.no_plan":"No plan yet — save one first.","cluster.error.step_not_found":"This step no longer exists (plan changed?). Reload the page.","cluster.error.step_skipped":"This step is skipped.","cluster.error.step_blocked":"Install these first: {after}.","cluster.error.already_installed":"This server is already installed.","cluster.error.lab_not_allowed":"Lab servers are not enabled on this API.","cluster.error.node_name_taken":"The name {name} is used by a server with another role.","cluster.error.step_has_node":"This step has a server — decommission it on the server page instead of skipping.","cluster.error.not_bootstrapped":"The control node is not recorded (run deploy/cluster/bootstrap.sh).","cluster.error.invalid_request":"Invalid input: check the numbers and disk sizes.","cluster.error.backups_no_target":"No backup target yet — install the backup server first.","cluster.error.standby_needs_shard":"A standby needs its primary shard running.","cluster.error.standby_shard_not_eligible":"Shard {cluster} cannot get a standby: only active shards storing mail on local disk can.","cluster.error.standby_exists":"Shard {cluster} already has a standby — skip this step.","cluster.error.cluster_not_found":"The primary shard has not finished registering.","cluster.error.unreachable":"Cannot reach the Control API.","cluster.error.internal_error":"Server error — see the API log.","cluster.error.control_plane_only":"This server does not know where the control node is (NODE_CONTROL_MESH_HOST missing). Open the admin on the control node, or set it and restart.","cluster.error.control_plane_unreachable":"The control node did not answer (this page is served by the control node). Check the control node and the private network, then try again.","cluster.error.public_url_not_configured":"NODE_PUBLIC_API_URL is not set on the control node — install commands need it.","cluster.error.public_url_not_https":"NODE_PUBLIC_API_URL must be an https:// address.","nodes.role.database":"Database (PostgreSQL HA)","nodes.role.database.hint":"One of the 3 PostgreSQL HA servers (Patroni + etcd, automatic failover). Once all 3 are installed: zomail-cluster db-ha --enable; planned primary moves: db-ha --switchover. A separate data disk is recommended.","nodes.role.monitor":"External monitoring","nodes.role.monitor.hint":"Prometheus + Telegram/e-mail alerts, HTTPS/IMAP/SMTP and certificate-expiry probes from another datacenter.","nodes.role.media":"Office + video meetings","nodes.role.media.hint":"Collabora and LiveKit for the whole cluster; several servers share the load. Needs a public IP, open UDP and plenty of bandwidth. Switched on with zomail-cluster media enable.","nodes.role.chat":"Internal chat","nodes.role.chat.hint":"Synapse (Matrix) + workers + Sygnal; behind the cluster's Caddy, no public port. Switched on with zomail-cluster chat enable.","cluster.form.database":"Separate database server","cluster.form.database.hint":"With HA the plan always has exactly 3 database servers (Patroni); once installed, run zomail-cluster db-ha --enable to move PostgreSQL off the control node and turn on automatic failover (planned moves: db-ha --switchover). Without HA: one database server holding a copy.","cluster.limit.overcommit":"overcommit (quota sold ÷ disk)","nodes.upgrade.title":"Upgrade every server","nodes.upgrade.hint":"The control node first (backup + migrations), then one server at a time; the next one starts only when the previous one is healthy.","nodes.upgrade.image":"New image (e.g. novamail/app:0.9.7)","nodes.upgrade.start":"Start upgrade","nodes.upgrade.abort":"Stop","nodes.upgrade.resume":"Resume","nodes.upgrade.status.running":"Upgrading","nodes.upgrade.status.succeeded":"Upgrade complete","nodes.upgrade.status.failed":"Stopped on an error","nodes.upgrade.status.aborted":"Stopped","nodes.upgrade.step.pending":"waiting","nodes.upgrade.step.running":"running","nodes.upgrade.step.succeeded":"done","nodes.upgrade.step.failed":"failed","nodes.upgrade.step.skipped":"skipped","nodes.upgrade.reason.already_current":"already on this version","nodes.upgrade.reason.db_preflight_failed":"Stopped before demoting the PostgreSQL primary: the pgBackRest pre-flight refused (repositories differ from the policy or WAL archiving fails). See Admin → Backups, run zomail-cluster db-preflight, then resume.","nodes.upgrade.reason.offline":"skipped: the server was offline — bring it back, then resume the upgrade","nodes.upgrade.reason.decommissioned":"skipped: the server was decommissioned","nodes.upgrade.reason.skipped_offline":"Done, but offline servers were skipped — bring them back and run a new upgrade.","nodes.upgrade.reason.switchover_failed":"The PostgreSQL switchover did not happen: Patroni did not move the primary to a replica. Check the cluster (zomail-cluster db-ha), then resume.","nodes.upgrade.reason.switchover_refused":"Patroni refused the switchover (replica not in sync or the cluster is busy). Wait for the replica to catch up, then resume.","nodes.upgrade.reason.switchover_unverified":"The new primary could not be confirmed after the switchover. Check the PostgreSQL cluster (zomail-cluster db-ha) before resuming.","nodes.upgrade.reason.no_healthy_replica":"No healthy PostgreSQL replica can take over as primary: fix a replica (or add one), then resume.","nodes.upgrade.reason.step_timeout":"This server did not finish its upgrade step in time. Check its jobs (Infrastructure → Servers), then resume.","nodes.upgrade.reason.upgrade_job_missing":"This server's upgrade job is gone (canceled or cleaned up). Resume to create it again.","nodes.upgrade.reason.deploy_role_failed":"Redeploying the role after the upgrade failed — see the server's deploy_role job, then resume.","nodes.upgrade.error.upgrade_in_progress":"Another upgrade is already running.","nodes.upgrade.error.no_nodes":"There is no server to upgrade yet.","nodes.error.database_primary":"This server is the PostgreSQL primary — move the primary first (zomail-cluster db-ha --switchover <other server>, or db-promote --planned without HA).","nodes.error.db_ha_member":"This server is a member of the automatic-failover PostgreSQL cluster (Patroni): removing it leaves 2 of 3 members and the next deploy would lack members. Replace a member with the runbook procedure (PostgreSQL HA).","nodes.error.standby_serving":"This standby is serving shard {cluster} (after a failover): removing it stops those mailboxes. Fail back to the primary first (Mail HA → Fail back).","nodes.error.edge_certificates_missing":"The control node has no imap./smtp. certificate yet (wait for Caddy, then redeploy).","nodes.error.upgrades_unavailable":"Cluster upgrades are not available on this server.","nodes.error.upgrade_not_running":"No upgrade is running.","nodes.error.upgrade_not_failed":"Only an upgrade that stopped on an error can be resumed.","nodes.error.database_replication_not_configured":"Database replication is not configured (NODE_DB_REPLICATION_URL — run zomail-cluster db-proxy --enable).","nodes.error.control_plane_only":"This server does not know where the control node is (NODE_CONTROL_MESH_HOST missing). Open the admin on the control node, or set it and restart.","nodes.error.control_plane_unreachable":"The control node did not answer (this page is served by the control node). Check the control node and the private network, then try again.","nodes.error.public_url_not_configured":"NODE_PUBLIC_API_URL is not set on the control node — install commands need it.","nodes.error.public_url_not_https":"NODE_PUBLIC_API_URL must be an https:// address.","nodes.error.cluster_not_found":"The chosen cluster/shard no longer exists — reload the page.","nodes.error.control_node_not_found":"No control node is registered yet — install the control node first.","nodes.error.data_disk_not_for_role":"This role does not use a separate data disk — clear the disk choice.","nodes.error.job_type_not_allowed":"Only deploy_role or upgrade can be run from this page.","nodes.error.unknown_action":"Unknown action — reload the page.","nodes.error.upgrade_not_found":"This upgrade no longer exists — reload the page.","nodes.error.mesh_pool_exhausted":"The private network (mesh) address pool is full — decommission unused servers, then try again.","nodes.error.registry_not_configured":"The cluster has no image registry yet (no release loaded with release-load).","nodes.error.registry_control_plane_shared":"The control node uses the registry's shared login — rotate it with zomail-cluster registry-rotate.","nodes.error.registry_lab_node":"Lab servers do not log in to the registry — nothing to rotate.","nodes.error.node_decommissioned":"This server is decommissioned; it takes no new jobs.","nodes.error.already_decommissioned":"This server is already decommissioned.","nodes.error.node_still_online":"The server is still reporting ({secondsSinceSeen} s ago) — use the normal Remove, or power it off and wait 10 minutes before removing it as lost.","nodes.error.db_ha_not_enough_members":"Removing this server leaves {healthy} healthy PostgreSQL members (at least 2 needed). Add a new member first.","nodes.error.storage_single_copy":"The storage cluster keeps a single copy (replication {replication}): removing this server loses data. Raise replication or add a server first.","nodes.error.dovecot_db_not_configured":"The Dovecot database is not configured on the control node (NODE_DOVECOT_DB_URL or DATABASE_URL).","nodes.error.dovecot_master_not_configured":"DOVECOT_MASTER_PASSWORD is not set on the control node — mail servers need it.","nodes.error.doveadm_key_not_configured":"DOVEADM_API_KEY is not set on the control node — mail servers need it.","nodes.error.storage_not_configured":"The S3 storage cluster has no secrets yet — create or import them first.","nodes.error.no_storage_master":"The storage cluster has no master yet — add a master server first.","nodes.error.cert_public_key_required":"The agent sent no certificate key — update the agent on the server, then redeploy.","nodes.error.invalid_cert_public_key":"The agent's certificate key is invalid — reinstall the agent on the server.","nodes.error.ca_key_mismatch":"The CA key does not match the CA certificate — import the matching ca.crt / ca.key pair.","nodes.error.invalid_jwt_env":"jwt.env lacks WRITE_KEY, READ_KEY, FILER_WRITE_KEY or FILER_READ_KEY.","nodes.error.invalid_s3_json":"s3.json is invalid (an identities list is required).","nodes.error.secret_unreadable":"The control node cannot decrypt this server's secrets (NODE_SECRETS_KEY changed?). Restore the old key or reinstall the server.","nodes.error.backup_target_register_failed":"Could not register this server's backup target — see Admin → Backups.","nodes.error.job_failed":"The job failed — open its log for details.","nodes.error.cluster_id_invalid":"The shard's cluster ID is not valid — the server did not render its Dovecot configuration. Check the shard name in the console.","nodes.error.job_invalid":"The server refused a job with an invalid ID (not a UUID) — nothing was run.","nodes.error.role_file_invalid":"The role configuration has an invalid file name (a path outside the role directory) — the server wrote no files.","nodes.error.agent_stopped":"The agent stopped during the job (server rebooted or agent updated). Run the job again.","nodes.error.upgrade_rolled_back":"The new version did not become healthy, so the agent rolled back. Check the log, then try another image.","nodes.error.dovecot_auth_restart_failed":"Could not restart Dovecot auth on some servers — it will be retried.","nodes.error.invalid_image":"No image was given to deploy.","nodes.error.image_not_pinned":"The image must be pinned by digest (@sha256:…) — use the image from the Zomail release.","nodes.error.image_not_platform_registry":"The image is not from the platform registry — use only images released by Zomail.","nodes.error.registry_login_failed":"Could not log in to the image registry — check the registry credentials on the control node.","nodes.error.pull_failed":"Could not pull the image — check the server's network and the registry, then retry.","nodes.error.digest_mismatch":"The pulled image does not match the requested digest — not used; retry or check the registry.","nodes.error.tag_failed":"Could not tag the image on the server — check the Docker log.","nodes.error.image_build_failed":"Building the image on the server failed — see the job log.","nodes.error.compose_up_failed":"The role's containers did not start — see the job log.","nodes.error.compose_down_failed":"The role's containers did not stop — see the job log.","nodes.error.migrate_failed":"The database migration failed — check the log, fix, then redeploy.","nodes.error.data_disk_not_mounted":"The encrypted data disk is not unlocked/mounted on the server — unlock and mount it, then redeploy.","nodes.error.proxy_master_invalid":"The Dovecot proxy master credentials contain invalid characters — reset DOVECOT_PROXY_MASTER_PASSWORD.","nodes.error.dovecot_template_changed":"This release's Dovecot config template is not what the agent expects — align the agent and the release.","nodes.error.db_ha_member_busy":"Another database server has been redeploying for 20 minutes — check it; this job retries.","nodes.error.db_ha_cannot_be_removed":"This database server runs in HA mode: leaving the cluster needs a reinstall.","nodes.error.etcd_join_failed":"The server could not join the etcd cluster — see the log; zomail-node db-etcd-join repairs a member.","nodes.error.etcd_join_check_failed":"Could not check the etcd member list — see the job log.","nodes.error.etcd_leave_failed":"The server could not leave the etcd cluster — see the job log.","nodes.error.etcd_member_update_failed":"Could not update the etcd member — see the job log.","nodes.error.etcd_tls_certificate_missing":"The server has no etcd certificate — update the agent (0.10.94 or later), then redeploy.","nodes.error.etcd_unhealthy":"etcd does not answer on this server — run zomail-node db-etcd-join to repair the member.","nodes.error.evacuate_failed":"Moving data off the storage server failed — see the log, then retry.","nodes.error.evacuate_incomplete":"Data is still on the storage server — run again to finish moving it.","nodes.error.host_upgrade_timeout":"The server did not answer the upgrade request — check the novamail-cluster-upgrade timer on it.","nodes.error.cluster_upgrade_rolled_back":"The host upgrade was not healthy and was rolled back — see the job log.","nodes.error.upgrade_helper_failed":"The upgrade helper on the server failed — see the job log.","ops.alert.node.clock":"Server {name}: clock off by {seconds} s (check chrony/timesyncd)","ops.alert.db.connections":"PostgreSQL: {used}/{max} connections in use ({percent}%)","ops.alert.db.replica":"Database replica {name} is not streaming from the primary ({state})","ops.alert.db.lag":"Database replica {name} is {seconds} s behind the primary","ops.alert.db.failover":"PostgreSQL primary is now {primary} (automatic failover or switchover)","ops.alert.db.slot":"Replication slot {slot} keeps {gb} GB of WAL (replica gone?)","ops.alert.db.wal":"PostgreSQL pg_wal holds {gb} GB (WAL archiving failing or a replica's slot?)","ops.alert.tls.cert":"Certificate for {name} expires in {days} days ({file})","console.title":"Actions","console.lead":"Automatic actions run on the control node right away and check themselves; actions that need work on the server come with step-by-step guidance.","console.auto":"Automatic","console.guided":"Guided","console.recent":"Recent actions","console.none":"No actions yet.","console.col.action":"Action","console.col.status":"Status","console.col.by":"Requested by","console.output":"Output","console.queued":"Sent — running on the control node (reload to follow it).","console.reauth.hint":"Checks (verify, doctor, status) need no confirmation. Actions that change the cluster ask you to confirm it's you (your password, or your 2-step verification code if you have it on); after one confirmation, further ones in the same sign-in session within 5 minutes do not ask again.","console.reauth.grace":"Confirmed: until {time} actions that change the cluster need no new code (this sign-in session only; signing out or changing the password ends it).","console.action.verify":"Run the cluster acceptance checks","console.action.doctor":"Diagnose (doctor)","console.action.backup_now":"Back up configuration + database now","console.action.drive_enable":"Update Drive's storage route","console.action.db_status":"PostgreSQL HA status","console.action.db_refresh":"Refresh the database member lists","console.action.db_switchover":"Move the PostgreSQL primary to this server","console.action.remove_node":"Remove the server from the cluster","console.action.remove_node.lost":"Server is gone for good — remove it","console.action.add_node":"Add a server","console.action.install_command":"New install command","console.action.move_shard":"Move every mailbox to another shard","console.action.move_status":"Mailbox move progress","console.action.mail_ha_auto":"Automatic mail failover (on/off)","console.action.mail_ha_auto.on":"Turn automatic mail failover on","console.action.mail_ha_auto.off":"Turn automatic mail failover off","console.confirm.remove":"Remove {name} from the cluster? It stops every service (its data stays on the server). Type the server name to confirm.","console.confirm.switchover":"Move the PostgreSQL primary to {name}? Applications wait a few seconds.","console.field.target_shard":"Target shard (e.g. shard-mail1)","console.replace.title":"Replace this server (new name / new machine)","console.replace.steps":"1. Edit cluster.conf: replace the NODE {name} line by the new server's line (same IP = reinstall in place).\n2. On your workstation run the command below. The installer removes the old server, installs the new one, reconnects it for its role and runs the checks.\n3. This page shows the new server once it reports; the check results are under Recent actions.","console.replace.mail":"Mail servers are replaced as a pair onto a new shard (the shard id comes from the server's name): see the runbook \"replace-server\".","firewall.nav":"Host firewall","firewall.title":"Host firewall","firewall.lead":"Each server's nftables state from its latest heartbeat report (≤ 30 s) — the same data as zomail-cluster firewall status. Read-only; change the mode with the command on ctl1.","firewall.mode":"Mode: {mode}","firewall.mode.off":"Off","firewall.mode.report":"Report","firewall.mode.enforce":"Enforce","firewall.mode.off.hint":"No server has a host firewall: every mesh service is open to every server.","firewall.mode.report.hint":"Nothing is dropped; what would be is counted. Switch to enforce once ready.","firewall.mode.enforce.hint":"Packets that are not allowed are dropped. Kill switch: zomail-cluster firewall off.","firewall.ssh_from":"SSH from outside the mesh: {from}.","firewall.ssh_any":"anywhere","firewall.enforce_ready":"Ready for enforce: every server applied the report ruleset and refused nothing on the mesh.","firewall.not_compliant.report":"FAIL: the host firewall is in report mode — nothing is blocked. zomail-cluster verify and doctor fail until you run `zomail-cluster firewall enforce` (handbook 12 §7.1).","firewall.not_compliant.off":"FAIL: the host firewall is off. zomail-cluster verify and doctor fail until you run `zomail-cluster firewall enforce` (handbook 12 §7.1).","firewall.enforce_not_ready":"Not ready for enforce: {count} problems (below). The enforce command refuses without --force.","firewall.cli_hint":"On ctl1: zomail-cluster firewall status | report | enforce | off; one server's ruleset: zomail-cluster firewall show NAME.","firewall.servers":"Servers","firewall.servers.hint":"applied = the ruleset is live; reverted = rolled back after 120 s because the server lost the control plane; no-report = the agent has not reported (old version or server down).","firewall.none":"No server has reported yet.","firewall.none_short":"None.","firewall.col.server":"Server","firewall.col.role":"Role","firewall.col.mode":"Mode","firewall.col.state":"State","firewall.col.revision":"Revision","firewall.col.mesh_refused":"Mesh refused","firewall.col.public_refused":"Public refused","firewall.col.seen":"Last report","firewall.state.applied":"Applied","firewall.state.reverted":"Reverted","firewall.state.no-report":"No report","firewall.state.failed":"Failed","firewall.public_hint":"Public refused = Internet scanners on closed ports — expected. The column to watch is Mesh refused.","firewall.counters.report":"Mesh counters above zero (packets that WOULD be refused under enforce)","firewall.counters.enforce":"Mesh counters above zero (packets that were refused)","firewall.counters.hint":"A legitimate peer here must be fixed before enforce (usually a role that is not registered correctly).","firewall.sources":"Mesh sources refused (last day)","firewall.problems":"Why enforce is not ready","firewall.problem.not_applied":"ruleset not applied (state {detail})","firewall.problem.not_report":"in mode {detail}, not report","firewall.problem.mesh_refused":"{detail} packets on the mesh would be refused","firewall.error.generic":"Could not load the firewall status ({code}).","firewall.error.firewall_not_configured":"No firewall settings (control plane older than 0.10.94?).","firewall.error.firewall_status_unavailable":"The API server has no database connected.","nodes.error.offer_unsigned":"The setup from Zomail is not signed — not installed (the control plane lacks its signing key or the image is not pinned; re-run with --allow-unsigned if you trust this network).","nodes.error.offer_invalid":"The install offer's signature is invalid or expired — not installed.","nodes.error.offer_mismatch":"The setup does not match what Zomail signed for this command.","nodes.error.bundle_mismatch":"The downloaded bundle is not the one Zomail signed — not extracted.","nodes.error.image_digest_mismatch":"The pulled image does not have the signed digest — not installed.","nodes.error.doveadm_reload_failed":"Dovecot did not reload its new doveadm keys — see the job log; the previous keys keep working.","nodes.error.pgbouncer_reload_failed":"PgBouncer did not reload its user list — see the job log.","nodes.error.patroni_reload_failed":"Patroni did not reload its configuration (REST password, pg_hba) — see the job log.","nodes.error.lab_cluster":"Lab shard uses the shared doveadm keys — skipped.","nodes.error.no_servers":"The shard has no servers yet.","nodes.error.moves_active":"Mailbox moves to or from this shard are running — rotate after they finish.","nodes.error.shard_agents_not_ready":"The shard pair's servers do not run the 0.10.110 agent yet — cannot switch to per-shard keys.","nodes.error.role_image_not_pinned":"The role's image could not be pinned by digest in the cluster registry — check the registry (zomail-cluster verify); the job retries by itself.","nodes.error.cert_reload_failed":"The renewed certificate could not be reloaded (Dovecot / PostgreSQL / PgBouncer) — the previous one stays in use; see the job log, the job retries.","nodes.error.loki_token_refused":"The server sent its logs with an invalid token — redeploy it (Admin → Infrastructure).","nodes.error.loki_auth_unavailable":"The log token could not be checked right now — Vector retries by itself.","mailha.link":"Mail shards, standbys & mailbox moves →","mailha.eyebrow":"Infrastructure · Mail shards","mailha.title":"Mail shards: standby, failover and mailbox moves","mailha.lead":"Each shard can have a warm standby kept in sync continuously (dsync). When the primary stops serving for too long, the platform fences it and promotes the standby; routing, the API and the gateways follow within 30 seconds.","mailha.back":"Infrastructure","mailha.unavailable":"Mail HA is not enabled (DOVEADM_API_KEY is not set on the Control API).","mailha.config":"Sync every {sync} min · fail over after {failover} s down · lag alert above {lag} min · rebalancing off-peak {window} ({tz})","mailha.rpo":"RPO ≤ one sync interval (mail that arrived after the last sync may exist only on the old primary; it is merged back on resync). RTO ≈ {minutes} min.","mailha.shards.title":"Shards","mailha.col.shard":"Shard","mailha.col.usage":"Real usage","mailha.col.mailboxes":"Mailboxes","mailha.col.standby":"Standby","mailha.col.lag":"Lag","mailha.col.health":"Health","mailha.col.actions":"Actions","mailha.none":"No standby","mailha.lag.value":"{seconds} s","mailha.lag.minutes":"{minutes} min","mailha.last_sync":"Last complete sync: {at}","mailha.never_synced":"Never fully synced","mailha.pending":"{pending}/{total} mailboxes pending","mailha.active_side":"Serving: {side} ({imap})","mailha.side.primary":"primary","mailha.side.standby":"standby","mailha.epoch":"Epoch {epoch}","mailha.health.ok":"Healthy","mailha.health.down":"Not serving ({checks} checks)","mailha.health.standby_down":"Standby not answering","mailha.requested":"Pending: {action}","mailha.state.initial_sync":"Initial sync","mailha.state.in_sync":"In sync","mailha.state.lagging":"Lagging","mailha.state.standby_down":"Standby down","mailha.state.failed_over":"Failed over — no replica","mailha.state.resyncing":"Resyncing","mailha.state.paused":"Paused","mailha.action.failover":"Fail over now","mailha.action.failback":"Fail back to primary","mailha.action.resync":"Resync","mailha.action.force":"Skip safety checks (dangerous)","mailha.action.auto_on":"Enable auto failover","mailha.action.auto_off":"Disable auto failover","mailha.action.remove":"Remove standby","mailha.confirm.failover":"Fail shard {id} over to its standby? If the primary still runs, it is fenced and synced one last time first (no mail lost).","mailha.confirm.failback":"Fail shard {id} back to the primary? The serving side is fenced during the final sync.","mailha.confirm.remove":"Remove the standby of shard {id}? The shard will no longer fail over.","mailha.auto.on":"Auto failover: on","mailha.auto.off":"Auto failover: off","mailha.resync.merge":"Merge (keep mail only on the old side)","mailha.resync.mirror":"Mirror (discard the old side's extra data)","mailha.standby.title":"Add a standby to a shard","mailha.standby.hint":"The standby runs Dovecot with the same config, doveadm_port and the same DOVEADM_PASSWORD as the primary (internal network / WireGuard). For a node added with the node installer as mail_standby, use its mesh address.","mailha.standby.cluster":"Shard","mailha.standby.primary_dsync":"Primary dsync (host : port)","mailha.standby.lmtp":"Standby LMTP (host : port)","mailha.standby.imap":"Standby IMAP (host : port)","mailha.standby.proxy":"IMAP proxy to the standby (optional)","mailha.standby.doveadm":"Standby doveadm HTTP API","mailha.standby.dsync":"Standby dsync (host : port)","mailha.standby.node":"Standby server ID (required; every address must be this server's mesh address)","mailha.standby.auto":"Automatic failover","mailha.standby.submit":"Add standby","mailha.move.title":"Move a mailbox / domain to another shard","mailha.move.hint":"Initial sync while users keep working, then a lock of a few seconds (incoming mail is asked to retry, webmail is briefly busy), a final sync and a per-folder message count check before switching. A mismatch rolls back automatically.","mailha.move.kind":"Move","mailha.move.kind.address":"One mailbox (address)","mailha.move.kind.domain":"A whole domain","mailha.move.subject":"Address or domain","mailha.move.target":"Target shard","mailha.move.offpeak":"Off-peak hours only","mailha.move.submit":"Queue move","mailha.moves.title":"Mailbox moves","mailha.moves.empty":"No moves yet.","mailha.moves.col.mailbox":"Mailbox","mailha.moves.col.route":"From → to","mailha.moves.col.reason":"Reason","mailha.moves.col.state":"State","mailha.moves.col.progress":"Progress","mailha.moves.col.time":"Time","mailha.moves.cancel":"Cancel","mailha.moves.messages":"{messages} messages · {folders} folders","mailha.moves.lock":"locked {seconds} s","mailha.moves.offpeak":"off-peak","mailha.moves.cleaned":"old copy removed","mailha.moves.cleanup_at":"old copy kept until {at}","mailha.reason.manual":"Manual","mailha.reason.domain":"Domain","mailha.reason.rebalance":"Rebalance","mailha.move_state.queued":"Queued","mailha.move_state.initial_sync":"Initial sync","mailha.move_state.locked":"Locked","mailha.move_state.final_sync":"Final sync","mailha.move_state.verifying":"Verifying","mailha.move_state.done":"Done","mailha.move_state.failed":"Failed","mailha.move_state.rolled_back":"Rolled back","mailha.move_state.canceled":"Canceled","mailha.rebalance.title":"Automatic rebalancing","mailha.rebalance.hint":"A shard above {high}% real usage: its largest mailboxes move to the least-used shard in the same region until it is below {low}%. Runs only in the off-peak window.","mailha.rebalance.auto_on":"Auto-rebalance is on","mailha.rebalance.auto_off":"Auto-rebalance is off","mailha.rebalance.enable":"Enable auto-rebalance","mailha.rebalance.disable":"Disable auto-rebalance","mailha.rebalance.plan":"Current plan","mailha.rebalance.empty":"No shard is above the threshold — nothing to move.","mailha.rebalance.apply":"Queue this plan (off-peak)","mailha.rebalance.apply_now":"Queue and run now","mailha.rebalance.total":"{count} mailboxes · {size}","mailha.events.title":"Recent HA events","mailha.events.empty":"No events yet.","mailha.event.mailha.failover":"Automatic/emergency failover","mailha.event.mailha.switchover":"Planned switchover","mailha.event.mailha.failover_requested":"Failover requested","mailha.event.mailha.failback_requested":"Failback requested","mailha.event.mailha.resync_requested":"Resync requested","mailha.event.mailha.standby_registered":"Standby added","mailha.event.mailha.standby_removed":"Standby removed","mailha.event.mailha.auto_failover":"Auto failover changed","mailha.event.mailha.mailbox_moved":"Mailbox moved","mailha.event.mailha.move_canceled":"Move canceled","mailha.event.mailha.auto_rebalance":"Auto-rebalance changed","mailha.notice.saved":"Saved.","mailha.notice.mailfs_takeover":"The old server is fenced and the shard handed to a spare — the new server serves it in about 1–2 minutes.","mailha.error.no_spare":"No S3 spare server is ready in this region.","mailha.error.takeover_running":"This shard is already being taken over.","mailha.error.not_s3_shard":"This shard does not store mail on S3.","mailha.error.mailfs_not_configured":"Mail on S3 is not configured on the control plane.","mailfs.title":"Shards storing mail on S3","ops.alert.mailfs.down":"S3 mail shard {cluster} is down{error}","ops.alert.mailfs.takeover":"S3 mail shard {cluster} is being taken over by a spare","ops.alert.mailfs.no_spare":"No spare server for S3 mail shards in {region}","ops.pb.mailfs.down.cause":"The server serving the shard stopped sending heartbeats and does not answer LMTP: powered off, hung, network lost, or Docker/disk failure.","ops.pb.mailfs.down.impact":"The shard's users cannot read mail; incoming mail is deferred (4xx) and retried, not lost.","ops.pb.mailfs.down.steps":"With auto takeover on and an existing S3 spare left, the shard moves by itself after about a minute — watch the Mail shards page.\nWithout a spare: repair the server serving the shard (restart it, check disk/network). Do not add new S3 or spare servers — this storage mode is retired.\nAfterwards: add a local-disk shard pair (mail shard server + standby server, Mail HA) and move the S3 shard's mailboxes onto it.","ops.pb.mailfs.takeover.cause":"The shard was just moved to a spare (automatically or by an administrator).","ops.pb.mailfs.takeover.impact":"For 1–2 minutes the shard's users are disconnected and incoming mail is held; mail indexes are rebuilt gradually on the new server.","ops.pb.mailfs.takeover.steps":"Wait for the new server to finish starting (Servers page, deploy_role job).\nIf it has not finished after 15 minutes: read the spare's job log; another spare will be tried.\nThen check the old server and plan moving this shard's mailboxes to a local-disk shard pair (Mail HA).","ops.pb.mailfs.no_spare.cause":"Shards store mail on S3 but no spare server is ready in the region (none added, used by the last takeover, or unreachable).","ops.pb.mailfs.no_spare.impact":"If an S3 shard server fails now, its users lose access until a new server is added.","ops.pb.mailfs.no_spare.steps":"Do not add new S3 spares — S3 mail storage is retired.\nAdd a local-disk shard pair: a mail shard server, then a standby for it (Mail HA), and move the S3 shards' mailboxes onto it (Mail shards page → Move a mailbox / domain to another shard).\nMeanwhile: check why the existing spare is unreachable.","ops.pb.action.mailfs":"Open Mail shards","ops.pb.action.add_server":"Add server","mailfs.lead":"Retired storage mode: these shards keep their mail in the S3 cluster, without a standby of their own; when a server fails it is fenced and a spare takes the shard over. Move their mailboxes to local-disk shard pairs (Mail HA).","mailfs.col.shard":"Shard","mailfs.col.node":"Serving server","mailfs.col.state":"State","mailfs.col.mailboxes":"Mailboxes","mailfs.col.auto":"Auto takeover","mailfs.volume":"Volume {volume} · fencing {epoch}","mailfs.last_takeover":"Last takeover: {time}","mailfs.state.active":"Active","mailfs.state.down":"Unreachable","mailfs.state.taking_over":"Taking over","mailfs.down_since":"Since {time}","mailfs.error.takeover_timeout":"The spare did not finish starting within 15 minutes — it will be retried.","mailfs.error.no_spare":"No spare server is ready.","mailfs.auto.on":"On","mailfs.auto.off":"Off","mailfs.action.takeover":"Move to a spare","mailfs.confirm.takeover":"Fence the server serving {id} and move the shard to a spare? Mail arriving meanwhile is held and retried.","mailfs.spares.none":"No S3 spare left, and new ones cannot be added: move these shards' mailboxes to shard pairs with a standby (Mail HA).","mailfs.spares.list":"Spares: {list}","mailfs.spare.not_ready":"not ready","mailha.notice.requested":"Request recorded — the worker carries it out within seconds.","mailha.notice.queued":"Queued {count} moves.","mailha.notice.canceled":"Move canceled.","mailha.error.generic":"That did not work. Try again or check the Control API log.","mailha.error.unreachable":"Cannot reach the Control API.","mailha.error.validation_error":"Some values are not valid.","mailha.error.move_subject_required":"Enter one address or one domain.","mailha.error.cluster_not_found":"Shard not found.","mailha.error.cluster_not_cloud":"Only cloud shards can have a standby.","mailha.error.cluster_endpoints_incomplete":"The shard lacks LMTP/IMAP, a doveadm URL or a dsync address.","mailha.error.standby_failed_over":"The standby serves this shard — fail back first.","mailha.error.standby_is_primary":"The standby has the shard's own primary address — check which server serves the shard (Infrastructure), then reinstall the standby.","mailha.error.standby_not_found":"This shard has no standby.","mailha.error.standby_not_a_node":"The standby must be a server of the cluster: choose the server, and every address (LMTP, IMAP, dsync, doveadm) must be its private-network address; the primary addresses must be those of the server serving the shard.","mailha.error.action_pending":"Another action is pending for this shard.","mailha.error.not_failed_over":"The primary already serves this shard.","mailha.error.resync_not_needed":"A resync is only needed after a failover.","mailha.error.mailbox_not_found":"Mailbox not found.","mailha.error.domain_not_found":"Domain not found.","mailha.error.domain_has_no_mailboxes":"The domain has no mailboxes.","mailha.error.target_not_active":"The target must be an active cloud shard.","mailha.error.already_on_target":"The mailbox is already on the target shard.","mailha.error.mailbox_not_active":"The mailbox is not active.","mailha.error.mailbox_not_cloud":"Private mailboxes are not moved between cloud shards.","mailha.error.source_no_doveadm":"The source shard has no doveadm HTTP API configured.","mailha.error.move_in_progress":"The mailbox is already being moved.","mailha.error.restore_in_progress":"A restore from backup into this mailbox is running; move it once it has finished.","mailha.error.tenant_deleting":"This mailbox's tenant is being deleted.","mailha.error.move_not_cancelable":"Only queued moves can be canceled.","mailha.error.nothing_to_move":"Nothing to move.","mailha.error.mail_ha_unavailable":"Mail HA is not enabled.","mailha.error.forbidden":"Only Zomail administrators manage shards.","mailha.error.fence_failed":"Could not fence the other side over doveadm, so no switch was made (two writers would corrupt mail). Check that server, or force the switch once you are sure it is down.","mailha.error.standby_unhealthy":"The other side does not answer — no switch was made. Check that server, or force the switch.","mailha.error.not_in_sync":"The other side is not in sync yet (wait for the initial sync or resync) — switching now would lose recent mail.","mailha.error.final_sync_failed":"The final sync failed for some mailboxes, so no switch was made. Check the failed mailboxes, then retry.","mailha.error.move_not_found":"This mailbox move no longer exists — reload the page.","mailha.code.verify_mismatch":"message counts differed — rolled back","mailha.code.dsync_failed":"dsync failed","mailha.code.cluster_changed":"a shard failed over meanwhile — rolled back","mailha.code.mailbox_changed":"the mailbox changed — rolled back","mailha.code.worker_lost":"the worker stopped mid-way","mailha.code.cluster_endpoints_incomplete":"shard not fully configured","mailha.code.stats_failed":"could not read the folders","mailha.code.doveadm_unreachable":"doveadm not reachable","mailha.code.doveadm_auth":"doveadm refused the API key (check DOVEADM_API_KEY)","mailha.code.doveadm_http":"doveadm answered an HTTP error","mailha.code.doveadm_empty":"doveadm returned no result","mailha.code.invalid_user":"mailbox address not valid for doveadm","mailha.code.invalid_destination":"invalid dsync destination","mailha.placement.cell":"Really used {used} / {capacity} · allocated {allocated}","mailha.placement.overcommit":"Overcommit ×{ratio} (max ×{cap}) · projected {projected} / target {target}%","mailha.placement.source.node":"server disk","mailha.placement.source.cluster":"declared when the shard was added","mailha.placement.source.s3_pool":"share of the S3 pool","mailha.placement.source.none":"capacity unknown — limited by mailbox count only","mailha.placement.title":"Mailbox placement policy (thin provisioning)","mailha.placement.hint":"A shard takes new mailboxes while real usage + expected growth + the new mailbox ≤ physical capacity × fill target, and total quota sold ≤ physical capacity × overcommit cap.","mailha.placement.fill_target":"Fill target (%)","mailha.placement.overcommit_cap":"Maximum overcommit (×)","mailha.placement.new_mailbox_mb":"Expected initial size of a new mailbox (MB)","mailha.placement.growth_mb":"Growth reserve per mailbox (MB)","mailha.placement.horizon_days":"Growth forecast horizon (days)","mailha.placement.submit":"Save policy","adminui.success.set-storage-policy":"Placement policy saved.","mailha.retention.title":"Automatic Trash and Junk cleanup","mailha.retention.hint":"Messages in Trash / Junk older than this are permanently deleted by the mail server (at the next sign-in or delivery). Platform default: {days} days.","mailha.retention.trash":"Trash","mailha.retention.junk":"Junk","mailha.retention.default":"Platform default ({days} days)","mailha.retention.days":"{days} days","mailha.retention.never":"Never delete automatically","mailha.retention.submit":"Save","adminui.success.set-mail-retention":"Trash and Junk retention saved.","mailha.code.unknown":"other error","mailha.event.other":"Other change","mailha.event.enabled":"on","mailha.event.disabled":"off","mailha.event.actor.system":"System","mailha.event.mailha.move_queued":"Mailbox move queued","backups.eyebrow":"Infrastructure","backups.title":"Backups & restore","backups.nav":"Backups","backups.lead":"Automatic, encrypted, incremental backups to S3 in another region: mail every hour, PostgreSQL continuously (point-in-time recovery), calendars/contacts daily. Every week the system test-restores to prove the backups work.","backups.done":"Done.","backups.key_missing":"BACKUP_ENCRYPTION_KEY (or DKIM_ENCRYPTION_KEY) is not set for the Control API and worker — repositories cannot be created or scheduled.","backups.summary":"Backup summary","backups.summary.policies":"Active policies","backups.summary.unhealthy":"Need attention","backups.summary.last_restore_test":"Last test restore","backups.summary.pending_requests":"Requests to approve","backups.policies.title":"What is backed up","backups.policies.hint":"Each row is its own restic/pgBackRest repository with a random password stored encrypted.","backups.policies.empty":"No policies yet. Add a target, then click “Create default policies”.","backups.col.data":"Data","backups.col.target":"Target","backups.col.schedule":"Schedule & retention","backups.col.last_backup":"Last backup","backups.col.last_verified":"Last verified restore","backups.col.health":"Health","backups.col.time":"Time","backups.col.kind":"Kind","backups.col.status":"Status","backups.col.snapshot":"Snapshot","backups.col.changes":"Changes","backups.col.duration":"Duration","backups.col.location":"Location","backups.col.what":"What","backups.col.point_in_time":"Point in time","backups.col.requested_by":"Requested by","backups.dataset.mail":"Mail (shard)","backups.dataset.radicale":"Calendars, contacts, tasks","backups.dataset.postgres":"PostgreSQL (WAL + base, PITR)","backups.dataset.pg_dump":"PostgreSQL (nightly pg_dump)","backups.every.minutes":"Every {n} min","backups.every.hours":"Every {n} h","backups.every.days":"Every {n} days","backups.retention.restic":"Keep {hourly} hourly · {daily} daily · {weekly} weekly · {monthly} monthly","backups.retention.pitr":"Restore to any point in the last {days} days · full every {full} days","backups.keep.hourly":"Hourly","backups.keep.daily":"Daily","backups.keep.weekly":"Weekly","backups.keep.monthly":"Monthly","backups.health.ok":"OK","backups.health.stale":"Overdue","backups.health.failed":"Failing","backups.health.verify_failed":"Test restore failed","backups.health.verify_overdue":"Not test-restored","backups.verify.sample":"sample mailbox: {files} files / {indexed} messages","backups.verify.reached":"restored to {at}","backups.verify.ok":"Checks passed","backups.policy.disabled":"Disabled","backups.policy.enable":"Enable","backups.policy.disable":"Disable","backups.policy.edit":"Edit schedule / retention","backups.policy.add":"Add policy","backups.policy.add.hint":"Mail: the shard (mail cluster) id. Radicale: “radicale”. PostgreSQL: the stanza name (default “novamail”).","backups.run.backup":"Back up now","backups.run.verify":"Test restore","backups.run.prune":"Prune","backups.save":"Save","backups.field.interval_minutes":"Interval (minutes)","backups.field.interval_default":"Default for the data type","backups.field.pitr_days":"PITR window (days)","backups.field.full_every_days":"Full backup every (days)","backups.field.name":"Name","backups.field.backup_node":"Backup server (node)","backups.field.backup_node.none":"— external S3 —","backups.field.endpoint":"S3 endpoint (leave empty when a backup server is chosen)","backups.field.bucket":"Bucket","backups.field.prefix":"Prefix","backups.field.region":"Region","backups.field.access_key":"Access key","backups.field.secret_key":"Secret key (stored encrypted)","backups.field.dataset":"Data type","backups.field.source":"Source","backups.field.runner_node":"Server that runs the backup","backups.field.runner_node.auto":"Automatic (the server holding the data)","backups.field.runner_node.primary":"PostgreSQL is always backed up on the current primary (Patroni) — there is no server to choose.","backups.field.address":"Mailbox address","backups.field.folder":"Folder","backups.field.folder_optional":"Only one folder (optional)","backups.field.folder_hint":"Leave empty to restore the whole mailbox.","backups.field.point_in_time":"Restore to point in time","backups.field.point_in_time_hint":"Uses the newest snapshot before this time (mail is backed up every hour).","backups.field.point_in_time_latest":"Point in time (empty = latest)","backups.field.dest_folder":"Destination folder","backups.field.dest_folder_default":"Restored <date time>","backups.field.dest_folder_hint":"Must start with “Restored ”. The copies go to Archive with a label of exactly this name; nothing existing is overwritten.","backups.field.reason":"Reason (kept in the audit log)","backups.field.shard":"Shard to restore","backups.field.new_node":"New server (mail_shard, empty)","backups.field.switch_endpoints":"When done, switch the shard to the new server (LMTP/IMAP)","backups.field.confirm_shard":"Type the shard id to confirm","backups.pgrepos.title":"pgBackRest repositories on each PostgreSQL server","backups.pgrepos.hint":"The repositories each database server really archives WAL to, compared with the policy. Enabling/disabling a PostgreSQL policy or a target is written to every server at once.","backups.pgrepos.not_ok":"A database server differs from the policy or WAL archiving is failing: stopping/moving the primary now may hang in “shutting down”. Run zomail-cluster db-preflight.","backups.pgrepos.expected":"Policy","backups.pgrepos.none":"none (PITR off)","backups.pgrepos.primary":"primary","backups.pgrepos.replica":"replica","backups.pgrepos.col.server":"Server","backups.pgrepos.col.repos":"Configured repositories","backups.pgrepos.col.state":"Vs. policy","backups.pgrepos.col.archiver":"WAL archiving","backups.pgrepos.state.match":"Matches","backups.pgrepos.state.differs":"Differs","backups.pgrepos.state.unknown":"Not reported","backups.pgrepos.state.stale":"Old report","backups.pgrepos.archiver.ok":"Healthy","backups.pgrepos.archiver.failing":"Failing","backups.pgrepos.archiver.backlog":"Behind","backups.pgrepos.archiver.idle":"Idle","backups.pgrepos.archiver.unknown":"—","backups.pgrepos.ready":"{n} WAL segments waiting","backups.restores.title":"Restore history","backups.restores.hint":"Every restore is written to the audit log.","backups.restores.empty":"No restores yet.","backups.runs.title":"Recent runs","backups.runs.empty":"No runs yet.","backups.kind.backup":"Backup","backups.kind.prune":"Prune","backups.kind.verify":"Test restore","backups.trigger.schedule":"Scheduled","backups.trigger.manual":"Manual","backups.changes":"+{added} ({files} files)","backups.total":"Total {total} · {files} files","backups.status.queued":"Queued","backups.status.running":"Running","backups.status.succeeded":"Succeeded","backups.status.failed":"Failed","backups.status.missed":"Missed","backups.status.canceled":"Canceled","backups.status.requested":"Awaiting approval","backups.status.approved":"Approved","backups.status.rejected":"Rejected","backups.status.passed":"Passed","backups.targets.title":"Targets","backups.targets.hint":"S3 storage in another datacenter (a “backup” role server, or any S3 provider).","backups.targets.empty":"No targets yet.","backups.targets_count":"{targets} targets","backups.target.add":"Add target","backups.target.defaults":"Create default policies","backups.target.key_stored":"key stored","backups.target.active":"Active","backups.target.disabled":"Disabled","backups.target.enable":"Enable","backups.target.disable":"Disable","backups.objects.title":"Restore one Drive / archive object from the backup site","backups.objects.hint":"Drive and the compliance archive are already replicated ×2 with an immutable copy at the backup site; Drive users also have versions and trash. This puts back exactly one object by key and never overwrites.","backups.objects.unavailable":"BACKUP_SITE_S3_* is not configured for the Control API.","backups.objects.store":"Store","backups.objects.store.drive":"Drive","backups.objects.store.archive":"Compliance archive","backups.objects.key":"Object key","backups.objects.dry_run":"Dry run (check only)","backups.objects.submit":"Restore object","backups.objects.outcome.restored":"Object restored ({bytes}).","backups.objects.outcome.exists":"The object is still in the primary cluster ({bytes}) — nothing to restore.","backups.objects.outcome.would_restore":"Dry run: the backup site has this object ({bytes}); untick “Dry run” to restore it.","backups.restore.mailbox":"Restore a mailbox","backups.restore.shard":"Restore a whole shard (disaster)","backups.restore.request":"Restore a mailbox","backups.restore.shard_label":"Shard {shard}","backups.restore.snapshot_at":"snapshot at {at}","backups.restore.messages":"{count} messages restored","backups.restore.decided_by":"approved by {who}","backups.restore.decided":"Decided by","backups.restore.approve":"Approve","backups.restore.reject":"Reject","backups.restore.cancel":"Cancel","backups.restore.all_folders":"All folders","backups.restore.found":"Messages in the snapshot","backups.restore.started":"Started","backups.restore.finished":"Finished","backups.restore.done_mailbox":"Restored {count} messages into the folder “{folder}”.","backups.restore.done_mailbox_label":"Restored {count} messages into Archive with the label “{label}”. The user clicks that label in the webmail sidebar to see them.","backups.restore.done_shard":"Restored {mailboxes} mailboxes onto the new server.","backups.restore.switched":"The shard now runs on the new server.","backups.restore.not_switched":"The shard has NOT been switched — follow the “backup-restore” runbook to switch it.","backups.restore.requested_notice":"Request sent. A Zomail administrator will approve it; follow progress here.","backups.restore.started_notice":"Restore started. This page refreshes every 5 seconds.","backups.step.snapshot":"Pick the snapshot","backups.step.restore":"Fetch data from the backup","backups.step.import":"Copy messages into the mailbox","backups.step.count":"Count and compare","backups.step.done":"Done","backups.tenant.title":"Restore mail","backups.tenant.lead":"Mail deleted by mistake? Restore a mailbox (or one folder) to an earlier point in time, right away. The copies go to Archive with a “Restored …” label; nothing existing is overwritten.","backups.wizard.mailbox.title":"Restore a mailbox to a point in time","backups.wizard.mailbox.lead":"Pick the mailbox, optionally one folder, and the time. The restore starts right away.","backups.wizard.mailbox.lead_tenant":"Pick the mailbox, optionally one folder, and the time. The restore starts right away and usually takes a few minutes (at most 3 at a time).","backups.wizard.step.mailbox":"Mailbox and folder","backups.wizard.step.time":"Point in time","backups.wizard.step.where":"Destination folder","backups.wizard.mailbox.safe":"Safe: messages are copied into a new folder of the live mailbox — nothing is deleted or overwritten.","backups.wizard.mailbox.submit":"Restore","backups.wizard.mailbox.submit_request":"Restore","backups.wizard.shard.title":"Restore a whole shard onto a new server","backups.wizard.shard.lead":"For when the shard server (and its standby, if any) is lost. If a standby survives, fail over to it instead of restoring.","backups.wizard.shard.warning":"Mail received after the last snapshot (up to ~1 hour) will not be on the new server. The target server must be empty.","backups.wizard.shard.step1":"Add a new server with the mail_shard role (Infrastructure → Add server) and wait until it is “active”.","backups.wizard.shard.step2":"Choose the shard and the new server below and type the shard id to confirm.","backups.wizard.shard.step3":"Mailboxes are restored one by one from the newest snapshot (or the chosen time).","backups.wizard.shard.step4":"Done: the shard switches to the new server (LMTP/IMAP); mail waiting in queues is delivered again.","backups.wizard.shard.no_node":"No active mail_shard server to restore into.","backups.wizard.shard.submit":"Start shard restore","backups.wizard.shard.rto":"Estimate: ~15 min to prepare the server + about 1 h per 200 GB (1 Gbit/s network, SSD). See the RPO/RTO table in the runbook.","backups.error.generic":"Could not do that ({code}).","backups.error.control_plane_only":"This server does not know where the control node is (NODE_CONTROL_MESH_HOST missing). Open the admin on the control node, or set it and restart.","backups.error.control_plane_unreachable":"The control node did not answer (backups are served by the control node). Check the control node and the private network, then try again.","backups.error.pg_repos_mismatch":"The pgBackRest repositories written on the PostgreSQL server do not match the policy. See the pgBackRest table below, run zomail-cluster db-preflight, then retry.","backups.error.pgbackrest_settings_missing":"The PostgreSQL policy has no pgBackRest settings — edit the policy (or recreate the default policies).","backups.error.pgbackrest_setting_invalid":"A pgBackRest setting contains an invalid character — fix the target or the policy.","backups.error.dump_settings_missing":"The pg_dump policy has no settings — edit the policy (or recreate the default policies).","backups.error.retention_missing":"The policy has no retention — edit its schedule and retention, then retry.","backups.error.no_backup_in_repo":"The repository has no backup to check or restore yet — run “Back up now” first.","backups.error.not_found":"Not found.","backups.error.unavailable":"The backup service is not ready.","backups.error.unreachable":"Cannot reach the Control API.","backups.error.backups_unavailable":"Backups are not enabled on the Control API.","backups.error.platform_only":"Only Zomail administrators can do this.","backups.error.forbidden":"You are not allowed to do this.","backups.error.validation_error":"Some input is not valid.","backups.error.backup_key_missing":"BACKUP_ENCRYPTION_KEY is not set on the server.","backups.error.target_name_taken":"A target with this name already exists.","backups.error.target_not_found":"Target not found.","backups.error.cluster_not_found":"No shard with this id.","backups.error.invalid_retention":"This retention does not fit the data type.","backups.error.policy_exists":"This data already has a policy on that target.","backups.error.pitr_single_target":"The database already has two PITR repositories, or this target is the same place as an existing one. At most two, in different places — keep one off the cluster (external S3) so recovery works even when the cluster is lost.","backups.error.shard_has_standby":"Shard {cluster} has a standby (Mail HA): its endpoints cannot be switched to the restored server. Detach the standby first (Mail shards page), or restore without switching endpoints.","backups.error.policy_not_found":"Policy not found.","backups.error.prune_not_applicable":"PostgreSQL expires old backups after each backup.","backups.error.target_disabled":"The target is disabled.","backups.error.run_in_progress":"A run of the same kind is already in progress.","backups.error.no_runner_node":"No active server can run this.","backups.error.mailbox_not_found":"Mailbox not found (or not in your organisation).","backups.error.private_site_mailbox":"This mailbox lives on a Private Server — restore it there with novamail-private restore-mailbox.","backups.error.time_in_future":"The point in time is in the future.","backups.error.invalid_folder":"The folder name is not valid (the destination must start with “Restored ”, at most 80 characters).","backups.error.label_exists":"The mailbox already has a label with this name: pick another destination name.","backups.error.no_backup_policy":"The shard of this mailbox is not backed up.","backups.error.target_node_not_mail_shard":"The target server must have the mail_shard role.","backups.error.target_node_not_active":"The target server is not active yet.","backups.error.invalid_restore_state":"Not possible in the current state.","backups.error.restore_changed":"Someone else just changed this request — reload the page.","backups.error.restore_running":"Cannot cancel while messages are being copied into the mailbox.","backups.error.confirmation_mismatch":"The shard id you typed does not match.","backups.error.not_in_backup":"The backup site does not have this object.","backups.error.invalid_key":"The key is not valid.","backups.error.object_restore_unavailable":"The backup site is not configured (BACKUP_SITE_S3_*).","backups.error.endpoint_required":"Give an S3 endpoint or choose a backup server.","backups.error.invalid_endpoint":"The S3 endpoint must start with http:// or https://.","backups.error.backup_node_not_found":"Backup server not found.","backups.error.backup_node_no_address":"The backup server has no private network address yet.","backups.error.repo_missing":"The backup repository does not exist.","backups.error.repo_locked":"The backup repository is locked by another process.","backups.error.repo_wrong_password":"Wrong repository password.","backups.error.repo_unreachable":"Cannot reach the S3 storage.","backups.error.restic_failed":"restic reported an error (see the job details on the server).","backups.error.repo_password_missing":"The server did not receive the repository password.","backups.error.secret_sealed":"The job's secrets were not revealed when handed to the server (revealNodeJobPayload not wired).","backups.error.secret_unreadable":"Cannot decrypt a secret — did BACKUP_ENCRYPTION_KEY change?","backups.error.no_summary":"restic returned no summary.","backups.error.snapshot_not_found":"The chosen snapshot does not exist.","backups.error.no_snapshot_before_time":"There is no snapshot before the chosen time.","backups.error.mailbox_not_in_snapshot":"The mailbox did not exist at that time.","backups.error.folder_not_found":"This folder is not in the backup at that time (check the name, e.g. INBOX or Projects/2026): nothing was restored and no label was created.","backups.error.import_failed":"Dovecot could not import the messages.","backups.error.import_incomplete":"Only part of the messages were imported — see the job details on the server.","backups.error.count_failed":"Could not count the messages.","backups.error.target_not_empty":"The target server already has mail — not overwriting.","backups.error.sample_count_mismatch":"Test restore: message counts do not match.","backups.error.sample_absent":"Test restore: the sample mailbox is missing from the backup although it was on the server before it.","backups.error.sample_empty":"Test restore: the sample mailbox has mail but the backup holds none of it.","backups.error.snapshot_empty":"Test restore: the backup holds no files although the mail server has mailboxes.","backups.error.dovecot_read_failed":"Test restore: Dovecot could not read the restored copy.","backups.error.dump_unreadable":"Test restore: the pg_dump file is unreadable.","backups.error.restore_test_failed":"PostgreSQL test restore failed.","backups.error.restore_failed":"The restore did not succeed.","backups.error.target_not_reached":"Not enough WAL to reach the chosen time.","backups.error.start_failed":"The throwaway PostgreSQL did not start.","backups.error.sanity_failed":"The sanity query failed.","backups.error.recovery_timeout":"WAL replay took too long.","backups.error.base_backup_failed":"PostgreSQL base backup failed.","backups.error.pg_dump_failed":"pg_dump failed.","backups.error.stanza_create_failed":"Could not create the pgBackRest repository.","backups.error.wal_archive_check_failed":"WAL archiving is not working (pgbackrest check).","backups.error.configure_failed":"Could not write the pgBackRest configuration.","backups.error.node_did_not_start":"The server did not pick up the job in time.","backups.error.job_lost":"The job was lost on the server.","backups.error.not_dispatched":"The job was never sent to a server.","backups.error.job_failed":"The job failed on the server.","backups.error.lease_expired":"The server stopped reporting progress.","backups.error.job_type_unsupported":"The server has no backup support yet (update the node agent).","backups.error.job_role_mismatch":"The server has the wrong role for this job.","ops.alert.backup.stale":"Backup {policy}: last success {hours} h ago (interval {intervalHours} h)","ops.alert.backup.failed":"Backup {policy}: {failures} failed runs in a row","ops.alert.backup.verify_failed":"Backup {policy}: test restore verification failed","ops.alert.backup.partial":"Backup {policy}: {runs} runs in a row could not read some files — part of the data is not backed up","ops.alert.backup.verify_overdue":"Backup {policy}: no successful test restore for {days} days","ops.alert.backup.wal":"PostgreSQL: continuous WAL archiving problem ({reason}) — point-in-time recovery at risk","ops.alert.backup.pgrepos":"PostgreSQL: the pgBackRest repository list on {nodes} differs from the backup policy","backups.target.edit":"Edit keys / endpoint · move","backups.target.edit.hint":"The bucket {bucket} cannot change in place (the repositories there would be orphaned): for another bucket/provider add a new target, then use Move below. Empty secret = keep; secrets are never shown again.","backups.target.secret_keep":"(stored — leave empty to keep)","backups.target.save":"Save changes","backups.field.prune_access_key":"Prune key (optional)","backups.field.prune_access_key.hint":"A key that may delete, used only by prune runs and pgBackRest — so the servers' backup key stays append-only (08 §15).","backups.field.prune_secret_key":"Prune key secret","backups.move.title":"Move to new storage (another bucket/provider)","backups.move.hint":"The new target gets the same policies and their first backups (PostgreSQL: a full one; WAL goes to both places meanwhile). Press again when they are done: only then are the old target's policies switched off (PostgreSQL last). The old bucket is never deleted — keep it for its retention period to restore older backups.","backups.move.to":"Move to target","backups.move.retire":"When switched, also disable the old target","backups.move.submit":"Move / check progress","backups.move.waiting":"Moving: the new target is running its first backups. Follow them in the policy table, then press Move again.","backups.move.switched":"Switched: the old target's policies are off; every new backup goes to the new target.","backups.error.move_same_target":"Pick a target other than the one you move from.","backups.error.move_same_storage":"Both targets point at the same storage (endpoint/bucket/prefix): a move needs another bucket or prefix.","relays.nav":"Relays & sending","relays.eyebrow":"Mail flow","relays.title":"Relays & outbound mail","relays.lead":"Mail to recipients outside the platform goes through the relays below. Relays are grouped into pools; a customer assigned to a pool uses it, unassigned customers use the default pool if there is one — without a default pool their mail goes directly to the recipients' MX. Within a pool the lowest priority number is used first and relays of equal priority share traffic by weight; a relay that keeps failing is taken out automatically and comes back once a check succeeds.","relays.summary":"Sending overview","relays.summary.mode":"Current route","relays.summary.relays":"Relays working","relays.summary.accepted":"Accepted by relays (24 h)","relays.summary.failovers":"Failovers (24 h)","relays.mode.database":"All customers via relays","relays.mode.mixed":"Relays for some customers","relays.mode.unassigned":"Direct delivery for all customers; relays configured but unassigned","relays.mode.unused":"No customer sends through relays","relays.mode.environment":"Relay from the config file","relays.mode.direct":"Direct to recipients' MX","relays.mode.none":"No outbound route","relays.env.notice":"The relay from the server config file is in use ({host}:{port}, TLS {tls}). As soon as at least one relay is enabled on this page, the platform uses this list; the config-file relay is only used while the list is empty.","relays.env.direct":"No relay yet: outbound mail goes straight to recipients' MX servers from the sending machine's IP. Add a relay with a warmed-up IP.","relays.env.none":"No relay and direct delivery is off (OUTBOUND_DIRECT=false): outbound mail is waiting in the queue.","relays.dev.notice":"Development environment: unencrypted relays and skipped certificate checks are allowed. Production blocks both.","relays.done":"Saved.","relays.deleted":"Deleted.","relays.pool.default":"Default","relays.pool.direct_fallback":"Direct delivery when all relays fail","relays.pool.tenants":"{count} customers use this pool","relays.pool.tenants_default":"Customers without a pool of their own use this pool","relays.pool.empty":"This pool has no relays and no direct fallback: mail of its customers is held in the queue until a relay is available.","relays.pool.empty_direct":"This pool has no relays: mail of its customers goes directly to the recipients' MX (direct fallback is on). Add a relay to send through it.","relays.pool.undefault":"Remove default","relays.pool.undefault_hint":"Customers without a pool will deliver directly to the recipients' MX","relays.routing.summary":"Now: {relay} customers send via relays, {direct} deliver directly to recipients' MX, {held} have mail held (pool without an available relay and no direct fallback).","relays.routing.no_default":"No default pool: customers without a pool deliver directly.","relays.pool.make_default":"Make default","relays.pool.direct_on":"Enable direct fallback","relays.pool.direct_off":"Disable direct fallback","relays.pool.quarantine":"Quarantine pool","relays.pool.quarantine_on":"Use as quarantine pool","relays.pool.quarantine_off":"Stop using as quarantine pool","relays.pool.quarantine_hint":"Tenants whose complaint / bounce rates approach the relay's limits (e.g. Amazon SES) are moved to this pool automatically, so they cannot damage the shared relay's reputation. Only one pool can be marked; with none, their mail goes direct to MX.","relays.pool.quarantine_label":"Quarantine pool: where tenants near the relay's complaint / bounce limits are moved automatically (e.g. a separate SES account or IP)","relays.pool.delete":"Delete pool","relays.pool.new":"New pool","relays.pool.new_hint":"For example “VIP customers – dedicated IP” or “New customers – monitored”. Assign customers to a pool on the customer's page.","relays.pool.name":"Pool name","relays.pool.description":"Description","relays.pool.is_default":"Default pool (used by customers without a pool)","relays.pool.direct_label":"When every relay of the pool fails, deliver directly to recipients' MX (not recommended: cold IPs get blocked)","relays.pool.create":"Create pool","relays.col.relay":"Relay","relays.col.endpoint":"Address","relays.col.order":"Priority · weight","relays.col.health":"Health","relays.col.stats":"Last 24 hours","relays.col.actions":"Actions","relays.tls.implicit":"TLS (465)","relays.tls.starttls":"STARTTLS","relays.tls.none":"Unencrypted","relays.health.healthy":"Working","relays.health.unknown":"Not checked yet","relays.health.failing":"Out of rotation until {time}","relays.health.blocked":"IP/account blocked","relays.health.disabled":"Disabled","relays.health.recent_errors":"{count} failures in a row","relays.stats.line":"{accepted} accepted · {failed} failed · {failovers} failovers","relays.last_error":"Last error: {code} {detail}","relays.auth":"Authenticated ({user})","relays.auth_none":"No authentication","relays.action.test":"Test","relays.action.send_test":"Send test","relays.action.send_to":"Send a test message to","relays.action.edit":"Edit","relays.action.enable":"Enable","relays.action.disable":"Disable","relays.action.delete":"Delete","relays.action.confirm_title":"Confirm it's you","relays.reauth.password":"Your current password","relays.reauth.mfa":"2-step verification code (6 digits)","relays.reauth.hint":"Re-enter your password, or your 2-step verification code if you have it on, to confirm. Relay changes affect every customer's mail.","relays.form.add":"Add relay","relays.form.edit":"Edit relay “{name}”","relays.form.cancel":"Cancel editing","relays.form.pool":"Pool","relays.form.name":"Name","relays.form.name_ph":"e.g. Main relay, SendGrid backup","relays.form.host":"Host","relays.form.port":"Port","relays.form.tls":"Encryption","relays.form.verify":"Verify the relay's TLS certificate","relays.form.username":"SMTP username","relays.form.password":"SMTP password","relays.form.password_keep":"Leave empty to keep the stored password","relays.form.password_clear":"Remove the stored password","relays.form.helo":"HELO name (optional)","relays.form.priority":"Priority","relays.form.priority_hint":"Lower numbers are used first. Give backup relays a higher number.","relays.form.weight":"Weight","relays.form.weight_hint":"Share of traffic among relays with the same priority (e.g. 70/30).","relays.form.connections":"Max connections","relays.form.enabled":"Enable this relay","relays.form.test":"Test before saving","relays.form.save":"Save relay","relays.form.saving":"Working…","relays.test.ok_connect":"Connected, encrypted and authenticated ({ms} ms).","relays.test.ok_send":"The relay accepted the test message ({ms} ms): {detail}","relays.test.fail":"Failed at the {stage} step: {reason}","relays.test.stage.connect":"connect/sign-in","relays.test.stage.send":"send","relays.test.reason.esocket":"cannot connect to the relay","relays.test.reason.econnection":"cannot connect to the relay","relays.test.reason.econnrefused":"connection refused (wrong port or firewall)","relays.test.reason.etimedout":"timed out (firewall or wrong address)","relays.test.reason.edns":"cannot resolve the host name","relays.test.reason.eauth":"wrong SMTP username or password","relays.test.reason.smtp_535":"wrong SMTP username or password","relays.test.reason.etls":"TLS/certificate error","relays.changes.title":"Change history","relays.changes.empty":"No changes yet.","relays.change.relay.created":"Relay added","relays.change.relay.updated":"Relay changed","relays.change.relay.deleted":"Relay deleted","relays.change.relay.pool_created":"Pool created","relays.change.relay.pool_updated":"Pool changed","relays.change.relay.pool_deleted":"Pool deleted","relays.change.relay.tenant_pool_set":"Customer pool set","relays.tenant.title":"Outbound relay","relays.tenant.hint":"Relay pool used for this customer's outbound mail.","relays.tenant.default":"Default pool ({name})","relays.tenant.save":"Save","relays.tenant.manage":"Manage relays","relays.error.generic":"Could not complete the action ({code}).","relays.error.reauth_required":"Enter your password to confirm the change.","relays.error.wrong_password":"The confirmation password is incorrect.","relays.error.mfa_invalid_code":"The code is wrong or already used — wait for the next code","relays.error.relay_pool_name_taken":"A pool with this name already exists.","relays.error.relay_pool_default_required":"This is the default pool: use “Remove default” before deleting it (unassigned customers then deliver directly).","relays.error.relay_pool_not_empty":"The pool still has {relays} relays: move or delete them first.","relays.error.relay_name_taken":"This pool already has a relay with that name.","relays.error.relay_tls_required":"Production does not allow unencrypted relays.","relays.error.relay_host_private":"The relay host is on a private network address and is refused. Set RELAY_ALLOW_PRIVATE=true if this is intended.","relays.error.relay_certificate_check_required":"Production does not allow skipping certificate checks.","relays.error.relay_key_missing":"RELAY_ENCRYPTION_KEY is not set on the server, so relay passwords cannot be stored.","relays.error.relay_not_found":"Relay not found.","relays.error.relay_pool_not_found":"Pool not found.","relays.error.validation_error":"Some information is not valid (field {field}).","relays.error.platform_only":"Only platform administrators can manage relays.","relays.error.relays_unavailable":"Relays are not enabled on the server.","relays.error.unreachable":"Cannot reach the Control API.","relays.error.relay_password_required":"Enter the password to test a different relay server (the saved password only goes to the saved server).","ops.pb.title":"How to fix","ops.pb.cause":"Likely cause","ops.pb.impact":"Impact","ops.pb.steps":"Steps","ops.pb.actions":"Do it now","ops.pb.none":"No specific playbook for this alert yet. Check the technical details and the service logs (zomail-cluster logs).","ops.pb.action.queue":"Open queue","ops.pb.action.queue_domain":"Queue to {domain}","ops.pb.action.trace_failed":"Trace failed mail","ops.pb.action.trace_sender":"Mail sent by {address}","ops.pb.action.trace_inbound":"Trace blocked inbound mail","ops.pb.action.relays":"Relays & sending","ops.pb.action.relay":"Open relay","ops.pb.action.mailbox":"Open mailbox","ops.pb.action.holds":"Held mail","ops.pb.action.unblock":"Unblock IP {ip}","ops.pb.action.confirm_hold":"Confirm sending hold","ops.pb.action.confirm_hold_confirm":"Hold sending for {address}? Its queued and scheduled mail stays held until a Zomail operator releases it.","ops.pb.action.delist":"Delist from {list}","ops.pb.action.server":"Open server","ops.pb.action.servers":"Infrastructure","ops.pb.action.add_storage":"Add storage server","ops.pb.action.add_shard":"Add mail server","ops.pb.action.shards":"Mail servers & standby","ops.pb.action.backups":"Backups","ops.pb.action.archive":"Compliance archive","ops.pb.action.dmarc":"DMARC reports","ops.pb.action.tenant":"Open customer","ops.pb.action.signup":"Open sign-up","ops.pb.action.signups":"Sign-ups","ops.pb.action.site":"Open private server","ops.pb.action.status":"Status page","ops.pb.action.incident":"Open incident","ops.pb.action.run_checks":"Re-check now","ops.alert.relay.down":"Relay {name} ({host}, pool {pool}) keeps failing and is out of rotation","ops.alert.relay.blocked":"Relay {name} ({host}, pool {pool}) refuses because our IP/account is blocked","ops.alert.relay.pool_down":"Relay pool {pool}: all {relays} relays are failing — outbound mail is held in the queue","ops.alert.mailha.primary_down":"Mail server {id}: primary is not answering","ops.alert.mailha.standby_down":"Mail server {id}: standby is not answering","ops.alert.mailha.auto_off":"Mail server {id}: automatic failover to the standby is OFF","ops.alert.mailha.lag":"Mail server {id}: standby is lagging behind","ops.alert.calendar.diverged":"Calendars: {node} kept {count} items only it had after a failover","ops.alert.mailha.failover":"Mail server {id}: switched to the standby","ops.alert.mailha.move_failed":"A mailbox move to another server failed","ops.alert.mailha.cleanup_held":"Old copy of a moved mailbox kept: the new server may be missing mail","ops.alert.platform.signup-capacity":"Sign-ups are waiting: no mail server has room left","ops.alert.platform.signup-failed":"A paid sign-up could not be provisioned","ops.alert.platform.signup-review":"A sign-up needs manual review","ops.alert.storage.tenant-mail":"{tenant}: {percent}% of purchased mail storage allocated","ops.alert.storage.tenant-drive":"{tenant}: Drive {percent}% used","ops.pb.queue.stuck.cause":"A relay or a large receiver (Gmail, Outlook…) is deferring; our sending IP is rate-limited or blocked; the sending worker is stuck.","ops.pb.queue.stuck.impact":"Customers' outbound mail is delayed. After 4 hours senders get a \"delayed\" notice; after the queue lifetime (default 5 days) mail bounces.","ops.pb.queue.stuck.steps":"Open the queue: which destination domains pile up and what the last error says.\n4xx \"rate limited\"/\"try again later\": wait, or spread traffic to another relay on the Relays page.\n\"blocked\"/\"blacklist\": see the blocklist alert, delist the IP, route through another relay meanwhile.\nEvery domain stuck: check the relays (Relays page) and the worker (\"worker not running\" alert, zomail-cluster logs worker).\nOnce fixed: \"Retry now\" in the queue.","ops.pb.delivery.domain.cause":"One customer sends a lot of failing mail: stale/wrong recipient lists, bulk sending, or a compromised account.","ops.pb.delivery.domain.impact":"The shared sending reputation drops and can pull other customers into Spam.","ops.pb.delivery.domain.steps":"Trace that domain's failed mail and find which senders dominate.\nLegitimate bulk mail: advise an email-marketing service instead of work mailboxes.\nSigns of a compromised account: hold the mailbox's outbound mail, change the password, revoke sessions.\nConsider moving the customer to its own relay pool to isolate reputation.","ops.pb.delivery.provider.cause":"A receiving provider (Gmail, Outlook, Yahoo…) throttles our IP: sudden volume, high complaint rate, or a cold IP.","ops.pb.delivery.provider.impact":"Mail to all of that provider's users is delayed or bounces.","ops.pb.delivery.provider.steps":"Open the queue to that domain and read the error: providers usually state the reason and a help link.\nCheck blocklists and DMARC (SPF/DKIM pass rates).\nSlow down, or route mail to this provider through a relay with a better IP.\nCheck Google Postmaster Tools / Microsoft SNDS for the IP's reputation.","ops.pb.delivery.tls.cause":"The receiver requires TLS (MTA-STS) but its certificate or handshake fails — usually misconfigured on their side.","ops.pb.delivery.tls.impact":"In enforce mode, mail to that domain is held (never sent unencrypted).","ops.pb.delivery.tls.steps":"Open the queue to that domain and read the TLS error.\nTheir side: tell the receiving domain's admins to fix the certificate/MTA-STS.\nMany domains at once: check the CA bundle and the sending machine's clock.","ops.pb.abuse.mailbox.cause":"A mailbox sends abnormally: high volume, many unknown recipients, many failures — usually a leaked password used for spam.","ops.pb.abuse.mailbox.impact":"Its outbound mail has been held automatically. If it leaks out, the shared IPs get blocklisted.","ops.pb.abuse.mailbox.steps":"Open the mailbox and look at recent sent mail (subjects, recipients).\nSpam: change the password, revoke all sessions and app passwords, enable 2-step verification, tell the customer.\nLegitimate (e.g. a notice to many clients): release the held mail and raise the sending limit.\nRelease held mail only when you are sure it is not spam.","ops.pb.abuse.complaints.cause":"Spam complaint reports (FBL/ARF) name this mailbox as the sender, but match none of the messages it actually sent. FBL reports are unauthenticated mail: anyone can send them to try to suspend any mailbox.","ops.pb.abuse.complaints.impact":"Nothing is held yet. If the complaints are genuine and ignored, the shared sending IPs' reputation can drop.","ops.pb.abuse.complaints.steps":"Look at the mailbox's recent sent mail (Message trace by sender) and the Deliverability page.\nIf it is sending spam: press \"Confirm sending hold\", then treat it as a compromised account.\nIf the complaints match nothing (forged): resolve the alert, do not hold.\nComplaints that match a message it really sent (Message-ID) still hold automatically at the limit.","ops.pb.security.bruteforce.cause":"One IP is trying passwords on many accounts (password spraying / credential stuffing).","ops.pb.security.bruteforce.impact":"The IP was blocked automatically. Risk: weak passwords may already have been guessed.","ops.pb.security.bruteforce.steps":"Usually nothing to do: the block expires by itself.\nIf the IP belongs to a customer (office NAT, a phone with a wrong password): unblock and have them fix the password on the device.\nCheck whether targeted accounts had unusual successful logins afterwards; force a password change and 2-step verification if in doubt.","ops.pb.blocklist.cause":"One of our sending IPs is listed: spam went out from it, or the IP has a bad history from a previous owner.","ops.pb.blocklist.impact":"Many receivers reject our mail or file it as Spam. Spamhaus hurts the most.","ops.pb.blocklist.steps":"Find the spam source first (abnormal mailbox alerts, failed-mail trace): delisting without stopping it gets you relisted.\nOpen the list's removal page and follow it.\nMeanwhile route outbound mail through another relay/IP (Relays page).\nCheck the IP's PTR, SPF and DKIM are right.","ops.pb.relay.down.cause":"The relay cannot be reached, times out, rejects our SMTP password, or is under maintenance.","ops.pb.relay.down.impact":"Mail fails over to another relay of the pool. If it was the pool's last relay, mail waits in the queue.","ops.pb.relay.down.steps":"Open the relay and press \"Test\" to see the current error.\nWrong password: update it under \"Edit\". Unreachable: check firewall, DNS and the relay provider's status.\nAs soon as a test succeeds the relay rejoins rotation.","ops.pb.relay.blocked.cause":"The relay says our IP or account is blocked (blocklist, quota exceeded, suspended account).","ops.pb.relay.blocked.impact":"The relay is out of rotation and mail uses other relays. Nothing bounces to senders.","ops.pb.relay.blocked.steps":"Read the relay's last error for the reason.\nContact the relay provider or delist the IP.\nCheck for a spam source inside the platform (abnormal mailbox alerts).\nOnce cleared: press \"Test\" to bring it back.","ops.pb.relay.pool_down.cause":"Every relay of the pool is failing or blocked.","ops.pb.relay.pool_down.impact":"Outbound mail of the customers on this pool is held in the queue.","ops.pb.relay.pool_down.steps":"Open the Relays page and test each relay of the pool.\nAdd or enable a backup relay in the pool.\nUrgent: move the customers to another pool (customer page), or enable direct fallback for the pool.\nWhen relays work again: \"Retry now\" in the queue.","ops.pb.dns.cause":"The customer's MX, SPF, DKIM or DMARC record is missing or wrong (often after changing DNS provider).","ops.pb.dns.impact":"No MX: no inbound mail. Wrong SPF/DKIM/DMARC: outbound mail lands in Spam or is rejected.","ops.pb.dns.steps":"Open the customer → domain: which record is wrong and the correct value.\nSend the customer the DNS instructions (values are on the domain page).\nAfter they fix it, re-check (DNS can take a few hours).","ops.pb.dmarc.passrate.cause":"The DMARC pass rate dropped: an outside service (CRM, website, accounting) sends as the customer's domain without SPF/DKIM set up.","ops.pb.dmarc.passrate.impact":"Legitimate mail from those services may go to Spam or be rejected under quarantine/reject.","ops.pb.dmarc.passrate.steps":"Open the domain's DMARC report and find the failing sources.\nLegitimate source: add it to SPF or set up DKIM for that service.\nUnknown source: see the spoofing alert.","ops.pb.dmarc.spoofing.cause":"Unknown servers are sending mail pretending to be the customer's domain.","ops.pb.dmarc.spoofing.impact":"Recipients may be phished in the customer's name; the domain's reputation drops.","ops.pb.dmarc.spoofing.steps":"Open the DMARC report and identify the spoofing IPs/sources.\nStill at p=none: advise moving to quarantine, then reject.\nWarn the customer about phishing in their name.","ops.pb.inbound.wave.cause":"A spam or virus wave targets the customer's domain.","ops.pb.inbound.wave.impact":"Malicious mail was blocked or filed to Junk; filtering runs under higher load.","ops.pb.inbound.wave.steps":"Trace blocked inbound mail to see the pattern (senders, subjects).\nIf some reached Inbox: report it as spam so the filter learns, block the sender for the customer.\nWarn the customer's users not to open unexpected attachments.","ops.pb.inbound.virus_scan_unavailable.cause":"The ClamAV used by the inbound gateway (MX) has not answered for longer than GATEWAY_AV_TEMPFAIL_MAX_MINUTES (default 60 min): the gateway stopped deferring mail (451) and delivers it unscanned.","ops.pb.inbound.virus_scan_unavailable.impact":"Inbound mail is delivered without a virus scan; recipients see a \"not virus-scanned\" warning on those messages.","ops.pb.inbound.virus_scan_unavailable.steps":"Check ClamAV on the MX/edge machine: zomail-cluster logs clamav (out of memory, reloading signatures, container stopped).\nRestart ClamAV or point CLAMD_HOST at a machine that runs it.\nThe alert closes when no message has been delivered unscanned for an hour.","ops.pb.platform.worker.cause":"A background process (sending, alerts, backups…) stopped, hung, or its machine went down.","ops.pb.platform.worker.impact":"Depends on the process: a stopped sending worker means the queue does not move; periodic jobs (alerts, cleanup) stop.","ops.pb.platform.worker.steps":"Read the logs: zomail-cluster logs worker (or the service named in the alert).\nRestart it: on the control node docker compose restart <service> in /opt/novamail-cluster; on a member server ./novamail-node restart.\nIf it recurs: check the machine's RAM/disk (Infrastructure) and the last error in the log.","ops.pb.platform.clamd.cause":"The ClamAV scanner stopped, ran out of memory (it needs about 1.5 GB), or is reloading signatures.","ops.pb.platform.clamd.impact":"Inbound mail is still accepted but not virus-scanned.","ops.pb.platform.clamd.steps":"Check ClamAV: zomail-cluster logs clamav.\nOut of memory (OOM): add RAM or move ClamAV to another machine.\nRestart ClamAV; the alert closes when scanning works again.","ops.pb.platform.signup-capacity.cause":"No mail server has enough free room for a new customer.","ops.pb.platform.signup-capacity.impact":"Paid self-sign-ups are waiting to be provisioned.","ops.pb.platform.signup-capacity.steps":"Add a mail server (Infrastructure → Add server → Mail server).\nWaiting sign-ups are provisioned automatically once there is room.","ops.pb.platform.signup-failed.cause":"Provisioning a paid sign-up failed (domain taken, system error, amount does not match the plan).","ops.pb.platform.signup-failed.impact":"The customer paid but cannot use the service yet.","ops.pb.platform.signup-failed.steps":"Open the sign-up and read the reason.\nFix it and retry; or provision by hand and contact the customer.\nIf it cannot be served: refund on the Billing page.","ops.pb.platform.signup-review.cause":"The sign-up looks like it needs a check (suspicious domain, mismatching details).","ops.pb.platform.signup-review.impact":"The customer is waiting for approval.","ops.pb.platform.signup-review.steps":"Open the sign-up and check the company details and domain.\nApprove or reject (refund if already paid).","ops.pb.media.cpu_high.cause":"Many meetings / Office documents at once on this media server (LiveKit puts new rooms on less loaded servers; open rooms stay).","ops.pb.media.cpu_high.impact":"Meeting audio/video may stutter and Office slow down if the load keeps growing.","ops.pb.media.cpu_high.steps":"Admin → Infrastructure: compare the media servers' load.\nAdd a media server (zomail-cluster add-node mediaN media, then zomail-cluster media sync) — new rooms go to it.\nHandbook 19 §2.","ops.pb.media.bandwidth_high.cause":"The media server's outbound traffic is close to its committed bandwidth (MEDIA_LINK_MBPS): many people watching video.","ops.pb.media.bandwidth_high.impact":"Participants get lower quality (LiveKit drops video layers) and may lose video.","ops.pb.media.bandwidth_high.steps":"Check MEDIA_LINK_MBPS is the provider's real bandwidth.\nAdd a media server, or lower the people per room in Admin → Plans.\nHandbook 19 §2.","ops.pb.node.offline.cause":"The server is off, lost network, ran out of disk so the agent stopped, or the VPS provider has an incident.","ops.pb.node.offline.impact":"Depends on the role: mail server → the standby takes over automatically; storage → data stays readable from replicas; app → the remaining app servers serve.","ops.pb.node.offline.steps":"Check the VPS provider's console: is the machine running, any network incident?\nIf it runs: SSH in, run /opt/novamail-node/novamail-node status and check disks (df -h).\nIf it is dead: replace it (Add server with the same role); data is rebuilt from replicas/backups.","ops.pb.node.disk.cause":"Data grew (mail, logs, docker images) or temporary logs/backups were not cleaned up.","ops.pb.node.disk.impact":"A full disk stops writes on that machine: a mail server stops accepting mail, the database may stop.","ops.pb.node.disk.steps":"Open the server and see which disk is full.\nQuick cleanup: docker system prune (old images), delete old logs.\nMail server: move some mailboxes away or add a mail server. Storage: add a storage server, data rebalances.\nGrow the VPS disk if the provider allows it.","ops.pb.node.mesh.cause":"The WireGuard private network is broken: a firewall blocks the UDP port, the public IP changed, or WireGuard stopped.","ops.pb.node.mesh.impact":"This machine cannot talk to the others: standby sync, backups and data access may fail.","ops.pb.node.mesh.steps":"Check the WireGuard UDP port in the provider's firewall.\nSSH in: wg show — which peer has no recent handshake.\nPublic IP changed: update it on the server page so the other machines learn the new address.","ops.pb.node.clock.cause":"The clock drifted because time sync (chrony/timesyncd) stopped or NTP is blocked.","ops.pb.node.clock.impact":"A wrong clock breaks signatures, certificates, 2-step verification codes and mail ordering.","ops.pb.node.clock.steps":"SSH in: timedatectl — enable time sync.\nRestart chrony or systemd-timesyncd, allow NTP (UDP 123) in the firewall.","ops.pb.node.health.cause":"One or more services on the machine are not running or not passing health checks.","ops.pb.node.health.impact":"The corresponding function of that machine is interrupted.","ops.pb.node.health.steps":"Open the server and see which service fails.\nRead its logs: on that server /opt/novamail-node/novamail-node logs (control node: zomail-cluster logs <service>).\nRestart it; if it recurs check RAM/disk and the version.","ops.pb.node.job.cause":"A job sent to the machine (deploy, upgrade, backup, promotion) failed.","ops.pb.node.job.impact":"That work is not done; depending on the job, standby or backups may be affected.","ops.pb.node.job.steps":"Open the server and read the job and its error code.\nFix the cause (disk, network, config) and run the job again.","ops.pb.node.capacity.cause":"A role's servers will run out of room at the current growth rate.","ops.pb.node.capacity.impact":"When full: no new customers, then no new data.","ops.pb.node.capacity.steps":"Add a server with that role (Infrastructure → Add server); new data and customers go there automatically.\nAdd before 80% to leave time for warm-up/rebalancing.","ops.pb.db.connections.cause":"PostgreSQL connections are near the limit: more load, a connection leak, or slow queries holding connections.","ops.pb.db.connections.impact":"When connections run out, logins and the API start failing.","ops.pb.db.connections.steps":"zomail-cluster db-status: connections per service.\nRestart the service holding an abnormal number of connections.\nReal growth: raise max_connections or add app servers.","ops.pb.db.replica.cause":"A PostgreSQL replica no longer streams from the primary (network, full disk, stopped).","ops.pb.db.replica.impact":"If the primary failed now, there is no up-to-date replica to promote.","ops.pb.db.replica.steps":"zomail-cluster db-status for the state.\nCheck the database server (Infrastructure): private network, disk.\nIf the replica is too old: rebuild it from the primary.","ops.pb.db.lag.cause":"A PostgreSQL replica lags behind (slow network or disk, heavy write load).","ops.pb.db.lag.impact":"Promoting it now could lose the last seconds/minutes of changes.","ops.pb.db.lag.steps":"Watch whether the lag shrinks.\nCheck the replica's private network and disk I/O.","ops.pb.db.failover.cause":"Patroni moved the PostgreSQL primary to {primary}: the old primary stopped answering, was restarted (upgrade), or someone switched over.","ops.pb.db.failover.impact":"Applications reconnect by themselves (about 30 s interruption on an automatic failover). PostgreSQL backups run again on the new primary.","ops.pb.db.failover.steps":"Check the state: zomail-cluster db-ha (primary, replicas, lag).\nFind why the old primary stepped down (its logs).\nCheck the old primary is back as a streaming replica.\nCheck the latest PostgreSQL backup succeeded (Backups).","ops.pb.db.slot.cause":"A replication slot keeps WAL because its replica or backup is not consuming it.","ops.pb.db.slot.impact":"Retained WAL can fill the primary database's disk.","ops.pb.db.slot.steps":"Find which replica/backup owns the slot (zomail-cluster db-status).\nFix that replica or backup; drop the slot if it is abandoned.","ops.pb.db.wal.cause":"WAL is not being removed: the WAL archive command is failing, or a replication slot is not being consumed.","ops.pb.db.wal.impact":"pg_wal grows until the primary database disk is full: PostgreSQL stops and every write stops.","ops.pb.db.wal.steps":"zomail-cluster db-preflight: check the archiver and that the backup store answers.\nIf backup:wal:failing is also open, fix the backup store (Wasabi/S3) first.\nzomail-cluster db-ha: find which replica's slot lags and fix that replica.\nBelow max_slot_wal_keep_size there is still time; never delete files in pg_wal by hand.","ops.pb.tls.cert.cause":"A TLS certificate is about to expire or automatic renewal (ACME) fails: wrong DNS, port 80 blocked.","ops.pb.tls.cert.impact":"Once expired: webmail, IMAP and SMTP show security errors; customers' devices cannot connect.","ops.pb.tls.cert.steps":"Check the certificate's host names point to the right machine.\nCheck port 80 is open for ACME.\nRenew/reload: zomail-cluster reload-certs.","ops.pb.backup.failed.cause":"A backup failed: the target (S3) is unreachable or full, a key is wrong, or the source machine failed.","ops.pb.backup.failed.impact":"No new backup; data lost now could only be restored to the older backup.","ops.pb.backup.failed.steps":"Open Backups and read the failed run's reason.\nCheck the target (connectivity, space, access keys).\nRun the backup again right after fixing.","ops.pb.backup.partial.cause":"The backup finished but could not read some files (permissions, damaged files, disk errors).","ops.pb.backup.partial.impact":"Those files are not in the backup: if data is lost, that part of the mail cannot be restored.","ops.pb.backup.partial.steps":"Open Backups and look at the latest run: the number of unreadable files and some sample paths.\nOn the source server check those files' permissions and state (zomail-node logs backup).\nAfter fixing, run the backup now and check the run no longer reports missing files.","ops.pb.mailha.cleanup_held.cause":"A mailbox moved to another shard, but the new shard seems to hold less mail than the old copy (or it was just restored / failed over in mirror mode), so the old copy was not deleted automatically.","ops.pb.mailha.cleanup_held.impact":"The old copy is kept so no mail is lost; it still uses space on the old shard until it is handled.","ops.pb.mailha.cleanup_held.steps":"Compare the mailbox's per-folder counts on both shards (doveadm mailbox status).\nIf the new shard is missing mail, copy it over from the old copy (doveadm sync) first.\nOnce complete, allow the old copy's cleanup as described in the runbook (docs/runbook.md).","ops.pb.backup.stale.cause":"A backup did not run on schedule (stuck job, the runner machine is down).","ops.pb.backup.stale.impact":"The newest backup is older than allowed.","ops.pb.backup.stale.steps":"Open Backups and check the policy's runner machine.\nRun the backup now; check the schedule.","ops.pb.backup.verify_failed.cause":"The weekly test restore failed: the backup is damaged or unreadable.","ops.pb.backup.verify_failed.impact":"You may not be able to restore data when needed.","ops.pb.backup.verify_failed.steps":"Read the test restore's details.\nTake a fresh full backup and test-restore it.\nIf the target is the problem: move to a new target.","ops.pb.backup.verify_overdue.cause":"The backups have not been test-restored for a while.","ops.pb.backup.verify_overdue.impact":"Nobody has proven the backups work.","ops.pb.backup.verify_overdue.steps":"Open Backups and run \"Test restore\" for that policy.","ops.pb.backup.wal.cause":"PostgreSQL continuous WAL archiving (point-in-time recovery) is off or failing.","ops.pb.backup.wal.impact":"The database cannot be restored to an arbitrary point in time; changes since the last full backup could be lost.","ops.pb.backup.wal.steps":"Check archive_command and the pgBackRest target (Backups).\nFix connectivity/keys and watch WAL being pushed again.","ops.pb.backup.pgrepos.cause":"A database server's pgBackRest config still lists a repository that was switched off (or lacks a new one) compared with the PostgreSQL policy in Admin → Backups.","ops.pb.backup.pgrepos.impact":"That server keeps pushing WAL to a repository nobody wants; when the primary is stopped or moved (upgrade, switchover) PostgreSQL can sit in “shutting down” for minutes waiting for it — the API answers 503 meanwhile.","ops.pb.backup.pgrepos.steps":"On the control server: zomail-cluster db-preflight (writes the list to every server, then checks).\nAdmin → Backups → pgBackRest repositories on each server: every server must say “Matches”.\nUntil then do not run release-load / upgrade-nodes / switchover; handbook chapter 11 “DB leader stuck stopping”.","ops.pb.archive.backlog.cause":"Mail waiting for the compliance archive piles up: the target (S3) fails or is slow.","ops.pb.archive.backlog.impact":"Mail flows normally but is not archived yet; a compliance risk if it lasts.","ops.pb.archive.backlog.steps":"Open the compliance archive and read the upload errors.\nCheck the S3 target (connectivity, space); the backlog resumes by itself once fixed.","ops.pb.mailha.primary_down.cause":"The primary mail server does not answer (machine down, network lost, Dovecot stopped).","ops.pb.mailha.primary_down.impact":"Users on it temporarily cannot read mail; the platform promotes the standby after the grace period.","ops.pb.mailha.primary_down.steps":"Watch Mail servers & standby: does the automatic failover happen?\nCheck the primary (VPS provider, SSH).\nOnce repaired it resyncs; never run the old primary alongside after a failover.","ops.pb.mailha.standby_down.cause":"The standby does not answer or its sync stopped.","ops.pb.mailha.standby_down.impact":"The primary runs without a standby: a failure now means a longer outage.","ops.pb.mailha.standby_down.steps":"Check the standby server (Infrastructure).\nIf it is dead: add a new standby for that mail server.","ops.pb.mailha.auto_off.cause":"The pair is in sync but automatic failover is off (switched off by hand, or by a release before 0.10.39, which turned it off on every deploy).","ops.pb.mailha.auto_off.impact":"If the primary dies, its mailboxes stay down until someone presses Fail over: no automatic recovery.","ops.pb.mailha.auto_off.steps":"Open Infrastructure → Mail shards and switch automatic failover on for this shard.\nIf it is off on purpose (maintenance), switch it back on afterwards.","ops.pb.mailha.lag.cause":"The standby syncs slowly (network, slow disk, heavy mail volume).","ops.pb.mailha.lag.impact":"A failover now could miss the newest mail (recovered when the primary returns).","ops.pb.mailha.lag.steps":"Watch the lag; check the standby's private network and disk I/O.","ops.pb.calendar.diverged.cause":"The old calendar node took some changes after its last copy and lost contact; the other node took over. Back again, it kept the items only it had apart ({path}).","ops.pb.calendar.diverged.impact":"Users may miss events/contacts created in that window until they are put back.","ops.pb.calendar.diverged.steps":"On {node}: zomail-cluster calendar diverged (or zomail-node calendar diverged), then calendar reimport <directory> to review and --apply to put them back (existing items are never overwritten). Handbook 19 §3.4.","ops.pb.mailha.failover.cause":"The primary mail server failed and the platform switched to the standby.","ops.pb.mailha.failover.impact":"Users keep working on the standby; there is no standby now.","ops.pb.mailha.failover.steps":"Repair or replace the old primary.\nAdd a standby again to restore fault tolerance.\nSpot-check a few users' mail.","ops.pb.mailha.move_failed.cause":"Moving a mailbox to another server failed (network, full target disk, mailbox lock).","ops.pb.mailha.move_failed.impact":"The mailbox stays on the old server and works normally.","ops.pb.mailha.move_failed.steps":"Open Mail servers & standby and read the move's error.\nFix it and move again.","ops.pb.site.offline.cause":"The customer's private server stopped reporting: machine off, Internet down, or a firewall blocks outbound connections.","ops.pb.site.offline.impact":"It cannot be monitored or updated; mail at the customer may be down.","ops.pb.site.offline.steps":"Ask the customer to check the machine and Internet access.\nOpen the private server: last contact and outside checks.","ops.pb.site.health.cause":"Some services on the customer's private server report failures.","ops.pb.site.health.impact":"The corresponding functions at the customer are interrupted.","ops.pb.site.health.steps":"Open the private server and see which services fail.\nHave the customer run novamail-private status / logs, or help remotely.","ops.pb.site.checks.cause":"Checks from the Internet find wrong DNS, closed ports or a bad certificate at the customer.","ops.pb.site.checks.impact":"The customer may not receive mail or users cannot connect.","ops.pb.site.checks.steps":"Open the private server: which check fails and how to fix it.\nSend the customer the instructions (DNS, open ports, certificate).","ops.pb.site.update.cause":"An automatic update on the private server failed and rolled back.","ops.pb.site.update.impact":"The customer keeps running the old version.","ops.pb.site.update.steps":"Open the private server and read the update error.\nFix the cause (disk, network) and let it update again.","ops.pb.site.backup.cause":"The private server has no new backup for 26 hours, or its last backup failed (disk full, wrong or unreachable S3, locked restic repository).","ops.pb.site.backup.impact":"If the server failed now, the customer would lose mail and data since the last successful backup.","ops.pb.site.backup.steps":"On the customer's server: sudo ./novamail-private backup-auto --now and read the error.\nCheck the disk (df -h) and the connection to the backup repository.\nOnce a backup succeeds the alert clears with the next report.","ops.pb.status.probe.cause":"A status-page probe (SMTP, IMAP, webmail) failed.","ops.pb.status.probe.impact":"Customers may be unable to use that service.","ops.pb.status.probe.steps":"Try the service by hand.\nIf it is really down: fix it and post an incident on the status page.","ops.pb.status.draft.cause":"The platform drafted an incident notice from the alerts and waits for your review.","ops.pb.status.draft.impact":"Customers are not informed yet.","ops.pb.status.draft.steps":"Open the incident, edit if needed and publish; or discard it if customers are not affected.","ops.pb.storage.shard.cause":"A mail server is running out of room (allocated or actually used).","ops.pb.storage.shard.impact":"A full mail server stops accepting mail; new customers are not placed there.","ops.pb.storage.shard.steps":"Add a mail server; new customers go there automatically.\nMove some large mailboxes away (Mail servers & standby → Rebalance).","ops.pb.storage.objectstore.cause":"The S3 storage cluster (Drive, archive, backups) is running out of free volumes.","ops.pb.storage.objectstore.impact":"When full: Drive uploads and the compliance archive fail.","ops.pb.storage.objectstore.steps":"Add a storage server (Infrastructure → Add server → Storage); data rebalances automatically.","ops.pb.storage.mailbox.cause":"A mailbox is near or at its quota.","ops.pb.storage.mailbox.impact":"A full mailbox refuses new mail (senders get a bounce).","ops.pb.storage.mailbox.steps":"Ask the customer to clean up (Trash, large mail) or raise the mailbox quota / upgrade the plan.","ops.pb.storage.tenant-mail.cause":"The sum of the customer's mailbox quotas is close to the plan's mail storage.","ops.pb.storage.tenant-mail.impact":"The customer cannot add mailboxes or raise quotas.","ops.pb.storage.tenant-mail.steps":"Contact the customer: buy more storage or upgrade the plan.","ops.pb.storage.tenant-drive.cause":"The customer's Drive is almost at the plan limit.","ops.pb.storage.tenant-drive.impact":"The customer's users cannot upload more files.","ops.pb.storage.tenant-drive.steps":"Contact the customer: clean up files or buy more storage.","opscharts.nav":"Charts","opscharts.title":"Operations charts","opscharts.lead":"History of mail traffic, delivery latency, the queue, alerts and each server's resources. Hover a chart for the values at each point.","opscharts.range.24h":"24 hours","opscharts.range.7d":"7 days","opscharts.range.30d":"30 days","opscharts.empty":"No data in this period","opscharts.outbound":"Outbound mail","opscharts.outbound.hint":"Messages by delivery result, to external and local recipients.","opscharts.inbound":"Inbound mail","opscharts.inbound.hint":"Messages received, and the share blocked or filed to Junk.","opscharts.latency":"Delivery latency","opscharts.latency.hint":"Time from the user pressing Send until the receiver/relay accepted the message.","opscharts.queue":"Outbound queue","opscharts.queue.hint":"Messages waiting to be sent and the age of the oldest one.","opscharts.alerts":"Open alerts","opscharts.servers":"Servers","opscharts.servers.hint":"CPU (load per core), RAM and the fullest disk of each server. Above 85% needs attention.","opscharts.servers.none":"No server is reporting metrics yet (single-machine install or servers not connected).","opscharts.s.delivered":"Delivered","opscharts.s.deferred":"Retrying","opscharts.s.failed":"Failed","opscharts.s.received":"Received","opscharts.s.junk":"Junk","opscharts.s.rejected":"Blocked","opscharts.s.virus":"Virus","opscharts.s.p50":"Median","opscharts.s.p95":"95% of mail","opscharts.s.queued":"Waiting","opscharts.s.oldest":"Oldest (min)","opscharts.s.holds":"Held mailboxes","opscharts.s.critical":"Critical","opscharts.s.warning":"Warning","opscharts.s.cpu":"CPU","opscharts.s.mem":"RAM","opscharts.s.disk":"Disk","opscharts.total":"Total: {value}","opscharts.now":"Now: {value}","opscharts.peak":"Peak: {value}","opscharts.seconds":"{value} s","opscharts.minutes":"{value} min","opscharts.tenant_note":"You are seeing the customers you manage. Queue and server charts are for platform operators.","oncall.nav":"On-call & notifications","oncall.title":"On-call & notifications","oncall.lead":"Who gets alerts, escalation when nobody reacts, reminders, and muting notifications during maintenance. On-call staff acknowledge right from Telegram.","oncall.done":"Saved.","oncall.policy":"Escalation policy","oncall.policy.hint":"Alerts nobody acknowledged are sent on to the next level and repeated periodically.","oncall.policy.severity":"Applies to alerts from severity","oncall.policy.level2":"Page level 2 after (min)","oncall.policy.level3":"Page level 3 after (min)","oncall.policy.repeat":"Repeat every (min, 0 = off)","oncall.policy.resolved":"Notify when the problem is resolved","oncall.policy.save":"Save policy","oncall.policy.updated":"Last updated {when} by {who}","oncall.levels":"Level 1 = primary on-call · Level 2 = backup · Level 3 = managers","oncall.channels":"Platform alert channels","oncall.channels.hint":"Each channel is a Telegram group (or e-mail/webhook). Level 1 gets every alert at or above its minimum severity; levels 2 and 3 only on escalation.","oncall.channels.none":"No channels yet. Add a Telegram group below.","oncall.col.name":"Name","oncall.col.kind":"Type","oncall.col.target":"Target","oncall.col.level":"Level","oncall.col.min":"Minimum severity","oncall.col.enabled":"On","oncall.level":"Level {level}","oncall.save":"Save","oncall.test":"Send test","oncall.test.ok":"Test message sent. Check the chat.","oncall.test.fail":"Test failed ({code}). Check the bot token, the chat ID and that the bot is in the group.","oncall.remove":"Remove","oncall.add":"Add a Telegram group","oncall.add.steps":"1. In Telegram, send /newbot to @BotFather to create a bot and get its token.\n2. Create (or pick) the on-call group, add the bot, then post any message in the group.\n3. Paste the token here and press \"Find chat ID\" to pick the group.","oncall.add.label":"Name (person/group)","oncall.add.label_ph":"e.g. NOC on-call","oncall.add.token":"Bot token","oncall.add.chat":"Group chat ID","oncall.add.lookup":"Find chat ID","oncall.add.lookup_none":"No group found yet. Add the bot to the group, post a message there, then try again.","oncall.add.lookup_fail":"Cannot read the bot ({code}). Check the token.","oncall.add.pick":"Pick","oncall.add.submit":"Add channel","oncall.silences":"Mute notifications (maintenance)","oncall.silences.hint":"Alerts are still recorded but not sent during the window. Afterwards, alerts that are still open are sent as usual.","oncall.silences.none":"No mutes scheduled.","oncall.silence.scope":"Scope","oncall.silence.scope.all":"All alerts","oncall.silence.scope.category":"One alert category","oncall.silence.scope.prefix":"Alerts whose code starts with","oncall.silence.value":"Category / code","oncall.silence.value_ph":"e.g. node:  or  relay:down:","oncall.silence.start":"Start","oncall.silence.start_now":"Now","oncall.silence.duration":"For","oncall.silence.reason":"Reason","oncall.silence.reason_ph":"e.g. Upgrading mail server shard-2","oncall.silence.create":"Mute","oncall.silence.cancel":"Unmute","oncall.silence.active":"Muted until {until}","oncall.silence.upcoming":"From {from} until {until}","oncall.silence.ended":"Ended","oncall.silence.by":"{who} · {reason}","oncall.duration.30":"30 minutes","oncall.duration.60":"1 hour","oncall.duration.120":"2 hours","oncall.duration.240":"4 hours","oncall.duration.480":"8 hours","oncall.duration.1440":"1 day","oncall.duration.4320":"3 days","oncall.category.delivery":"Delivery","oncall.category.abuse":"Abuse","oncall.category.dns":"DNS","oncall.category.blocklist":"Blocklists","oncall.category.storage":"Storage","oncall.category.security":"Security","oncall.category.platform":"Platform & servers","oncall.category.site":"Private servers","oncall.category.inbound":"Inbound mail","oncall.silenced_badge":"Notifications muted until {until}","oncall.level_badge":"Paged level {level}","oncall.timeline":"Timeline","oncall.event.raised":"Raised","oncall.event.notified":"Paged level {level}","oncall.event.escalated":"Escalated to level {level}","oncall.event.reminded":"Reminder #{count}","oncall.event.silenced":"Notifications muted","oncall.event.acknowledged":"Acknowledged","oncall.event.resolved":"Closed","oncall.event.to":"to {to}","oncall.event.auto":"automatically","oncall.gap.title":"Alerts reach nobody","oncall.gap.channels":"No platform alert channel is enabled (e-mail, Telegram or webhook): every alert, critical ones included, only shows on this page and nobody is notified.","oncall.gap.deadman":"The dead man's switch is not set (OPS_DEADMAN_URL): if the control server dies, nobody hears about it. Create a check at healthchecks.io (period 5 min, grace 5 min), add OPS_DEADMAN_URL=https://hc-ping.com/… to /opt/novamail-cluster/cluster.env on the control server and run the installer again (deploy/install-cluster.sh cluster.conf install).","oncall.gap.add_channel":"Add an e-mail / webhook channel","oncall.gap.add_telegram":"Add Telegram","oncall.error.generic":"Could not complete the action ({code}).","oncall.error.validation_error":"Some information is not valid.","oncall.error.platform_only":"Only platform administrators can configure on-call.","oncall.error.channel_test_failed":"The test message to the channel failed — check the channel's address/webhook, then retry.","oncall.error.telegram_failed":"Telegram refused the test message — check the bot token and chat ID.","oncall.error.test_unsupported":"This channel type cannot send a test.","oncall.error.rate_limited":"Too many test messages. Please try again in a few minutes.","oncall.error.channel_test_rate_limited":"Too many test messages (at most 3 per channel every 10 minutes and 10 per administrator per hour). Please try again later.","ops.channels.platform":"Platform alert channels (summary)","ops.channels.platform.hint":"Managed in one place: On-call & escalation — add Telegram, e-mail, webhook; escalation levels; send a test; switch on/off.","ops.channels.tenant":"Your organisation's alert channels","ops.channels.manage":"Manage channels (On-call)","oncall.add.email_webhook":"Add an e-mail / webhook channel","oncall.add.email_webhook.hint":"E-mail: one address; webhook: an https://… URL (receives JSON). New channels start at level 1; change the level or send a test in the table above.","staff.nav":"Staff","staff.title":"Staff","staff.lead":"Which Zomail people may use the platform administration, and what they may do. One role per person; every change is logged.","staff.done":"Saved.","staff.role.superadmin":"Superadmin","staff.role.operator":"Operator","staff.role.support":"Customer support","staff.role.billing":"Billing","staff.role.viewer":"Read-only (NOC)","staff.role_desc.superadmin":"Everything, including creating/deleting customers and managing staff.","staff.role_desc.operator":"Alerts, queue, relays, servers, backups, status page; mailbox support like the Customer support role.","staff.role_desc.support":"Sees every customer; resets passwords (below owner), signs sessions out, resets 2-step verification; may suspend a mailbox in an incident (after confirming it's you).","staff.role_desc.billing":"Payments, plans, invoices, sign-ups, seats and plan storage.","staff.role_desc.viewer":"Views the ops centre, charts, infrastructure and customers — changes nothing.","staff.roles":"Roles","staff.list":"People","staff.col.person":"Person","staff.col.role":"Role","staff.col.mfa":"2-step verification","staff.col.since":"Since","staff.mfa.on":"On","staff.mfa.off":"Off","staff.you":"(you)","staff.inactive":"Mailbox suspended","staff.change":"Change","staff.remove":"Revoke","staff.add":"Add staff member","staff.add.hint":"Enter the person's Zomail mailbox address (the mailbox must be active).","staff.add.address":"E-mail address","staff.add.submit":"Grant","staff.readonly":"Only a superadmin can change staff.","staff.history":"Change history","staff.history.none":"No changes yet.","staff.history.set":"{actor} made {address} {role}","staff.history.removed":"{actor} revoked {address} ({role})","staff.error.generic":"Could not complete the action ({code}).","staff.error.staff_mailbox_not_found":"No active mailbox with this address.","staff.error.staff_self":"You cannot change your own role.","staff.error.staff_last_superadmin":"There must always be at least one superadmin.","staff.error.staff_not_operator_tenant":"Staff roles are only for mailboxes of the organisation that operates Zomail (never a customer's mailbox).","staff.error.staff_not_found":"This person is not staff.","staff.error.forbidden":"Only a superadmin can change staff.","staff.error.validation_error":"Invalid e-mail address or role.","staff.role.compliance":"Compliance (legal)","staff.role_desc.compliance":"Every customer's compliance archive (settings, legal holds, search and export) and the platform-wide audit log — no mail flow, infrastructure or billing.","rp.back":"Back to {folder}","rp.archive":"Archive","rp.move_inbox":"Move to Inbox","rp.restore":"Restore","rp.spam":"Report spam","rp.not_spam":"Not spam","rp.delete":"Delete","rp.delete_forever":"Delete forever","rp.unread":"Mark as unread","rp.snooze":"Snooze","rp.add_task":"Add to Tasks","rp.move_to":"Move to","rp.labels":"Labels","rp.more":"More","rp.position":"{index} of {total}","rp.newer":"Newer","rp.older":"Older","rp.print":"Print all","rp.popout":"Open in a new window","rp.expand_all":"Expand all","rp.external":"External","rp.to_me":"me","rp.to_line":"to {recipients}","rp.and_more":"and {count} more","rp.details":"Show details","rp.d.from":"from:","rp.d.reply_to":"reply-to:","rp.d.to":"to:","rp.d.cc":"cc:","rp.d.date":"date:","rp.d.subject":"subject:","rp.d.mailed_by":"mailed-by:","rp.d.signed_by":"signed-by:","rp.d.security":"security:","rp.d.tls":"Standard encryption (TLS)","rp.d.no_tls":"Not encrypted","rp.d.internal":"Internal message on this platform","rp.reply":"Reply","rp.reply_all":"Reply all","rp.forward":"Forward","rp.star":"Star","rp.unstar":"Unstar","rp.menu.reply":"Reply","rp.menu.reply_all":"Reply all","rp.menu.forward":"Forward","rp.menu.filter":"Filter messages like this","rp.menu.print":"Print","rp.menu.delete":"Delete this message","rp.menu.block":"Block \"{sender}\"","rp.menu.phishing":"Report phishing","rp.menu.original":"Show original","rp.menu.download":"Download message (.eml)","rp.menu.unread":"Mark as unread","rp.menu.mute":"Mute conversation","rp.menu.snooze":"Snooze until","rp.menu.snooze_go":"Snooze","rp.move.go":"Move","rp.thread.count":"{count} messages in this conversation","rp.thread.open":"Open this message","rp.attachments.one":"{count} attachment","rp.attachments.other":"{count} attachments","rp.attachment.download":"Download","rp.attachment.drive":"Save to Drive","rp.summary":"Summarize this email","rp.task_added":"Added to Tasks.","rp.task_exists":"This message is already in Tasks.","rp.task_failed":"Could not add it to Tasks.","rp.shortcuts":"Keyboard shortcuts","rp.shortcuts.title":"Reading shortcuts","rp.sc.jk":"Older / newer message","rp.sc.u":"Back to the list","rp.sc.e":"Archive","rp.sc.hash":"Delete","rp.sc.bang":"Report spam","rp.sc.r":"Reply","rp.sc.a":"Reply all","rp.sc.f":"Forward","rp.sc.s":"Star / unstar","rp.sc.shift_u":"Mark as unread","rp.sc.p":"Print","rp.sc.help":"Show this help","rp.close":"Close","logs.nav":"Logs","logs.title":"Log search","logs.lead":"Every service's log on every server in one place. Passwords, tokens and cookies are removed before storage; every search is recorded in the audit log.","logs.q":"Text","logs.q_ph":"e.g. an e-mail address, Message-ID, ECONNREFUSED","logs.service":"Service","logs.node":"Server","logs.level":"Level","logs.range":"Within","logs.all":"All","logs.level.error":"Errors","logs.level.warn":"Warnings and errors","logs.level.info":"Info","logs.level.debug":"Debug","logs.range.15m":"15 minutes","logs.range.1h":"1 hour","logs.range.6h":"6 hours","logs.range.24h":"24 hours","logs.range.7d":"7 days","logs.search":"Search","logs.live":"Auto-refresh (5 s)","logs.more":"Load older lines","logs.count":"{count} lines, newest first","logs.none":"No log line matches.","logs.filter_hint":"Click a service or server name to filter by it.","logs.error.logs_unavailable":"No central log store yet (LOKI_URL). Cluster installs include it; development: run infra/logs-lab.","logs.error.logs_query_failed":"The log store did not answer. Check the loki service on the control node.","logs.error.validation_error":"Invalid filter.","logs.error.generic":"Search failed ({code}).","ops.pb.action.logs":"View error logs","dlv.nav":"Inbox or spam","dlv.eyebrow":"Deliverability","dlv.title":"Inbox or spam","dlv.lead":"The platform regularly sends test messages to seed mailboxes at Gmail, Outlook, Yahoo… then signs in and reads them back: Inbox, a promotions tab, Spam, or missing. Plus spam complaint reports, Microsoft SNDS and Google Postmaster.","dlv.run_now":"Check now","dlv.summary":"Summary","dlv.summary.inbox_rate":"Reached the inbox (7 days)","dlv.summary.probes":"{count} test messages","dlv.summary.seeds":"Active seed mailboxes","dlv.summary.last_round":"Last round: {time}","dlv.summary.complaints":"Spam complaints","dlv.summary.days":"Last {days} days","dlv.summary.snds":"Green IPs (SNDS)","dlv.summary.green_ips":"According to Microsoft","dlv.not_configured":"Not configured","dlv.configured":"Configured","dlv.never":"never","dlv.external_error":"The last SNDS/Postmaster fetch failed: {error}","dlv.provider.gmail":"Gmail","dlv.provider.outlook":"Outlook / Hotmail","dlv.provider.yahoo":"Yahoo","dlv.provider.other":"Other provider","dlv.status.inbox":"Inbox","dlv.status.category":"Inbox — {tab} tab","dlv.status.category_short":"Other tab","dlv.status.spam":"Spam","dlv.status.missing":"Missing","dlv.status.sent":"Waiting to be read back","dlv.status.error":"Error","dlv.placement.title":"Inbox placement by provider","dlv.placement.lead":"Last 7 days. \"Other tab\" means Gmail filed it under Promotions/Social/Updates — delivered, but read less.","dlv.placement.none":"No results yet. Add seed mailboxes below; the first results arrive after a few minutes.","dlv.placement.aria":"Inbox {inbox}, other tab {category}, spam {spam}, missing {missing}","dlv.seeds.title":"Seed mailboxes","dlv.seeds.lead":"Create a few dedicated mailboxes at Gmail, Outlook and Yahoo just for test messages (not personal mailboxes). Test messages are deleted right after they are read.","dlv.seeds.none":"No seed mailboxes yet.","dlv.seeds.mailbox":"Mailbox","dlv.seeds.history":"Recent checks","dlv.seeds.last":"Latest result","dlv.seeds.auth":"Receiver's verdict","dlv.seeds.actions":"Actions","dlv.seeds.paused":"paused","dlv.seeds.login_error":"Cannot sign in: {error}","dlv.seeds.latency":"arrived after {seconds} s","dlv.seeds.pause":"Pause","dlv.seeds.enable":"Resume","dlv.seeds.delete":"Delete","dlv.seeds.delete_confirm":"Delete the seed mailbox {address} and its check history?","dlv.seeds.add":"Add seed mailbox","dlv.seeds.add_hint":"Use an app password, not the sign-in password:\n• Gmail: turn on 2-Step Verification → myaccount.google.com/apppasswords.\n• Yahoo: Account security → Generate app password.\n• Outlook.com: Security → Advanced security options → App passwords.\nThe platform signs in before saving; the password is encrypted and never shown again.","dlv.seeds.provider":"Provider","dlv.seeds.address":"Email address","dlv.seeds.password":"App password","dlv.seeds.advanced":"Other IMAP server (optional)","dlv.seeds.advanced_hint":"Only needed for \"Other provider\" or when the username differs from the address.","dlv.seeds.imap_host":"IMAP server","dlv.seeds.imap_port":"Port","dlv.seeds.security":"Encryption","dlv.seeds.username":"Username","dlv.seeds.username_ph":"Defaults to the email address","dlv.seeds.save":"Test sign-in & save","dlv.complaints.title":"\"Report spam\" complaints","dlv.complaints.lead":"When a recipient at Yahoo, Outlook… clicks \"Report spam\", the provider sends us a report (feedback loop). Above 0.1% is a concern; above 0.3% gets mail blocked.","dlv.complaints.address":"Report address: {address} — register it with the Yahoo Complaint Feedback Loop and Microsoft JMRP.","dlv.complaints.no_address":"No report address set (FBL_REPORT_ADDRESS on the inbound gateway). Without it no complaints are received.","dlv.complaints.none":"No complaints in the last 30 days.","dlv.complaints.tenant":"Customer","dlv.complaints.count":"Complaints","dlv.complaints.sent":"Messages sent","dlv.complaints.rate":"Rate","dlv.complaints.unknown":"Unknown (domain not hosted here)","dlv.snds.title":"Microsoft SNDS","dlv.snds.lead":"Microsoft rates each sending IP: green (good), yellow (some spam), red (mostly spam). Updated daily.","dlv.snds.setup":"Not connected. Register the IPs at sendersupport.olc.protection.outlook.com/snds, enable \"Automated Data Access\" and paste the key in Settings below.","dlv.snds.none":"No data yet (last fetch: {time}). IPs that send little mail to Outlook may have no figures.","dlv.snds.result":"Rating","dlv.snds.complaints":"Complaint rate","dlv.snds.traps":"Spam traps","dlv.snds.recipients":"Recipients","dlv.snds.green":"Green","dlv.snds.yellow":"Yellow","dlv.snds.red":"Red","dlv.snds.unknown":"Unknown","dlv.snds.blocked":"Blocked","dlv.postmaster.title":"Google Postmaster Tools","dlv.postmaster.lead":"Gmail rates the sending domain's reputation and the user-reported spam rate. Figures only appear with enough daily Gmail volume.","dlv.postmaster.setup":"Not connected. Verify the domain at postmaster.google.com, create an OAuth client (Postmaster Tools API, postmaster.readonly scope) and fill in Settings.","dlv.postmaster.none":"No data yet (last fetch: {time}).","dlv.postmaster.domain":"Domain","dlv.postmaster.reputation":"Reputation","dlv.postmaster.spam":"User-reported spam","dlv.rep.high":"High","dlv.rep.medium":"Medium","dlv.rep.low":"Low","dlv.rep.bad":"Bad","dlv.rep.unknown":"Unknown","dlv.settings.title":"Settings","dlv.settings.lead":"Keys are encrypted and never shown again. Leave a field empty to keep the stored key.","dlv.settings.interval":"Send test messages","dlv.settings.every_hours":"Every {hours} h","dlv.settings.every_minutes":"Every {minutes} min","dlv.settings.snds":"Microsoft SNDS","dlv.settings.snds_hint":"The key under SNDS \"Automated Data Access\".","dlv.settings.snds_key":"Access key","dlv.settings.postmaster":"Google Postmaster Tools","dlv.settings.postmaster_hint":"A Google Cloud OAuth client (Gmail Postmaster Tools API enabled) and a refresh token of the account that verified the domains.","dlv.settings.client_id":"Client ID","dlv.settings.client_secret":"Client secret","dlv.settings.refresh_token":"Refresh token","dlv.settings.keep":"•••••• (unchanged)","dlv.settings.clear":"Remove this connection","dlv.settings.save":"Save settings","dlv.notice.seed_added":"Signed in successfully and saved the seed mailbox. The first test message goes out within a minute.","dlv.notice.seed_enabled":"Seed mailbox resumed.","dlv.notice.seed_paused":"Seed mailbox paused.","dlv.notice.seed_deleted":"Seed mailbox deleted.","dlv.notice.settings_saved":"Settings saved.","dlv.notice.run_queued":"Check requested: test messages go out within a minute, results follow after about 3–5 minutes.","dlv.error.seed_login_failed":"Could not sign in to the seed mailbox ({reason}). Check the app password and that IMAP is enabled.","dlv.error.validation_error":"Some details are not valid, please check them.","dlv.error.forbidden":"Your account can view this page but not change it.","dlv.error.deliverability_unavailable":"This feature is not enabled on the server.","dlv.error.not_found":"Seed mailbox not found (it may have been deleted).","dlv.error.generic":"Something went wrong ({code}).","ops.pb.action.deliverability":"Open inbox/spam page","ops.alert.deliverability.spam":"Test messages to {provider} ({address}) went to spam {count} times in a row","ops.alert.deliverability.missing":"Test messages to {provider} ({address}) did not arrive {count} times in a row","ops.alert.deliverability.auth":"{provider} fails {failing} for our mail","ops.alert.deliverability.seed":"Cannot sign in to seed mailbox {address}","ops.alert.deliverability.complaints":"Customer {tenant}: {complaints} spam complaints in 7 days (rate {rate})","ops.alert.deliverability.snds":"Microsoft SNDS: IP {ip} rated {result}","ops.alert.deliverability.reputation":"Gmail: domain {domain} reputation is {reputation}, spam rate {spamRate}","ops.pb.deliverability.spam.cause":"The provider treats mail from the platform as spam: IP/domain reputation dropped, SPF/DKIM/DMARC fail, or a customer sending spam is hurting the shared reputation.","ops.pb.deliverability.spam.impact":"Customers' mail to this provider probably lands in spam too — recipients don't see it and customers will report \"nobody gets my mail\".","ops.pb.deliverability.spam.steps":"Open the inbox/spam page: check \"Receiver's verdict\" — if SPF/DKIM/DMARC fail, fix DNS first.\nCheck blocklists, SNDS, Postmaster and complaints per customer: find who is sending spam and hold that mailbox's outgoing mail.\nIf only one provider is affected: route mail to it through a relay/IP with a better reputation (Relays page).\nAfter fixing, click \"Check now\" to confirm mail reaches the inbox.","ops.pb.deliverability.missing.cause":"The test message did not reach the seed within an hour: rejected or silently dropped by the provider, stuck in the queue, or the relay cannot send.","ops.pb.deliverability.missing.impact":"Customers' mail to this provider may be delayed or lost.","ops.pb.deliverability.missing.steps":"Open the queue and message trace: find the message to the seed address and read the error.\nIf rejected: read the reason (providers usually include a help link) and check blocklists.\nIf still queued: check relays and workers.\nIf delivered but not found: the provider dropped it silently — treat it as a reputation problem (SNDS/Postmaster).","ops.pb.deliverability.auth.cause":"The receiver reports SPF, DKIM or DMARC failing for platform mail: wrong/missing DNS records, a rotated DKIM key not yet in DNS, or a relay missing from SPF.","ops.pb.deliverability.auth.impact":"Mail is more likely to land in spam or be rejected, especially at Gmail/Yahoo (authentication required since 2024).","ops.pb.deliverability.auth.steps":"See \"Receiver's verdict\" on the inbox/spam page for which method fails.\nSPF: add the IPs/relays in use to the platform domain's SPF record.\nDKIM: check the current selector record is published.\nDMARC: needs SPF or DKIM to pass and align with the From domain.\nClick \"Check now\" after fixing DNS (allow for DNS propagation).","ops.pb.deliverability.seed.cause":"The platform cannot sign in to the seed mailbox: app password revoked, account locked or asking for verification, or IMAP disabled.","ops.pb.deliverability.seed.impact":"Inbox placement for this provider is not measured. Customer mail is not affected.","ops.pb.deliverability.seed.steps":"Sign in to the seed mailbox in a browser and complete any verification.\nCreate a new app password, then add the mailbox again with the same address on the inbox/spam page (it replaces the old one).\nIf no longer needed: pause or delete the seed mailbox.","ops.pb.deliverability.complaints.cause":"Recipients click \"Report spam\" on this customer's mail more than the safe level (0.1%): marketing to bought/stale lists, no unsubscribe link, or a compromised account sending spam.","ops.pb.deliverability.complaints.impact":"Lowers the shared IP and domain reputation — other customers' mail lands in spam more easily. Above 0.3% Gmail/Yahoo start blocking.","ops.pb.deliverability.complaints.steps":"Open the customer and trace recent outgoing mail: who sent it, to whom, what content.\nIf an account is compromised: hold outgoing mail, reset the password, revoke sessions.\nIf it is bulk marketing: ask the customer to use an email marketing service with unsubscribe.\nConsider moving the customer to a dedicated relay pool so others are not affected.","ops.pb.deliverability.snds.cause":"Microsoft rates most mail from this IP as spam (yellow/red) or has blocked the IP, usually because of high complaints or spam-trap hits.","ops.pb.deliverability.snds.impact":"Mail to Outlook/Hotmail/Live from this IP goes to Junk or is rejected.","ops.pb.deliverability.snds.steps":"Find the spam source first: complaints per customer, unusual mailbox alerts, trace outgoing mail through this IP.\nTemporarily route mail to Microsoft through another relay/IP.\nIf the IP is blocked: request delisting at sender.office.com once the source is stopped.\nWatch SNDS for a few days until it turns green again.","ops.pb.deliverability.reputation.cause":"Google Postmaster shows low/bad domain reputation or a high user-reported spam rate.","ops.pb.deliverability.reputation.impact":"Gmail files this domain's mail as spam or rejects it; affects all mail to Gmail.","ops.pb.deliverability.reputation.steps":"Review complaints per customer and Gmail test messages on the inbox/spam page.\nStop spam sources first, then slow down sending to Gmail.\nMake sure SPF, DKIM and DMARC pass; marketing mail needs one-click unsubscribe.\nReputation usually recovers within days to weeks once the spam rate stays under 0.1%.","report.nav":"Weekly report","report.title":"Weekly operations report","report.lead":"Every Monday morning last week's figures go to the operations team's Telegram channels ({zone} time). Preview them here or send now.","report.send_now":"Send to Telegram now (last 7 days)","report.channels":"Goes to {count} Telegram channel(s)","report.no_channels":"No Telegram channel yet","report.no_channels_hint":"No platform Telegram channel yet — add one in","report.sent":"Report sent to {reached} channel(s) ({failed} failed).","report.period_label":"Period","report.tab.week":"Last week (Monday → Sunday)","report.tab.7d":"Last 7 days","report.period":"{from} to {to}","report.summary":"Summary","report.stat.sent":"Mail sent","report.stat.delivered":"Delivered {percent}","report.stat.received":"Mail received","report.stat.junk":"{count} to spam","report.stat.alerts":"Alerts raised","report.stat.critical":"{count} critical","report.stat.inbox":"Probes in inbox","report.stat.probes":"{count} probes","report.section.mail":"Mail","report.section.alerts":"Alerts","report.section.uptime":"Uptime","report.section.other":"Deliverability, backups, growth","report.row.delivered":"Delivered","report.row.failed":"Failed (sender notified)","report.row.deferred":"Deferred, retrying","report.row.rejected":"Inbound rejected","report.row.virus":"Inbound with a virus","report.row.queue":"Queue now","report.row.queue_value":"{count} messages, oldest {minutes} min","report.row.queue_empty":"Empty","report.row.raised":"Raised","report.row.raised_value":"{critical} critical, {warning} warning","report.row.resolved":"Resolved","report.row.mtta":"Time to acknowledge (median)","report.row.mttr":"Time to resolve (median)","report.row.open":"Open","report.row.open_value":"{open} ({critical} critical)","report.row.top":"Most frequent","report.minutes":"{count} min","report.uptime_hint":"From the status page's per-minute samples; partial outages count as outages.","report.uptime_none":"No status page data yet","report.outage":"{minutes} min outage","report.row.probes":"Probes (inbox / spam / missing)","report.row.probes_value":"{inbox} / {spam} / {missing}","report.row.complaints":"Spam complaints (FBL)","report.row.backups":"Backups (succeeded / failed)","report.row.backups_value":"{succeeded} / {failed}","report.row.last_backup":"Last successful backup","report.row.customers":"Customers (new)","report.row.mailboxes":"Active mailboxes (new)","report.row.storage":"Mail storage","report.history":"Sent","report.history_hint":"Reports sent automatically or by hand.","report.history_none":"No report sent yet.","report.col.sent":"Sent at","report.col.period":"Period","report.col.trigger":"How","report.col.channels":"Channels","report.col.channels_value":"{reached} reached, {failed} failed","report.trigger.schedule":"Automatic","report.trigger.manual":"Manual ({by})","report.error.no_telegram_channel":"There is no platform Telegram channel to send to.","report.error.report_unavailable":"The weekly report is not available on this server.","report.error.forbidden":"Only Zomail operations staff can view or send the report.","report.error.generic":"Could not complete the action ({code}).","report.family.abuse":"Abuse","report.family.archive":"Archive","report.family.backup":"Backups","report.family.billing":"Billing","report.family.blocklist":"Blocklists","report.family.db":"Database","report.family.deliverability":"Inbox placement","report.family.delivery":"Delivery","report.family.dmarc":"DMARC","report.family.dns":"DNS","report.family.inbound":"Inbound","report.family.mailha":"Mailbox HA","report.family.node":"Servers","report.family.platform":"Platform","report.family.queue":"Queue","report.family.relay":"Relays","report.family.security":"Security","report.family.site":"Private Server","report.family.status":"Status page","report.family.storage":"Storage","report.family.tls":"TLS certificates","console.eyebrow":"Admin console","console.section.manage":"Manage your organisation","console.section.platform":"Zomail platform","console.action.add":"Add","console.action.add_user":"Add user","console.action.add_domain":"Add domain","console.card.users.title":"Users","console.card.users.desc":"Email accounts, passwords, storage, suspension.","console.card.domains.title":"Domains","console.card.domains.desc":"Verification, DNS records, DKIM (verified / total).","console.card.admins.title":"Administrators","console.card.admins.desc":"Who administers: owners, administrators, helpdesk.","console.card.groups.title":"Groups & aliases","console.card.groups.desc":"Group addresses, forwarding, catch-all.","console.card.drive.title":"Drive & storage","console.card.drive.desc":"Mail and Drive storage, external sharing.","console.card.migration.title":"Data migration","console.card.migration.desc":"Move mail from an old server, Google or Microsoft.","console.card.trace.title":"Message trace","console.card.trace.desc":"Where a message went, why it was blocked or late.","console.card.archive.title":"Archive & eDiscovery","console.card.archive.desc":"Retention policies, legal search.","console.card.backups.title":"Backups","console.card.backups.desc":"Backups and mailbox restores.","console.card.dmarc.title":"DMARC reports","console.card.dmarc.desc":"Who sends mail in your domain's name.","console.card.ops.title":"Alerts & operations","console.card.ops.desc":"Service health, open alerts.","console.card.billing.title":"Billing","console.card.billing.desc":"Plan, seats, invoices.","console.card.customers.title":"Customers","console.card.customers.desc":"Businesses on Zomail Cloud and Private.","console.card.infrastructure.title":"Infrastructure","console.card.infrastructure.desc":"Servers, mail shards, storage, databases.","console.card.sites.title":"Private Servers","console.card.sites.desc":"Customers' own servers, licences, updates.","console.card.usage.title":"Usage report","console.card.usage.desc":"Seats and storage sold versus used.","console.card.queue.title":"Mail queue","console.card.queue.desc":"Messages waiting, retrying, failed.","console.card.relays.title":"Sending relays","console.card.relays.desc":"Outbound IPs and providers.","console.card.deliverability.title":"Deliverability","console.card.deliverability.desc":"IP reputation, blocklists, Gmail/Outlook feedback.","console.card.logs.title":"System logs","console.card.logs.desc":"Search the logs of every service.","console.card.status.title":"Status page","console.card.status.desc":"Incident notices for customers.","console.card.report.title":"Weekly report","console.card.report.desc":"Operations figures sent to Telegram.","console.card.signups.title":"Sign-ups","console.card.signups.desc":"Self-service sign-ups awaiting review.","console.card.staff.title":"Zomail staff","console.card.staff.desc":"Permissions of the operations and support team.","console.users.title":"Users","console.users.lead":"{count} email accounts. Open one to reset its password, change its storage or suspend it.","console.users.search":"Search by name or email address","console.users.all_domains":"All domains","console.users.filter":"Filter","console.users.truncated":"Showing the first {count} domains — pick a domain to see all of it.","console.users.no_match":"No user matches","console.users.empty":"No users yet","console.users.empty.hint":"Add the first user in the panel alongside.","console.users.no_ready_domain":"A verified domain is needed to create accounts.","console.copy":"Copy","console.copied":"Copied","console.copy_address":"Copy address","console.copy_password":"Copy password","console.password.generate":"Generate a random password","console.password.show":"Show password","console.password.hide":"Hide password","console.password.hint":"At least {min} characters. The user changes it after the first sign-in.","console.credentials.title":"Account ready — send these details to the user","console.credentials.address":"Address","console.credentials.password":"Password","console.credentials.copy_both":"Copy both","console.credentials.note":"The password is shown only this once. Sign in on the web mail page.","console.create_admin.title":"Create a new administrator account","console.create_admin.hint":"Creates the mailbox and grants the administrator role in one step.","console.create_admin.no_domain":"Verify a domain first, then accounts can be created.","console.create_admin.submit":"Create administrator","console.onboarding.admin":"Customer's administrator account","console.onboarding.admin_hint":"This person manages the company's users, domains and permissions (owner role).","console.onboarding.admin_address":"Sign-in address","console.onboarding.your_domain":"domain","console.onboarding.admin_name_placeholder":"Administrator","console.onboarding.admin_note":"The account is created automatically as soon as the domain is verified. The password is shown only this once.","adminui.success.create-admin":"Administrator account created.","console.autoverify":"No need to click: the record is checked automatically (every minute during the first hour, then less often) and the domain is verified as soon as it appears. Click \"Check DNS\" to check now.","usersbulk.nav":"Create from CSV","usersbulk.title":"Create mailboxes from CSV","usersbulk.lead":"Preview every row first, then create. The plan's seats, licence and storage apply in file order; every row gets its own result.","usersbulk.pick_tenant":"Customer","usersbulk.pick_tenant.submit":"Continue","usersbulk.for_tenant":"Creating for customer: {tenant}.","usersbulk.change_tenant":"Change customer","usersbulk.columns":"Columns (header row optional, comma or semicolon): address, display_name, quota_mb, password, locale (vi/en), notify_email. Only address is required; at most 200 rows per run.","usersbulk.file":"CSV file","usersbulk.text":"Or paste the CSV","usersbulk.default_quota":"Default quota","usersbulk.default_locale":"Default language","usersbulk.welcome":"Send a welcome mail (to the new mailbox and to notify_email when given; it never contains the password)","usersbulk.passwords_note":"Empty password: a strong initial password is generated and shown ONCE after creation (download the result CSV right away). Give each person their password through a separate channel, not by email.","usersbulk.preview":"Preview","usersbulk.create.one":"Create {count} mailbox","usersbulk.create.other":"Create {count} mailboxes","usersbulk.create_hint":"Create uses exactly the content just previewed (unless you choose a new file). Rows with errors are skipped.","usersbulk.empty":"Choose a CSV file or paste its content.","usersbulk.previewed":"Preview: {ok} rows can be created, {errors} rows have errors.","usersbulk.created.one":"Created {count} mailbox.","usersbulk.created.other":"Created {count} mailboxes.","usersbulk.none_created":"No mailbox was created — see each row's reason.","usersbulk.preview.title":"Preview","usersbulk.result.title":"Result","usersbulk.seats":"Seats in use: {used}/{limit} (before this run).","usersbulk.download":"Download result CSV (with initial passwords)","usersbulk.download_once":"Initial passwords are shown here once only: download the CSV now and keep it safe. Reloading the page loses them.","usersbulk.col.address":"Address","usersbulk.col.result":"Result","usersbulk.col.password":"Initial password","usersbulk.status.ok":"Can be created (password from the file)","usersbulk.status.ok_generated":"Can be created (password will be generated)","usersbulk.status.created":"Created","usersbulk.error.generic":"That did not work. Try again later.","usersbulk.error.bulk_rate_limited":"Too many bulk runs in an hour. Wait and try again.","usersbulk.error.tenant_suspended":"The customer's account is suspended (unpaid): no new mailboxes.","usersbulk.error.no_mailboxes_created":"No mailbox was created — see each row's reason.","usersbulk.row.too_many_rows":"More than 200 rows — split the file","usersbulk.row.invalid_address":"Invalid address","usersbulk.row.invalid_display_name":"Display name too long (120 characters max)","usersbulk.row.invalid_quota":"Quota must be 256–102400 MB","usersbulk.row.password_too_short":"Password must be 12–128 characters (or empty to generate one)","usersbulk.row.password_too_weak":"Password too easy to guess (mix upper/lower case, digits and symbols; or leave empty to generate one)","usersbulk.row.password_contains_name":"Password must not contain the user's name or address","usersbulk.row.invalid_locale":"Language must be vi or en","usersbulk.row.invalid_notify_email":"Invalid notify_email (or the same as the new address)","usersbulk.row.domain_not_found":"The domain does not belong to this customer","usersbulk.row.domain_not_ready":"The domain is not verified yet","usersbulk.row.duplicate_in_file":"Same as a row above","usersbulk.row.mailbox_conflict":"The address already exists","usersbulk.row.seat_limit_reached":"No seat left in the plan","usersbulk.row.storage_limit_reached":"No mail storage left in the plan","usersbulk.row.licence_mailbox_cap":"Beyond the licence's mailbox count","usersbulk.row.licence_expired":"The licence has expired","usersbulk.row.licence_revoked":"The licence was revoked","usersbulk.row.tenant_suspended":"The customer's account is suspended","usersbulk.row.no_capacity":"No mail server has room","usersbulk.row.validation_error":"Invalid row","console.card.audit.title":"Audit log","console.card.audit.desc":"Who did what, for which customer, when — filter and export CSV.","auditlog.title":"Audit log","auditlog.lead.platform":"Every administrative action on the platform: customers' and Zomail staff's (servers, backups, roles, secrets).","auditlog.lead.customers":"Every administrative action inside customers. Platform-level events (servers, roles, secrets) are for superadmins, operators and compliance staff.","auditlog.export":"Export CSV (filtered)","auditlog.tenant":"Customer","auditlog.tenant.all":"All","auditlog.tenant.platform":"Platform (no customer)","auditlog.actor":"Actor","auditlog.action":"Action","auditlog.action.hint":"An exact name (mailbox.mfa_reset) or a prefix ending with a dot (mailbox.)","auditlog.from":"From","auditlog.to":"To","auditlog.search":"Filter","auditlog.clear":"Clear","auditlog.count.one":"{count} event","auditlog.count.other":"{count} events","auditlog.hint":"Newest first. Click a customer, actor or action to filter by it.","auditlog.none":"No event matches the filter.","auditlog.more":"Older →","auditlog.details":"Details","auditlog.col.time":"Time","auditlog.col.customer":"Customer","auditlog.col.actor":"Actor","auditlog.col.action":"Action","auditlog.col.target":"Target","auditlog.col.details":"Details","auditlog.error.generic":"Could not load the audit log ({code}).","auditlog.error.validation_error":"Invalid filter (an action has letters, digits, dots and dashes only).","auditlog.error.audit_platform_forbidden":"Platform-level events are for superadmins, operators and compliance staff.","auditlog.error.audit_unavailable":"The API server has no audit database connected.","aix.proofread":"Check spelling","aix.proofread.clean":"No spelling or grammar mistakes found.","aix.proofread.changes":"{count} corrections","aix.proofread.apply":"Apply the corrections","aix.translate_to":"Translate to","aix.translate":"Translate","aix.translated":"{language} translation","aix.translated_from":"from {language}","aix.show_original":"Show original","aix.lang.vi":"Vietnamese","aix.lang.en":"English","aix.lang.zh":"Chinese","aix.lang.ja":"Japanese","aix.lang.ko":"Korean","aix.lang.fr":"French","aix.lang.de":"German","aix.lang.es":"Spanish","aix.lang.th":"Thai","aix.lang.id":"Indonesian","aix.lang.ru":"Russian","aix.lang.lo":"Lao","aix.lang.km":"Khmer","ai.error.ai_provider_error":"The AI provider returned an error. An administrator should check the API key in Admin → AI.","sendx.error.ai_provider_error":"The AI provider returned an error. An administrator should check the API key in Admin → AI.","console.card.ai.title":"AI assistant","console.card.ai.desc":"Providers, API keys, the cheapest model, cost.","aiadmin.title":"AI assistant","aiadmin.lead":"Choose the providers and models for summaries, writing, spelling and translation. Mail is only sent to a provider for customers who turned AI on.","aiadmin.lead.private":"Private server: mail only goes to the provider and API key your company chooses. A self-hosted model (Ollama) keeps the data on your server.","aiadmin.unavailable":"DKIM_ENCRYPTION_KEY is not set on this server, so API keys cannot be stored.","aiadmin.none":"AI is not working yet: there is no model. Add at least one model to a provider below (an API key alone is not enough). If the server has an Anthropic key in its configuration, the assistant uses it.","aiadmin.provider.no_models":"This provider has no model, so it is not used. Add one below (the model name from the provider's page, prices in USD per million tokens), then press “Test”.","aiadmin.providers":"Providers and models","aiadmin.providers.hint":"API keys are encrypted and never shown again (last 4 characters only). Prices are USD per million tokens.","aiadmin.key":"key {hint}","aiadmin.disabled":"Disabled","aiadmin.enable":"Enable","aiadmin.disable":"Disable","aiadmin.delete":"Delete","aiadmin.delete_provider.confirm":"Delete the provider {name} and all its models?","aiadmin.delete_model.confirm":"Delete the model {model}?","aiadmin.cheapest":"Cheapest","aiadmin.add_model":"Add a model","aiadmin.model.label":"Display name (optional)","aiadmin.json.object":"JSON object (DeepSeek, Groq, Ollama…)","aiadmin.json.schema":"JSON Schema (OpenAI, Gemini, OpenRouter)","aiadmin.price_hint":"Enter the prices from the provider's pricing page (they change over time). Self-hosted models: 0.","aiadmin.replace_key":"Replace the API key","aiadmin.add_provider":"Add a provider","aiadmin.provider.preset":"Provider","aiadmin.provider.custom":"Other (OpenAI-compatible API)","aiadmin.provider.name":"Name","aiadmin.provider.base_url":"API address","aiadmin.provider.key":"API key","aiadmin.provider.key_hint":"Get the key from the provider's console. Then add a model and click \"Test\".","aiadmin.provider.example":"Example model: {model}.","aiadmin.test":"Test","aiadmin.testing":"Testing…","aiadmin.test.ok":"Works · {ms} ms","aiadmin.test.failed":"Error: {error}","aiadmin.routes":"Which model does what","aiadmin.routes.hint":"\"Automatic\" uses the cheapest enabled model. When a provider fails or is overloaded, the next model (cheapest first) takes over.","aiadmin.auto":"Automatic — cheapest","aiadmin.auto_with":"Automatic — cheapest (now {model})","aiadmin.save":"Save","aiadmin.feature.summarize":"Summaries","aiadmin.feature.draft_reply":"Reply drafts","aiadmin.feature.smart_reply":"Quick replies","aiadmin.feature.brief":"Inbox brief","aiadmin.feature.compose_write":"Writing a new message","aiadmin.feature.compose_rewrite":"Rewriting a draft","aiadmin.feature.proofread":"Spelling check","aiadmin.feature.translate":"Translation","aiadmin.usage":"Last 30 days","aiadmin.usage.hint":"Estimated cost at the prices entered: {total}.","aiadmin.usage.empty":"No AI request in the last 30 days.","aiadmin.failed":"{count} failed","aiadmin.col.model":"Model","aiadmin.col.price_in":"Input / 1M tokens (USD)","aiadmin.col.price_out":"Output / 1M tokens (USD)","aiadmin.col.json":"JSON mode","aiadmin.col.feature":"Feature","aiadmin.col.requests":"Requests","aiadmin.col.tokens":"Tokens in / out","aiadmin.col.cost":"Cost","aiadmin.error.ai_key_unreadable":"The stored API key cannot be decrypted (server encryption key changed?) — enter the provider's API key again.","adminui.success.ai-add-provider":"Provider added. Add a model, then click \"Test\".","adminui.success.ai-provider":"Provider updated.","adminui.success.ai-delete-provider":"Provider deleted.","adminui.success.ai-add-model":"Model added.","adminui.success.ai-model":"Model updated.","adminui.success.ai-delete-model":"Model deleted.","adminui.success.ai-route":"Saved.","adminui.error.ai_base_url_required":"An OpenAI-compatible provider needs its API address.","adminui.error.ai_model_exists":"This model is already listed.","adminui.error.ai_provider_not_found":"Provider not found.","adminui.error.ai_model_not_found":"Model not found.","adminui.error.ai_feature_unknown":"Unknown feature.","adminui.error.ai_config_unavailable":"DKIM_ENCRYPTION_KEY is not set on this server, so API keys cannot be stored.","adminui.mailbox_status.deleted":"Deleted","adminui.success.delete-mailbox":"Mailbox deleted. It can be restored under Users → Deleted users.","adminui.success.restore-mailbox":"Mailbox restored — the user signs in again with the same password.","adminui.success.purge-mailbox":"The mailbox will be permanently deleted within a few minutes.","adminui.error.cannot_delete_self":"You cannot delete your own mailbox.","adminui.error.mailbox_not_deletable":"Only an active or suspended mailbox can be deleted.","adminui.error.mailbox_not_in_trash":"The mailbox is not among the deleted ones.","adminui.error.mailbox_purging":"The mailbox is being permanently deleted and can no longer be restored.","adminui.error.mailbox_in_trash":"The mailbox is deleted — restore it before changing it.","adminui.error.confirmation_mismatch":"The address you typed does not match.","adminui.error.trash_unavailable":"Mailbox deletion is not available on this server yet.","adminui.error.restore_no_seat":"No free seat in the plan: delete another mailbox or buy more users, then restore.","trash.delete.title":"Delete mailbox","trash.delete.hint":"The user can no longer sign in or receive mail. The data is kept for {days} days so the mailbox can be restored as it was, then deleted for good.","trash.delete.self":"You cannot delete your own mailbox.","trash.delete.submit":"Delete mailbox","trash.delete.confirm":"Delete {address}? The user is signed out on every device and incoming mail bounces. Restorable for {days} days.","trash.detail.title":"This mailbox is deleted","trash.detail.lead":"Deleted {when} by {who}. Mail, Drive, aliases and roles are kept; it is permanently deleted on {purge}.","trash.restore":"Restore","trash.restore.pending":"Restoring…","trash.restore.hint":"Brings the mailbox back as it was: same password, all mail, Drive, aliases, admin roles. App passwords (Outlook, phones) must be created again.","trash.purge":"Delete permanently now","trash.purge.hint":"Deletes the mail, Drive and account now instead of at the end of the period. Cannot be undone (except from backups).","trash.purge.type_address":"Type the mailbox address to confirm","trash.purge.confirm":"Permanently delete {address}? This cannot be undone.","trash.list.title":"Deleted users","trash.list.lead":"Restorable as they were until their permanent deletion date.","trash.col.deleted":"Deleted","trash.col.purge":"Deleted for good","trash.purge_error":"Permanent deletion has not succeeded yet; it is retried.","sitedr.title":"Rebuild this server (if it dies)","sitedr.lead":"A one-line command on a new server: fetches the latest backup and rebuilds configuration, accounts, mail, calendars/contacts and Drive. Then only the host's A record changes.","sitedr.escrow":"Backup key","sitedr.escrow.yes":"Held by Zomail (encrypted), updated {at}","sitedr.escrow.no":"Not held by Zomail","sitedr.escrow.no.hint":"The server has no off-site (restic) backups yet, or the customer keeps the repository password. The rebuild command still brings the image and the registry login; append --restore-from <tar backup dir> or --restore-repo <repository> --restore-env <password file>.","sitedr.repository":"Backup repository","sitedr.last":"Last rebuild","sitedr.command.hint":"One-time code, expires after 24 hours.","sitedr.reauth.password":"Your current password","sitedr.reauth.mfa":"2-step verification code (6 digits)","sitedr.reauth.hint":"Confirm it's you: re-enter your password, or your 2-step verification code if you have it on, to confirm. Every command created is audited.","sitedr.error.reauth_required":"Confirm with your password or authenticator code.","sitedr.error.wrong_password":"The current password is incorrect.","sitedr.error.mfa_invalid_code":"The code is wrong or already used — wait for the next code","sitedr.error.forbidden":"Only a superadmin can create a rebuild command (it opens the customer's backups).","sitedr.command.create":"Create the rebuild command","sitedr.command.confirm":"This command opens the customer's backups. Create it only to rebuild the server, and give it only to whoever runs it.","sitedr.command.after":"Run it on a NEW server (Ubuntu/Debian, root). Then point the host's A record to the new IP; MX, SPF and DKIM stay.","sitedr.error.not_enrolled":"The server has not finished installing.","sitedr.error.no_backup_escrow":"Zomail does not hold this server's backup key: rebuild with --restore-from and the repository password the customer keeps.","sitebk.title":"Backup & restore","sitebk.lead":"The server backs itself up. Restoring one person's mail takes one step and never overwrites what is there.","sitebk.restore.started":"Restore started. The messages appear in a “Restored …” folder of the mailbox within a few minutes.","sitebk.health.ok":"Backups are working","sitebk.health.local_only":"Backups are only on this server","sitebk.health.stale":"No new backup for over 26 hours","sitebk.health.failed":"The last backup failed","sitebk.health.none":"No backup yet","sitebk.mode.restic":"Encrypted, hourly incremental backups to {where}.","sitebk.mode.local":"A full copy every night to {where} (7 kept).","sitebk.mode.unknown":"The server has not reported its backups yet (it will after the next backup).","sitebk.last_success":"Last successful backup","sitebk.last_attempt":"Last run","sitebk.points":"Restore points","sitebk.schedule":"Schedule","sitebk.schedule.restic":"Hourly; keeps 24 hours, 14 days, 8 weeks, 12 months","sitebk.schedule.local":"Nightly around 01:00; keeps 7","sitebk.warn.local_only":"If the disk or the server fails, the backups go with it. Add an external destination (S3 storage or a backup server) under “Backup destinations” below — backups then run hourly and can be restored hour by hour.","sitebk.warn.stale":"Check the server: sudo ./novamail-private backup-auto --now and read the error.","sitebk.restore.title":"Restore one person's mail","sitebk.restore.lead":"Pick the mailbox and the time. The messages of then are copied into a new folder “Restored <date time> UTC” of the same mailbox — nothing existing changes.","sitebk.restore.no_points":"There is no backup to restore from yet.","sitebk.restore.at_hint":"Uses the newest backup before this time. Oldest backup: {oldest}.","sitebk.restore.point":"Backup","sitebk.restore.submit":"Restore","sitebk.history":"Restore history","sitebk.col.backup":"Backup","sitebk.full.title":"Restore the whole server","sitebk.full.lead":"Rebuilding the whole server (after a failure) replaces all data, so it is not a button. Follow the operations manual, chapter Backups, or contact Zomail.","sitebk.col.site":"Backups","sitebk.fleet.ok":"Good","sitebk.fleet.local_only":"On the server only","sitebk.fleet.stale":"Overdue","sitebk.fleet.failed":"Failing","sitebk.fleet.none":"None yet","sitebk.fleet.last":"Last: {at}","sitebk.fleet.verified":"Restore tested: {at}","sitebk.fleet.unverified":"Not restore-tested in 8 days","sitebk.verified":"Restore check (weekly)","sitebk.verified.ok":"reads back","sitebk.verified.failed":"FAILED — the backup does not read back","sitebk.verified.never":"Not checked yet (runs after the next backup)","backups.error.too_many_restores":"3 restores are already running — wait for them to finish.","backups.error.restore_daily_limit":"Your organisation has run {limit} restores in the last 24 hours — try again later or contact Zomail.","backups.error.restore_in_progress":"A restore of this mailbox is still running — wait for it to finish.","backups.error.no_site_backups":"The server has no backup yet.","backups.error.no_backup_before":"There is no backup before that time.","backups.error.mailbox_not_restorable":"The mailbox is deleted — restore the account first.","backups.error.invalid_time":"The time is not valid.","backups.error.host_runner_not_responding":"The server did not pick up the restore within 30 minutes (is the watchdog timer running?).","backups.error.restore_timeout":"The restore ran for over 6 hours and is no longer tracked.","backups.error.not_private_site":"Only on a Private server.","reauth.legend":"Confirm it's you","reauth.password":"Your current password","reauth.mfa":"2-step verification code (6 digits)","reauth.hint":"High-impact action. Re-enter your password, or your 2-step verification code if you have it on, to confirm.","reauth.error.reauth_required":"This action needs you to confirm it's you: enter your current password, or your 2-step verification code if you have it on.","reauth.error.wrong_password":"The password is incorrect","reauth.error.mfa_invalid_code":"The code is wrong or already used — wait for the next code","reauth.error.reauth_throttled":"Too many failed attempts. Wait a few minutes and try again.","reauth.error.sso_reauth_required":"Your organisation signs in with SSO: click \"Sign in again to confirm\", sign in again at your identity provider, then repeat the action (within 5 minutes).","reauth.sso.hint":"Your organisation signs in with SSO, so your Zomail password cannot be used. Sign in again at your identity provider to confirm; for 5 minutes after that, high-impact actions do not ask again.","reauth.sso.button":"Sign in again to confirm","login.error.sso_required":"Your organisation signs in with its company account (SSO), not a Zomail password. Use the “Continue with…” button above.","sso.eyebrow":"Single sign-on (SSO)","sso.back_to_login":"Back to sign-in","sso.login.continue.google":"Continue with Google","sso.login.continue.microsoft":"Continue with Microsoft","sso.login.required":"Your organisation requires signing in with your {provider} account.","sso.login.or_password":"Or enter your Zomail password below.","sso.mfa.title":"2-step verification","sso.mfa.lead":"You signed in with your company account. This mailbox has 2-step verification on: enter the code from your authenticator app.","sso.mobile.title":"Back to the Zomail app","sso.mobile.lead":"Signed in. Open the Zomail app to continue.","sso.mobile.open":"Open the Zomail app","sso.error.title":"Could not sign you in","sso.error.generic":"Single sign-on did not succeed. Please try again.","sso.error.network":"Cannot reach the mail server.","sso.error.sso_state_invalid":"This sign-in expired, was already used or was started in another browser. Start again.","sso.error.sso_idp_error":"Google/Microsoft did not confirm the sign-in (perhaps you cancelled). Try again.","sso.error.sso_not_configured":"This domain does not use single sign-on — sign in with your password.","sso.error.sso_platform_app_missing":"The platform has no OAuth app for this provider yet. Use your organisation's own OAuth app.","sso.error.sso_incomplete":"The SSO settings are incomplete (client ID or client secret missing).","sso.error.sso_exchange_failed":"Google/Microsoft refused the sign-in code — check the client ID, client secret and redirect URI.","sso.error.sso_provider_unreachable":"Cannot reach Google/Microsoft. Please try again in a few minutes.","sso.error.sso_token_invalid":"The identity provider's sign-in data is not valid.","sso.error.sso_domain_not_allowed":"This account's domain does not have SSO enabled for the organisation.","sso.error.sso_mailbox_not_found":"There is no Zomail mailbox for this account yet. Contact your organisation's administrator.","sso.error.sso_reauth_mismatch":"You signed in again with a different account. Sign in again with the account you use the admin console with.","sso.error.sso_mailbox_disabled":"The mailbox is suspended — contact your administrator.","sso.error.sso_code_invalid":"The sign-in code was already used or has expired. Sign in again in the app.","sso.error.sso_redirect_not_allowed":"The app's return address is not allowed.","sso.error.sso_unavailable":"Single sign-on is not enabled on this server.","sso.error.sso_required":"Your organisation requires single sign-on.","sso.error.rate_limited":"Too many attempts. Wait a minute and try again.","sso.error.ip_blocked":"Your network is temporarily blocked after too many failed sign-ins.","sso.error.hosted_elsewhere":"This mailbox is on your company's own server.","sso.error.invalid_email":"Invalid e-mail address.","sso.error.sso_domain_not_verified":"The domain {domain} is not verified for this organisation (SSO covers verified domains only).","sso.error.sso_client_id_invalid":"The client ID has the wrong format (Google: …apps.googleusercontent.com; Microsoft: a GUID).","sso.error.sso_ms_tenant_invalid":"Enter the Microsoft Entra directory (tenant) ID (a GUID) or “organizations”. “common” is not allowed.","sso.error.sso_ms_tenant_guid_required":"Requiring SSO needs the Microsoft Entra directory (tenant) ID (a GUID), not “organizations”.","sso.error.sso_client_secret_missing":"Paste the client secret.","sso.error.sso_test_required":"Run a successful “Test” of the current settings before switching to Required.","sso.error.sso_secrets_unavailable":"The server has no encryption key (DKIM_ENCRYPTION_KEY), so the client secret cannot be stored.","sso.error.sso_auto_provision_unsupported":"Creating mailboxes on first sign-in is not available in this version.","sso.error.sso_test_result_gone":"The test result was already shown or has expired.","sso.reason.malformed":"malformed ID token","sso.reason.alg":"signing algorithm not accepted","sso.reason.signature":"invalid signature","sso.reason.unknown_key":"unknown signing key","sso.reason.issuer":"wrong issuer (iss)","sso.reason.audience":"token for another application (aud) — check the client ID","sso.reason.expired":"token expired — check the server clock","sso.reason.not_yet_valid":"token not valid yet — check the server clock","sso.reason.nonce":"nonce mismatch","sso.reason.email_unverified":"the provider did not confirm the e-mail address (or a guest account)","sso.reason.hosted_domain":"the Google account is not in the organisation's Google Workspace (hd)","sso.reason.tenant":"the account belongs to another Microsoft Entra directory (tid)","sso.test.eyebrow":"SSO test","sso.test.ok":"Connection works","sso.test.failed":"Test failed","sso.test.gone":"The test result was already shown or has expired — run the test again.","sso.test.email":"Verified e-mail","sso.test.mailbox":"Zomail mailbox","sso.test.mailbox.active":"yes, active","sso.test.mailbox.disabled":"yes, suspended","sso.test.mailbox.not_found":"none — this account will not be able to sign in","sso.test.mfa":"2-step verification","sso.test.mfa.idp":"proven at the provider (amr = mfa)","sso.test.mfa.trusted":"the provider's 2-step verification is trusted (organisation setting)","sso.test.mfa.zomail":"Zomail asks for its 2-step code (if the mailbox has it on)","sso.test.claims":"Received claims","sso.test.claims_unverified":"Received claims (signature not verified)","sso.test.close":"Close","sso.panel.title":"Security: Single sign-on (SSO)","sso.panel.hint":"Users sign in with their company Google Workspace or Microsoft 365 account.","sso.panel.open":"Configure SSO","sso.admin.back":"Back to the organisation","sso.admin.eyebrow":"Security","sso.admin.title":"Single sign-on (SSO)","sso.admin.lead":"Let users sign in to Zomail with their Google Workspace or Microsoft 365 (Entra ID) account. Existing mailboxes only.","sso.admin.status.off":"Off","sso.admin.status.optional":"On — optional","sso.admin.status.required":"On — required","sso.admin.state":"Status","sso.admin.provider":"Provider","sso.admin.domains":"Domains","sso.admin.domains.none":"The organisation has no verified domain yet.","sso.admin.domains.hint":"Only the organisation's verified domains. Users with addresses in these domains see the SSO button.","sso.admin.last_test":"Last successful test","sso.admin.last_test.value":"{when} · {who}","sso.admin.last_test.never":"Not tested yet","sso.admin.updated":"Last changed","sso.admin.test":"Test","sso.admin.test.hint":"Opens a sign-in window with the saved settings and shows what the provider sent. Nobody is signed in.","sso.admin.redirects":"What to enter at Google / Microsoft","sso.admin.redirects.hint":"Copy these exactly into the OAuth client (Google Cloud) or the app registration (Entra).","sso.admin.redirects.web":"Redirect URI (Authorized redirect URI / Web redirect URI):","sso.admin.redirects.scopes":"Scopes:","sso.admin.redirects.mobile":"Mobile app return addresses (handled by the server, not entered at Google/Microsoft):","sso.admin.settings":"Settings","sso.admin.settings.hint":"Every save asks for your password or 2-step code again. The client secret is write-only and never shown again.","sso.admin.enabled":"Enable single sign-on","sso.admin.mode":"Mode","sso.admin.mode.optional":"Optional — users choose SSO or their Zomail password","sso.admin.mode.required":"Required — no password sign-in on the web and the mobile apps; Outlook/Thunderbird/phones (IMAP/SMTP/CalDAV) use app passwords only","sso.admin.mode.tested":"The current settings passed a test: Required can be switched on.","sso.admin.mode.untested":"Run a successful “Test” of the saved settings before switching to Required.","sso.admin.app":"OAuth app","sso.admin.app.platform":"Use the Zomail platform's OAuth app","sso.admin.app.platform_missing":"not configured on the platform","sso.admin.app.own":"Use the organisation's own OAuth app (paste the client ID and client secret)","sso.admin.client_id.google":"Client ID (Google)","sso.admin.client_id.microsoft":"Application (client) ID (Microsoft)","sso.admin.client_secret":"Client secret","sso.admin.client_secret.keep":"Saved (…{hint}) — leave empty to keep it","sso.admin.client_secret.clear":"Remove the saved client secret","sso.admin.ms_tenant":"Microsoft Entra directory (tenant) ID","sso.admin.ms_tenant.hint":"The GUID in Entra admin center → Overview. Or “organizations” to accept any organisation (still only the domains above). A GUID is recommended.","sso.admin.google_hd":"Google Workspace domains (hd)","sso.admin.google_hd.hint":"Empty = the same as the domains above. Enter the Google Workspace primary domain if it differs, comma-separated.","sso.admin.trust_mfa":"Trust the provider's 2-step verification","sso.admin.trust_mfa.hint":"Turn on when your organisation enforces MFA at Google/Microsoft: Zomail does not ask for its own 2-step code after SSO, and administrators count as 2-step verified. A provider that reports amr = mfa always counts.","sso.admin.auto_provision":"Create mailboxes on first sign-in (coming in a later version)","sso.admin.save":"Save SSO settings","sso.admin.saved":"SSO settings saved.","sso.admin.deleted":"SSO settings removed.","sso.admin.delete.title":"Remove the SSO settings","sso.admin.delete.hint":"Users go back to signing in with their Zomail password. The saved client secret is deleted.","sso.admin.delete":"Remove settings","sso.admin.delete.confirm":"Remove the organisation's SSO settings? Users will sign in with their password again.","sso.platform.nav":"Platform OAuth apps (Admin → SSO)","sso.platform.title":"Platform OAuth apps","sso.platform.lead":"One Google app and one (multi-tenant) Microsoft app owned by Zomail. Organisations that choose “Use the Zomail platform's OAuth app” use these; others paste their own.","sso.platform.provider.google":"Google (OAuth client, Web application)","sso.platform.provider.microsoft":"Microsoft Entra (multi-tenant app registration)","sso.platform.client_id":"Client ID","sso.platform.client_secret":"Client secret","sso.platform.keep":"Saved (…{hint}) — leave empty to keep it","sso.platform.missing":"Not configured","sso.platform.set":"Configured · {who} · {when}","sso.platform.save":"Save","sso.platform.remove":"Remove app","sso.platform.saved":"Saved.","sso.platform.removed":"Removed.","sso.platform.readonly":"Only staff who manage customers can change these.","brand.pending":"Working…","brand.profile.title":"Profile","brand.profile.hint":"Your photo — colleagues in your organisation see it next to the mail you send and in their contacts.","brand.profile.choose":"Choose a photo.","brand.profile.upload":"Upload photo","brand.profile.replace":"Replace photo","brand.profile.remove":"Remove photo","brand.profile.saved":"Photo saved.","brand.profile.removed":"Photo removed.","brand.profile.rules":"JPEG, PNG or WebP, up to 10 MB. The photo is cropped to a centred square; location (GPS) and EXIF data are removed.","brand.profile.load_failed":"Could not load your photo right now. Please reload the page.","brand.profile.heic":"HEIC photos (iPhone) may not be accepted. If it is refused, convert the photo to JPEG and upload it again.","brand.admin_photo.title":"Photo","brand.admin_photo.hint":"The photo this user's colleagues in the organisation see.","brand.admin_photo.audited":"Setting or removing it is recorded in the audit log.","brand.panel.title":"Branding","brand.panel.hint":"The organisation's logo, colours and own webmail address.","brand.panel.open":"Open Branding","brand.admin.back":"Back to the organisation","brand.admin.eyebrow":"Organisation","brand.admin.title":"Branding","brand.admin.lead":"Webmail, the sign-in page, the apps and the system e-mails your users receive carry the organisation's name, logo and colours.","brand.admin.status.own":"Own branding","brand.admin.status.default":"Zomail default look","brand.admin.look":"Look","brand.admin.look.hint":"Every change asks you to confirm your identity and is recorded in the audit log.","brand.site.eyebrow":"Platform","brand.site.title":"Server branding","brand.site.lead":"The look of the whole installation: the sign-in page on the server's own host, organisations without their own branding and the installed web app (PWA).","brand.site.look.hint":"Applies to the whole server. Every change asks you to confirm your identity and is recorded in the audit log.","brand.form.display_name":"Display name","brand.form.display_name.hint":"Replaces “Zomail” in the top bar, the page title and the app name (1–80 characters).","brand.form.brand_color":"Brand colour","brand.form.brand_color.hint":"White text on this colour must reach a contrast of at least {minimum}:1 (WCAG AA).","brand.form.use_accent":"Add an accent colour (optional)","brand.form.accent_color":"Accent colour","brand.form.accent_color.hint":"The accent must reach a contrast of at least {minimum}:1 against white.","brand.form.contrast_ok":"Contrast {ratio}:1 — passes","brand.form.contrast_low":"Contrast {ratio}:1 — too low (needs {minimum}:1)","brand.form.color_invalid":"Use the #rrggbb format","brand.form.fix_contrast":"Pick colours with enough contrast before saving.","brand.form.preview":"Preview","brand.form.preview.button":"Main button","brand.form.preview.link":"Selected item","brand.form.preview.accent":"Accent","brand.form.support_email":"Support e-mail (optional)","brand.form.support_url":"Support page (optional)","brand.form.support_url.hint":"https:// addresses only. Shown in the system e-mails your users receive.","brand.form.images":"Logo and icon","brand.form.images.hint":"PNG, JPEG, WebP (up to 2 MB) or SVG (up to 512 KB). SVG files are cleaned and turned into PNG/WebP images on the server.","brand.form.slot.logoLight":"Logo (light background)","brand.form.slot.logoLight.hint":"Shown in the top bar and on the sign-in page; a horizontal logo on a transparent background works best.","brand.form.slot.logoDark":"Logo (dark background)","brand.form.slot.logoDark.hint":"For the apps' dark mode. Optional.","brand.form.slot.icon":"Icon (square)","brand.form.slot.icon.hint":"Favicon and app icon. Leave empty to have it made from the light logo.","brand.form.none":"None","brand.form.icon_auto":"Made from the logo","brand.form.icon_generated":"The current icon was made from the logo.","brand.form.remove":"Remove this image","brand.form.remove_icon":"Remove the uploaded icon (make it from the logo again)","brand.form.save":"Save branding","brand.form.saved":"Saved. Users see the new look within about a minute.","brand.form.reset":"Reset to the Zomail default","brand.form.reset_hint":"Removes the own name, logo and colours. Custom webmail addresses are kept.","brand.form.reset_confirm":"Reset to the Zomail default look? The own logo and colours will be removed.","brand.form.reset_done":"Back to the default look.","brand.field_invalid.displayName":"The display name must be 1 to 80 characters.","brand.field_invalid.supportEmail":"The support e-mail is not valid.","brand.field_invalid.supportUrl":"The support page must be an https:// address (at most 300 characters).","brand.field_invalid.brandColor":"The brand colour must use the #rrggbb format.","brand.field_invalid.accentColor":"The accent colour must use the #rrggbb format.","brand.field_invalid.contentBase64":"The chosen image could not be read.","brand.field_invalid.slot":"The chosen image could not be read.","brand.hosts.title":"Own webmail address","brand.hosts.hint":"Let users open webmail on the organisation's own name, e.g. mail.example.com — with its logo and colours. The HTTPS certificate is issued automatically once DNS is verified.","brand.hosts.none":"No own webmail address yet.","brand.hosts.status.pending":"Waiting for DNS","brand.hosts.status.verified":"Verified","brand.hosts.status.lapsed":"Lapsed","brand.hosts.dns_hint":"Create ONE of these DNS records at your domain provider, then click “Check DNS”:","brand.hosts.cname":"CNAME record:","brand.hosts.txt":"Or a TXT record (when the name already points at Zomail with A/AAAA records):","brand.hosts.cert_issued":"HTTPS certificate issued, expires {when}.","brand.hosts.cert_waiting":"HTTPS certificate: waiting (issued once verified and the DNS points at Zomail).","brand.hosts.last_checked":"Last checked {when}","brand.hosts.last_error":"Previous check: {error}","brand.hosts.sso_note":"If the organisation uses single sign-on (SSO), add {uri} to the redirect URIs of its OAuth app at Google / Microsoft.","brand.hosts.verify":"Check DNS","brand.hosts.remove":"Remove address","brand.hosts.remove_confirm":"Remove {host}? Users will no longer be able to open webmail there.","brand.hosts.add_label":"Add a webmail address","brand.hosts.add_hint":"Must be a sub-domain of one of the organisation's verified domains. At most {max} addresses.","brand.hosts.add":"Add address","brand.hosts.added":"{host} added. Create the DNS record below, then click “Check DNS”.","brand.hosts.verified":"{host} is verified. The HTTPS certificate follows within a few minutes.","brand.hosts.checked":"{host} checked.","brand.hosts.removed":"{host} removed.","brand.sso.custom_redirects":"The organisation's own webmail addresses — register these redirect URIs too:","brand.photos.title":"Photos:","brand.photos.small":"Send small","brand.photos.medium":"Medium","brand.photos.original":"Actual size","brand.photos.hint":"Photos are made smaller on your device; location (GPS) and EXIF data are removed.","brand.photos.original_hint":"Photos are sent as they are, EXIF data included.","brand.photos.working":"Making photos smaller…","console.card.branding.title":"Server branding","console.card.branding.desc":"Logo, colours and display name of the whole installation.","brand.error.generic":"Could not save. Please try again.","brand.error.unreachable":"The server could not be reached. Please try again.","brand.error.forbidden":"You don't have permission to do this.","brand.error.image_too_large":"The image is too large (at most {maxBytes}).","brand.error.image_type_unsupported":"This image format is not supported. Use JPEG, PNG or WebP — convert iPhone HEIC photos to JPEG first.","brand.error.image_invalid":"The image could not be read (damaged file?).","brand.error.image_too_many_pixels":"The image has too many pixels (at most {maxPixels}).","brand.error.image_too_small":"The image is too small (at least {minPixels} × {minPixels} px).","brand.error.image_animated":"Animated images are not accepted. Use a still image.","brand.error.image_infected":"The image was flagged as malware and was refused.","brand.error.svg_unsafe":"The SVG file has unsafe content or nothing to show. Use a PNG instead.","brand.error.virus_scan_unavailable":"The image cannot be virus-scanned right now. Please try again in a few minutes.","brand.error.avatar_not_found":"No photo.","brand.error.avatar_size_invalid":"Invalid photo size.","brand.error.avatars_unavailable":"Photo storage is not enabled on this server.","brand.error.delegated_session":"Only the mailbox owner can change its photo.","brand.error.rate_limited":"Too many attempts. Try again in {retryAfterSeconds} seconds.","brand.error.brand_color_invalid":"The brand colour must use the #rrggbb format.","brand.error.brand_contrast_too_low":"White text on the brand colour only reaches {ratio}:1 — at least {minimum}:1 is needed. Pick a darker colour.","brand.error.accent_color_invalid":"The accent colour must use the #rrggbb format.","brand.error.accent_contrast_too_low":"The accent colour only reaches {ratio}:1 against white — at least {minimum}:1 is needed.","brand.error.branding_asset_not_found":"The uploaded image is gone (uploads expire after 24 hours). Choose the image again.","brand.error.asset_not_found":"The logo file was not found.","brand.error.branding_unavailable":"Branding is not enabled on this server (database or storage missing).","brand.error.webmail_host_invalid":"Not a valid host name.","brand.error.webmail_host_not_in_domain":"The address must be a sub-domain of one of the organisation's verified domains ({domains}).","brand.error.webmail_host_reserved":"This name is reserved; choose another one (e.g. mail.<your domain>).","brand.error.webmail_host_taken":"This address is used by another organisation.","brand.error.webmail_host_limit":"The organisation already has the maximum number of webmail addresses ({max}).","brand.error.webmail_host_not_found":"This webmail address was not found.","brand.error.webmail_host_dns_mismatch":"The right DNS record is not visible yet. A CNAME to {expectedCname} is needed (found: {foundCname}), or the TXT record at {expectedTxt}. DNS changes can take minutes to hours.","brand.error.dns_unavailable":"The server cannot look up DNS right now. Please try again later.","partner.error.branding_unavailable":"Branding is not enabled on this server.","nav.main":"Main navigation","nav.mail":"Mail","nav.drive":"Drive","nav.admin":"Admin","nav.onboarding":"New customer","nav.login":"Sign in","nav.account":"Account {name}","nav.language":"Language","mail.compose":"Compose","mail.folders":"Folders","mail.folder.inbox":"Inbox","mail.folder.sent":"Sent","mail.folder.drafts":"Drafts","mail.folder.archive":"Archive","mail.folder.junk":"Junk","mail.folder.trash":"Trash","mail.outbox":"Delivery status","mail.calendar":"Calendar","mail.contacts":"Contacts","mail.settings":"Settings","mail.storage.label":"Mailbox storage","mail.storage.used":"{used} used","mail.storage.warning":"Your mailbox is almost full — delete some mail or contact your administrator.","mail.logout":"Sign out","drive.title":"Drive","drive.nav.mine":"My Drive","drive.nav.shared":"Shared with me","drive.nav.recent":"Recent","drive.nav.trash":"Trash","drive.nav.label":"Drive","drive.usage.label":"Organisation storage","drive.usage.value":"{used} of {total}","drive.usage.warning":"Your organisation is running out of Drive storage — ask your administrator to upgrade.","drive.search.label":"Search Drive","drive.search.placeholder":"Search files and folders…","drive.search.title":"Results for “{query}”","drive.new_folder":"New folder","drive.new_folder.name":"Folder name","drive.new_folder.create":"Create","drive.upload":"Upload","drive.upload.drop":"Drop files here to upload","drive.upload.progress":"Uploading {name} — {percent}%","drive.upload.done.one":"Uploaded {count} file","drive.upload.done.other":"Uploaded {count} files","drive.upload.failed":"{name}: {reason}","drive.col.name":"Name","drive.col.owner":"Owner","drive.col.modified":"Last modified","drive.col.size":"Size","drive.col.access":"Access","drive.col.trashed":"Deleted","drive.me":"me","drive.shared_badge":"Shared","drive.items.one":"{count} item","drive.items.other":"{count} items","drive.role.owner":"Owner","drive.role.editor":"Can edit","drive.role.viewer":"Can view","drive.empty.mine":"Your Drive is empty","drive.empty.mine.hint":"Upload files or create a folder to get started.","drive.empty.folder":"This folder is empty","drive.empty.shared":"Nothing has been shared with you yet","drive.empty.recent":"No files yet","drive.empty.trash":"Trash is empty","drive.empty.search":"No results","drive.trash.hint":"Items in the trash are deleted forever after {days} days.","drive.readonly":"You can only view this folder.","drive.action.details":"Details","drive.action.open":"Open folder","drive.action.download":"Download","drive.action.rename":"Rename","drive.action.save":"Save","drive.action.trash":"Move to trash","drive.action.restore":"Restore","drive.action.purge":"Delete forever","drive.action.purge.confirm":"Delete “{name}” forever? This cannot be undone.","drive.action.upload_version":"Upload new version","drive.back":"Back","drive.detail.info":"Details","drive.detail.type":"Type","drive.detail.folder":"Folder","drive.detail.size":"Size","drive.detail.owner":"Owner","drive.detail.created":"Created","drive.detail.modified":"Last modified","drive.detail.location":"Location","drive.versions.title":"Versions","drive.versions.hint":"Uploading a file with the same name creates a new version. The latest {count} versions are kept.","drive.versions.label":"Version {version}","drive.versions.current":"Current","drive.versions.by":"by {who}","drive.versions.restore":"Restore this version","drive.share.title":"Share with your organisation","drive.share.hint":"You can share with people in your organisation. They get an email notification.","drive.share.email":"Colleague's email","drive.share.role":"Access","drive.share.add":"Share","drive.share.none":"Not shared with anyone.","drive.share.revoke":"Remove","drive.share.done":"Shared.","drive.link.title":"Public link","drive.link.hint":"Anyone with the link can view and download (no sign-in needed).","drive.link.expiry":"Expires after","drive.link.days.one":"{count} day","drive.link.days.other":"{count} days","drive.link.never":"Never","drive.link.create":"Create link","drive.link.created":"New link — copy it now, it is shown only once:","drive.link.active":"Active link","drive.link.expires":"expires {date}","drive.link.no_expiry":"no expiry","drive.link.copy":"Copy","drive.link.copied":"Copied","drive.done":"Updated.","drive.error.not_found":"File not found, or you don't have access.","drive.error.forbidden":"You don't have permission to do that.","drive.error.invalid_name":"Invalid name (no / or \\, at most 255 characters).","drive.error.name_conflict":"An item with this name already exists in this folder.","drive.error.quota_exceeded":"Your organisation has used all of its Drive storage.","drive.error.file_too_large":"The file is larger than the allowed size.","drive.error.external_sharing_disabled":"Your organisation does not allow public links.","drive.error.invalid_grantee":"No user with this address in your organisation.","drive.error.invalid_move":"A folder cannot be moved into itself.","drive.error.too_deep":"Folders are nested too deeply.","drive.error.link_expired":"This link has expired.","drive.error.validation_error":"Invalid input.","drive.error.storage_unavailable":"Storage is temporarily unavailable. Please try again.","drive.error.drive_unavailable":"Drive is not enabled on this system.","drive.error.unknown":"Something went wrong. Please try again.","public.title":"Shared with you","public.download":"Download","public.empty":"This folder is empty","public.gone":"This link doesn't exist, was revoked or has expired.","public.footer":"Shared securely with Zomail Drive","drive.new":"New","drive.new.docx":"Word document","drive.new.xlsx":"Excel spreadsheet","drive.new.pptx":"Presentation","drive.new.untitled":"Untitled","drive.scan.pending":"Scanning for viruses","drive.scan.clean":"Scanned — clean","drive.scan.infected":"Virus detected","drive.scan.skipped":"Too large to scan","drive.scan.error":"Could not be scanned","drive.scan.infected.hint":"This file contains malware ({signature}). Download, preview and sharing are blocked — please delete it.","drive.scan.blocked.infected":"Blocked: malware","drive.scan.blocked.error":"Blocked: virus scan failed","drive.scan.public_hint":"Public links only serve files that passed the virus scan.","drive.preview.title":"Preview","drive.office.open":"Open in Office","drive.office.view":"View in Office","drive.office.loading":"Opening the editor…","drive.office.close":"Close","drive.upload.direct":"Uploading directly to storage","drive.error.infected":"The file contains malware and is blocked.","drive.error.scan_pending":"The file is being scanned for viruses. Please try again in a few minutes.","drive.error.not_scanned":"The file is too large to scan, so it cannot be shared publicly.","drive.error.not_previewable":"This file type cannot be previewed.","drive.error.direct_upload_unavailable":"Storage does not support direct uploads.","drive.error.upload_incomplete":"The upload did not complete. Please try again.","drive.error.office_unavailable":"Office is not enabled on this system.","mail.attachment.download":"Download","mail.attachment.save_drive":"Save to Drive","mail.attachment.saved":"Saved “{name}” to Drive.","mail.attachment.count.one":"{count} attachment","mail.attachment.count.other":"{count} attachments","nav.meet":"Meet","meet.title":"Video meetings","meet.new":"New meeting","meet.new.title":"Meeting name","meet.new.guests":"Let people outside the organisation join with the link","meet.recent":"My meetings","meet.none":"No meetings yet.","meet.join":"Join","meet.copy_link":"Copy link","meet.link":"Join link","meet.guest.title":"Join the meeting","meet.guest.name":"Your name","meet.guest.join":"Join now","meet.guest.signin":"Have an account? Sign in","meet.guest_badge":"guest","meet.leave":"Leave meeting","meet.left":"You left the meeting.","meet.rejoin":"Rejoin","meet.error.not_found":"This meeting doesn't exist or has ended.","meet.error.guests_not_allowed":"This meeting is only for people in the organisation.","meet.error.meet_disabled":"Video meetings are not enabled for your organisation.","meet.error.invalid_name":"Please enter your name.","meet.error.unknown":"Could not join the meeting. Please try again.","calendar.add_meeting":"Add a video meeting link","account.menu":"Account","account.add":"Add another account","account.signout":"Sign out","account.signout_all":"Sign out of all accounts","account.active":"Active","account.switch":"Switch to {email}","account.limit":"Up to {count} accounts at a time.","login.eyebrow.mail":"Zomail Webmail","login.eyebrow.admin":"Zomail Admin","login.title.mail":"Sign in to your mailbox","login.title.admin":"Sign in to administration","login.title.add":"Add another account","login.lead":"Use your business email address and mailbox password.","login.lead.add":"Sign in to another mailbox — your current accounts stay signed in.","login.reason.admin_idle":"Administration has not been used for a while: sign in again to continue. Your mailbox stays signed in.","login.email":"Business email","login.password":"Password","login.submit":"Sign in","login.pending":"Signing in…","login.back":"Back to mail","login.error.invalid":"Wrong email or password.","login.error.throttled":"Too many failed attempts. Please try again in {minutes} minutes.","login.error.unavailable":"Sign-in is not available right now. Please try again.","login.error.network":"Cannot reach the mail server.","login.error.hosted_elsewhere":"This mailbox is hosted on your company's own server. Redirecting to {url}…","login.mfa.code":"6-digit code from your authenticator app","login.mfa.recovery":"Lost your phone? Enter a recovery code (xxxxx-xxxxx).","login.mfa.submit":"Verify","login.mfa.pending":"Verifying…","login.mfa.invalid":"Wrong verification code.","login.mfa.expired":"The verification session has expired.","login.mfa.restart":"Sign in again","ops.sites.title":"Private servers","ops.sites.lead":"Customers running Zomail on their own servers. The cloud keeps only the licence, health and usage — never mail or files.","ops.sites.none":"No private servers yet.","ops.sites.customer":"Customer","ops.sites.url":"Address","ops.sites.state":"State","ops.sites.last_seen":"Last contact","ops.sites.usage":"Usage","ops.sites.version":"Version","ops.sites.online":"Online","ops.sites.offline":"Offline","ops.sites.pending":"Awaiting enrollment","ops.sites.suspended":"Suspended","ops.sites.never":"never","ops.sites.usage_value":"{seats} users · mail {mail} · Drive {drive}","ops.sites.suspend":"Suspend","ops.sites.activate":"Reactivate","ops.sites.create":"Create a private server","ops.sites.create.hint":"Choose a Private-plan customer. The enrollment token works once and expires in 24 hours.","ops.sites.create.tenant":"Customer (Private plan)","ops.sites.create.name":"Server name","ops.sites.create.url":"Customer's webmail address","ops.sites.create.expires":"Licence expiry (optional)","ops.sites.create.submit":"Create and issue token","ops.sites.create.token":"Run on the customer's server (the token is shown only once):","ops.sites.create.none":"Every Private-plan customer already has a server.","ops.sites.health_bad":"Failing services: {names}","ops.usage.title":"Usage report","ops.usage.lead":"Seats and storage sold versus used — the basis for invoicing. Private customers are reported by their own servers.","ops.usage.csv":"Export CSV","ops.usage.plan":"Plan","ops.usage.seats":"Users","ops.usage.mail":"Mail storage (allocated / sold)","ops.usage.drive":"Drive (used / sold)","ops.usage.ai":"AI tokens this month","ops.usage.unlimited":"unlimited","ops.nav.sites":"Private servers","ops.nav.usage":"Usage report","site.banner.suspended":"This server's Zomail licence is suspended: people keep working, but no users or storage can be added. Contact Zomail.","site.banner.expired":"This server's Zomail licence has expired: no users or storage can be added until it is renewed.","site.banner.offline":"This server has not reached Zomail since {date}. Check outbound Internet (HTTPS) access.","site.banner.license":"Licence: {seats} users · mail {mail} · Drive {drive}","site.banner.license_cap":"Licence: {used}/{max} mailboxes · mail {mail} · Drive {drive}","ops.title":"Operations & security centre","ops.lead":"Delivery per domain, outbound spam and compromised accounts, DNS, blocklists, capacity and alerts — refreshed every minute.","ops.lead.tenant":"Mail flow, DNS, storage and security for your organisation.","ops.run":"Run checks now","ops.tile.outbound":"Outbound (24 h)","ops.tile.outbound.value":"{delivered} delivered · {failed} failed · {deferred} deferred","ops.tile.inbound":"Inbound (24 h)","ops.tile.inbound.value":"{junk} junk · {rejected} blocked · {virus} viruses","ops.tile.queue":"Outbound queue","ops.tile.queue.value":"oldest {minutes} min · {holds} accounts on hold","ops.tile.alerts":"Open alerts","ops.tile.alerts.value":"{critical} critical · {warning} warning · {info} info","ops.alerts":"Alerts","ops.alerts.none":"No alerts — everything is fine.","ops.alerts.resolved":"Resolved (7 days)","ops.alerts.active":"Open","ops.alerts.ack":"Acknowledge","ops.alerts.resolve":"Close","ops.alerts.times.one":"{count} time","ops.alerts.times.other":"{count} times","ops.alerts.acked":"acknowledged by {who}","ops.severity.critical":"Critical","ops.severity.warning":"Warning","ops.severity.info":"Info","ops.category.delivery":"Delivery","ops.category.abuse":"Outbound spam","ops.category.dns":"DNS","ops.category.blocklist":"Blocklist","ops.category.storage":"Storage","ops.category.security":"Security","ops.category.platform":"Platform","ops.category.site":"Private server","ops.category.inbound":"Inbound","ops.alert.delivery.domain":"{domain}: {percent}% of outgoing mail failed or deferred ({failed} failed, {deferred} deferred / {total}, 3 h)","ops.alert.delivery.provider":"{destination} is refusing/deferring {percent}% of our mail ({refusedOrDeferred}/{total})","ops.alert.queue.stuck":"Outbound queue: {queued} messages waiting, oldest {oldestMinutes} min","ops.alert.abuse.mailbox":"Sending suspended for {address}: likely compromised and sending spam","ops.alert.abuse.complaints":"{complaints} unverified spam complaints in 24 hours name {address} (limit {limit}) — not held; confirm a hold if genuine","ops.reason.burst":"Sent to {a} recipients in 1 hour (limit {b})","ops.reason.bounces":"{a}/{b} recipients unknown or refused","ops.reason.bruteforce":"{a} failed sign-ins across {b} accounts in 15 minutes","ops.reason.rapid":"Sent to {a} recipients in 10 minutes (limit {b})","ops.reason.scheduled":"{a} recipients waiting in scheduled sends (limit {b})","ops.reason.complaints":"{a} spam complaints in 24 hours (limit {b})","ops.alert.security.bruteforce":"Blocked IP {ip}: password spraying {accounts} accounts ({failures} failures in 15 min)","ops.alert.platform.clamd":"Virus scanner (ClamAV) {host} is not answering — inbound mail is accepted but not scanned","ops.alert.platform.worker":"Worker \"{kind}\" silent for {minutes} min","ops.alert.site.offline":"Private server \"{name}\" is not reporting","ops.alert.site.health":"Private server \"{name}\": failing services {failing}","ops.alert.site.checks":"Private server \"{name}\": outside checks failing {failing} (DNS/ports/certificate)","ops.alert.site.update":"Private server \"{name}\": update to {version} did not succeed ({state}) — {error}","ops.alert.site.backup":"Private server \"{name}\": backups not healthy ({state}), last success {lastSuccessAt} {error}","ops.alert.inbound.wave":"{domain} is receiving a malicious wave: {blocked}/{total} messages blocked or junked in 1 h ({virus} viruses)","ops.alert.inbound.virus_scan_unavailable":"The inbound gateway's virus scanner has been down past the wait time: {messages} messages in the last hour were delivered without a virus scan (recipients see a warning)","ops.alert.storage.shard":"Shard {id}: data {usedPercent}%, allocated {allocatedPercent}% — add disks or a shard","ops.alert.storage.mailbox":"Mailbox {address} is {percent}% full — will soon stop receiving mail","ops.alert.storage.objectstore":"Drive storage cluster has {freePercent}% free — add a storage node","ops.alert.dns":"{domain}: DNS is not right ({issues}) — mail may bounce or land in spam","ops.alert.blocklist":"Sending IP {ip} is listed on {list}","ops.alert.blocklist.blind":"Blocklist check not possible for {lists}: the cluster resolver is unreachable or the list refuses it — a listing would go unnoticed","ops.domains":"Domains","ops.domains.hint":"Last 24 hours. DNS is checked every 6 hours.","ops.domains.none":"No domains yet.","ops.col.domain":"Domain","ops.col.outbound":"Outbound","ops.col.success":"Success","ops.col.inbound":"Inbound","ops.col.dns":"DNS","ops.col.provider":"Receiving provider","ops.col.delivered":"Accepted","ops.col.deferred":"Deferred","ops.col.failed":"Refused","ops.col.last_problem":"Last error response","ops.col.mailbox":"Mailbox","ops.col.reason":"Reason","ops.col.since":"Since","ops.col.ip":"IP","ops.col.until":"Until","ops.col.list":"List","ops.col.status":"Status","ops.domains.out_value":"{total} sent · {failed} failed · {deferred} deferred","ops.domains.in_value":"{total} · {junk} junk · {rejected} blocked","ops.dns.unchecked":"not checked yet","ops.destinations":"Receiving providers","ops.destinations.hint":"Are Gmail, Outlook… accepting our mail (24 h).","ops.holds":"Accounts on sending hold","ops.holds.hint":"Held automatically on bursts or heavy bouncing (signs of compromise). Reset the password, check devices, then release.","ops.holds.none":"No account is on hold.","ops.holds.release":"Release","ops.security":"Security","ops.security.mfa":"Administrators with 2-step verification: {with}/{total}","ops.security.locked":"Accounts locked after failed sign-ins: {count}","ops.security.blocks":"Blocked IPs","ops.security.blocks.none":"No blocked IPs.","ops.security.unblock":"Unblock","ops.security.top":"IPs with most failed sign-ins (24 h)","ops.security.top_value":"{failures} failures · {accounts} accounts","ops.capacity":"Capacity","ops.capacity.shards":"Mailbox shards","ops.capacity.shard_value":"{mailboxes} mailboxes · data {used} · allocated {allocated} / {capacity}","ops.capacity.tenants":"Customers","ops.capacity.tenant_value":"Mail: used {mailUsed}, allocated {mailAllocated} / {mailLimit} · Drive: {driveUsed} / {driveQuota}","ops.capacity.unlimited":"unlimited","ops.capacity.full":"Mailboxes almost full (≥ 85%)","ops.capacity.full.none":"No mailbox is almost full.","ops.blocklists":"Blocklists (RBL)","ops.blocklists.hint":"Our direct-delivery IPs (OUTBOUND_PUBLIC_IPS), checked hourly.","ops.blocklists.none":"No sending IPs configured for checking.","ops.blocklists.listed":"Listed","ops.blocklists.clean":"Clean","ops.blocklists.unknown":"Unknown","ops.channels":"Alert channels","ops.channels.hint":"New or escalated alerts go here. Customer owners always get email about their own organisation.","ops.channels.none":"No channels yet.","ops.channels.kind":"Type","ops.channels.target":"Address","ops.channels.target.hint":"Email; webhook URL https://…; Telegram: bot_token|chat_id","ops.channels.min":"Minimum severity","ops.channels.add":"Add channel","ops.channels.remove":"Remove","ops.done":"Updated.","ops.nav":"Operations & security","settings.language":"Display language","settings.language.hint":"Used for the interface and for mail the system sends on your behalf (share notifications, invitations)."}