index.js 80 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464
  1. export const DEFAULT_LOCALE = 'zh-CN';
  2. export const supportedLocales = ['zh-CN', 'en-US'];
  3. const messages = {
  4. 'zh-CN': {
  5. 'common.account': '账号',
  6. 'common.addDomain': '添加域名',
  7. 'common.actions': '操作',
  8. 'common.cancel': '取消',
  9. 'common.confirm': '确认',
  10. 'common.copy': '复制',
  11. 'common.copied': '已复制',
  12. 'common.delete': '删除',
  13. 'common.details': '详情',
  14. 'common.edit': '修改',
  15. 'common.error': '操作失败',
  16. 'common.loadingConfig': '加载运行配置中',
  17. 'common.logout': '退出登录',
  18. 'common.manual': '手动',
  19. 'common.next': '下一步',
  20. 'common.notConfigured': '未配置',
  21. 'common.notFound': '暂无',
  22. 'common.previous': '上一步',
  23. 'common.refresh': '刷新',
  24. 'common.save': '保存',
  25. 'common.status': '状态',
  26. 'common.user': '用户',
  27. 'common.unsetSendingIp': '未设置发信 IP',
  28. 'shell.skipToMain': '跳至主要内容',
  29. 'shell.mainNavigation': '主导航',
  30. 'shell.openNavigation': '打开主导航',
  31. 'shell.closeNavigation': '关闭主导航',
  32. 'shell.accountMenu': '账户菜单',
  33. 'shell.envReady': '运行环境正常',
  34. 'shell.envNeedsSetup': '运行配置待完善',
  35. 'shell.loadingFailed': '控制台加载失败',
  36. 'shell.retry': '重试',
  37. 'shell.backToLogin': '返回登录',
  38. 'shell.forbiddenTitle': '无权访问',
  39. 'shell.forbiddenDescription': '该页面仅对系统管理员开放。',
  40. 'shell.notFoundTitle': '页面不存在',
  41. 'shell.notFoundDescription': '链接可能已失效,或页面地址输入有误。',
  42. 'shell.backOverview': '返回概览',
  43. 'shell.loadingConsole': '正在加载控制台',
  44. 'shell.loadingPage': '正在加载页面',
  45. 'auth.email': '邮箱',
  46. 'auth.emailPlaceholder': 'name@example.com',
  47. 'auth.backToLogin': '返回登录',
  48. 'auth.forgotPassword': '忘记密码?',
  49. 'auth.forgotPasswordButton': '发送重置邮件',
  50. 'auth.forgotPasswordTitle': '找回密码',
  51. 'auth.login': '登录',
  52. 'auth.loginEyebrow': 'Sign in',
  53. 'auth.loginTitle': '登录控制台',
  54. 'auth.newPassword': '新密码',
  55. 'auth.password': '密码',
  56. 'auth.register': '注册',
  57. 'auth.registerButton': '注册并进入',
  58. 'auth.registerEyebrow': 'Register',
  59. 'auth.registerTitle': '创建账号',
  60. 'auth.resendVerification': '重发验证邮件',
  61. 'auth.resendVerificationButton': '发送验证邮件',
  62. 'auth.resendVerificationTitle': '重发验证邮件',
  63. 'auth.resetPasswordButton': '重置密码',
  64. 'auth.resetPasswordTitle': '重置密码',
  65. 'auth.resetTokenMissing': '重置链接缺少 token,请重新发起密码重置。',
  66. 'auth.submitLogin': '登录',
  67. 'auth.username': '用户名',
  68. 'auth.usernameOrEmail': '用户名或邮箱',
  69. 'auth.valueDns': 'DNS 自动化',
  70. 'auth.valueIsolation': '多用户隔离',
  71. 'auth.valueObservability': '发送可观测',
  72. 'auth.subtitle': '发信域名、DNS、SMTP 与 API 密钥的统一控制台',
  73. 'auth.requestFailed': '请求失败。',
  74. 'dashboard.title': '统计概览',
  75. 'dashboard.verifiedDomains': '已验证域名',
  76. 'dashboard.todaySent': '今日发送量',
  77. 'dashboard.successRate': '成功率',
  78. 'dashboard.bounceRate': '退信率',
  79. 'dashboard.complaintRate': '投诉率',
  80. 'dashboard.lastSentAt': '最近一次发送',
  81. 'dashboard.dnsIssues': 'DNS 异常数量',
  82. 'dashboard.smtpStatus': 'SMTP 状态',
  83. 'dashboard.smtpReady': '可用',
  84. 'dashboard.smtpNotConfigured': '未配置',
  85. 'dashboard.trend': '发送趋势',
  86. 'dashboard.statusDistribution': '状态分布',
  87. 'dashboard.domainRanking': '域名发送排行',
  88. 'dashboard.domainHealth': '域名健康',
  89. 'dashboard.hourlyHeatmap': '小时发送分布',
  90. 'dashboard.deliveryFunnel': '投递漏斗',
  91. 'dashboard.failureReasons': '失败原因排行',
  92. 'dashboard.recentFailures': '最近失败原因',
  93. 'dashboard.recentLogs': '最近发送记录',
  94. 'dashboard.noTrend': '暂无发送趋势数据',
  95. 'dashboard.noDomains': '暂无域名',
  96. 'dashboard.noFailures': '暂无失败记录',
  97. 'dashboard.defaultPasswordWarning': '当前仍在使用默认管理密码,请修改 .env 后重启服务。',
  98. 'dashboard.acceptedMail': '已接收邮件',
  99. 'dashboard.failedMail': '失败邮件',
  100. 'dashboard.dnsActionHint': '优先处理 DNS 异常域名,避免影响新域名投递。',
  101. 'dashboard.statusQueued': '已接收',
  102. 'dashboard.statusFailed': '失败',
  103. 'dashboard.statusUnknown': '未知',
  104. 'dashboard.stageSubmitted': '已提交',
  105. 'dashboard.stageAccepted': '已入队',
  106. 'dashboard.stageDelivered': '已送达',
  107. 'dashboard.stagePending': '等待投递',
  108. 'dashboard.stageFailed': '投递失败',
  109. 'dashboard.opens': '打开',
  110. 'dashboard.clicks': '点击',
  111. 'dashboard.openRate': '打开率',
  112. 'dashboard.clickRate': '点击率',
  113. 'dashboard.clickToOpenRate': '点击打开率',
  114. 'dashboard.unique': '独立',
  115. 'dashboard.total': '总计',
  116. 'dashboard.trackedDelivered': '已追踪送达',
  117. 'dashboard.measuredActivity': '互动次数',
  118. 'dashboard.proxyOpens': '代理打开',
  119. 'dashboard.scannerEvents': '扫描器事件',
  120. 'dashboard.engagementTrend': '打开与点击趋势',
  121. 'dashboard.topLinks': '链接点击排行',
  122. 'dashboard.link': '链接',
  123. 'dashboard.uniqueClicks': '独立点击',
  124. 'dashboard.totalClicks': '总点击',
  125. 'dashboard.lastClicked': '最近点击',
  126. 'dashboard.noEngagement': '暂无互动数据',
  127. 'domains.title': '发信域名',
  128. 'domains.domain': '域名',
  129. 'domains.senderHost': '发信主机',
  130. 'domains.sendingIp': '发信 IP',
  131. 'domains.dnsApi': 'DNS API',
  132. 'domains.smtp': 'SMTP',
  133. 'domains.lastSent': '最近发送',
  134. 'domains.overallStatus': '整体状态',
  135. 'domains.actions': '操作',
  136. 'domains.searchPlaceholder': '搜索域名或发信主机',
  137. 'domains.statusPlaceholder': '整体状态',
  138. 'domains.healthy': '健康',
  139. 'domains.pending': '等待生效',
  140. 'domains.needsAction': '需要处理',
  141. 'domains.waitingDns': '等待 DNS 生效',
  142. 'domains.sendable': '可发送',
  143. 'domains.waitingVerify': '待验证',
  144. 'domains.oneClickDns': '一键 DNS',
  145. 'domains.check': '检查',
  146. 'domains.test': '测试',
  147. 'domains.deleteConfirm': '确认删除该域名?',
  148. 'domainDetail.back': '返回域名列表',
  149. 'domainDetail.overview': '域名概览',
  150. 'domainDetail.danger': '危险操作',
  151. 'domainDetail.deleteHint': '删除域名会移除该域名配置,但不会删除 DNS 服务商中的记录。',
  152. 'domainDetail.editTitle': '修改域名配置',
  153. 'domainDetail.lastCheck': '最后检查',
  154. 'domainDetail.notChecked': '尚未检查',
  155. 'domainDetail.noDnsResult': '尚未生成 DNS 检查结果',
  156. 'domainDetail.currentDnsResult': '当前 DNS 检测结果',
  157. 'domainDetail.recheckAll': '重新检查全部',
  158. 'domainDetail.copyAll': '复制全部配置',
  159. 'domainDetail.noPublicDns': '暂无公共 DNS 查询数据',
  160. 'domainDetail.notFoundRecord': '未发现',
  161. 'domainDetail.needAttention': '需要关注',
  162. 'domainDetail.noSmtpPassword': '请在 SMTP 页面重新设置后复制',
  163. 'domainDetail.noApiToken': '尚未创建',
  164. 'domainDetail.apiExample': '发送 API 示例',
  165. 'domainDetail.placeholder': '配置将在后续版本接入',
  166. 'dnsRecord.hostname': '主机名',
  167. 'dnsRecord.targetValue': '目标值',
  168. 'dnsRecord.currentValue': '当前值',
  169. 'dnsRecord.emptyCurrent': '未查询到记录',
  170. 'dnsRecord.ptrHint': 'PTR 通常需要在服务器商、云厂商或 IP 提供商处配置,DNS API 一般无法直接写入。',
  171. 'dnsRecord.recheck': '重新检测',
  172. 'dnsRecord.copyLabel': '复制',
  173. 'dnsRecord.rootTxt': '根域 TXT',
  174. 'dnsRecord.verificationTxt': '验证 TXT',
  175. 'dnsRecord.dkimTxt': 'DKIM TXT',
  176. 'dnsRecord.dmarcTxt': 'DMARC TXT',
  177. 'dnsRecord.senderA': '发信主机 A',
  178. 'dnsRecord.ptr': '发信 IP PTR',
  179. 'domainHealth.sendingDomain': 'Sending domain',
  180. 'domainHealth.dnsProgress': 'DNS 检查进度',
  181. 'domainHealth.passed': '通过',
  182. 'domainHealth.dnsIssues': 'DNS 异常',
  183. 'domainHealth.dnsApi': 'DNS API',
  184. 'domainHealth.oneClickDns': '一键配置 DNS',
  185. 'domainHealth.checkNow': '立即检查',
  186. 'domainHealth.sendTest': '发送测试邮件',
  187. 'domainHealth.edit': '修改配置',
  188. 'addDomain.title': '添加发信域名',
  189. 'addDomain.stepDomain': '域名信息',
  190. 'addDomain.stepDns': 'DNS 配置方式',
  191. 'addDomain.stepPolicy': 'DKIM / SPF / DMARC',
  192. 'addDomain.stepConfirm': '确认并创建',
  193. 'addDomain.create': '确认创建',
  194. 'addDomain.domainExtra': '填写根域名,不需要 http、路径或邮箱地址。',
  195. 'addDomain.domainRequired': '请输入发信域名',
  196. 'addDomain.senderHostRequired': '请输入发信主机',
  197. 'addDomain.sendingIpRequired': '请输入发信 IP',
  198. 'addDomain.dnsExtra': '未选择时仍可创建域名,稍后手动配置 DNS 或绑定凭据。',
  199. 'addDomain.manualDns': '手动配置 DNS',
  200. 'addDomain.dnsHint': '选择 DNS API 后,域名详情页可以使用“一键配置 DNS”写入验证、DKIM、SPF、DMARC 和发信主机 A 记录。',
  201. 'addDomain.selectorRequired': '请输入 DKIM selector',
  202. 'addDomain.spfExtra': '兼容第三方 SPF include',
  203. 'addDomain.generatedTitle': '创建后会生成以下配置',
  204. 'addDomain.recordVerification': '域名验证 TXT',
  205. 'addDomain.recordDkim': 'DKIM TXT',
  206. 'addDomain.recordSpf': 'SPF TXT',
  207. 'addDomain.recordDmarc': 'DMARC TXT',
  208. 'addDomain.recordSenderA': '发信主机 A 记录',
  209. 'addDomain.recordPtr': 'PTR 反向解析检查提示',
  210. 'addDomain.immediateCheck': '创建后立即检查 DNS',
  211. 'logs.title': '发送记录',
  212. 'logs.time': '时间',
  213. 'logs.recipient': '收件人',
  214. 'logs.domain': '发件域名',
  215. 'logs.errorReason': '错误原因',
  216. 'logs.viewDetail': '查看详情',
  217. 'logs.domainPlaceholder': '发信域名',
  218. 'logs.statusPlaceholder': '状态',
  219. 'logs.recipientPlaceholder': '搜索收件人',
  220. 'logs.detailTitle': '发送详情',
  221. 'logs.deliveryLog': '完整投递日志',
  222. 'logs.copyDeliveryLog': '复制投递日志',
  223. 'logs.noDeliveryLog': '暂无结构化投递日志,可能是历史发送记录。',
  224. 'logs.sender': '发件人',
  225. 'logs.subject': '主题',
  226. 'logs.messageId': 'Message ID',
  227. 'logs.finalResponse': '最终响应',
  228. 'logs.messageBytes': '邮件字节数',
  229. 'logs.queueId': 'Postfix 队列 ID',
  230. 'logs.deliveredAt': '最终投递时间',
  231. 'logs.trackingTimeline': '投递时间线',
  232. 'logs.noTrackingTimeline': '暂无可用的投递时间线。',
  233. 'logs.trackingTimelineTruncated': '时间线仅显示最近 500 条互动事件,汇总统计仍包含全部事件。',
  234. 'logs.trackingLinksTruncated': '链接明细仅显示点击量最高的 200 条,汇总统计仍包含全部链接。',
  235. 'logs.deliveryAttempts': '投递尝试',
  236. 'logs.noDeliveryAttempts': '暂无最终投递回执,可能仍在队列中或属于历史记录。',
  237. 'logs.webhookDeliveries': 'Webhook 回调',
  238. 'logs.noWebhookDeliveries': '暂无关联 Webhook 回调。',
  239. 'logs.detailLoadFailed': '发送详情加载失败。',
  240. 'logs.detailNotFound': '未找到该发送记录。',
  241. 'logs.stageSubmitted': '已提交',
  242. 'logs.stageAccepted': '已入队',
  243. 'logs.stageDelivered': '已送达',
  244. 'logs.stagePending': '等待投递',
  245. 'logs.stageFailed': '投递失败',
  246. 'logs.stageOpened': '已打开',
  247. 'logs.stageClicked': '已点击',
  248. 'logs.stageWebhook': 'Webhook 回调',
  249. 'logs.engagement': '互动追踪',
  250. 'logs.opens': '打开',
  251. 'logs.clicks': '点击',
  252. 'logs.trackingDisabled': '这封邮件发送时未启用打开/点击追踪。',
  253. 'logs.trackingDisabledShort': '未启用',
  254. 'inbox.title': '收件箱',
  255. 'inbox.subtitle': '管理本地收信邮箱,查看通过 MailHub SMTP 接收的邮件。',
  256. 'inbox.createMailbox': '新增收信邮箱',
  257. 'inbox.inboundDisabled': '当前运行配置已关闭入站收信。请设置 INBOUND_ENABLED=true 后重启服务。',
  258. 'inbox.clientHelpTitle': '客户端配置帮助',
  259. 'inbox.clientHelpIntro': '创建邮箱后,点击“客户端配置”可复制第三方客户端所需的收信/发信参数。',
  260. 'inbox.clientHelpImap': '推荐优先使用 IMAP;它会和 MailHub 收件箱保持同步。',
  261. 'inbox.clientHelpPop3': 'POP3 适合把邮件下载到本地;客户端删除邮件后,MailHub 中对应邮件会在退出时移除。',
  262. 'inbox.clientHelpAuth': '用户名使用完整邮箱地址,密码使用创建或重置邮箱时设置的密码。',
  263. 'inbox.clientHelpSecurity': '优先使用 SSL/TLS 端口 993/995/465,或在 143/110/587 上启用 STARTTLS/STLS。',
  264. 'inbox.clientHelpPorts': '服务器防火墙和云安全组需放行 IMAP 143/993、POP3 110/995、SMTP 587/465。',
  265. 'inbox.mailboxes': '收信邮箱',
  266. 'inbox.domainRoutes': '域名收信路由',
  267. 'inbox.mailboxUnit': '邮箱',
  268. 'inbox.catchAllAddress': '收取未知邮件的邮箱',
  269. 'inbox.catchAllDisabled': '未启用',
  270. 'inbox.catchAllTitle': '收取未知邮件',
  271. 'inbox.catchAllExtra': '留空表示拒收未知地址;填写邮箱地址表示投递/转发;填写 /dev/null 表示接收后丢弃。',
  272. 'inbox.mailboxAddress': '邮箱地址',
  273. 'inbox.password': '密码',
  274. 'inbox.passwordRequired': '请输入邮箱密码',
  275. 'inbox.passwordMin': '邮箱密码至少需要 8 位',
  276. 'inbox.generatePassword': '生成',
  277. 'inbox.quotaMb': '配额',
  278. 'inbox.unlimited': '无限制',
  279. 'inbox.aliases': '别名',
  280. 'inbox.aliasesExtra': '每行一个本地部分,例如 sales 会接收 sales@当前域名。',
  281. 'inbox.forwardTo': '转发到',
  282. 'inbox.forwardToExtra': '每行一个或多个邮箱地址,也可用逗号、空格分隔。',
  283. 'inbox.keepForwarded': '保留已转发的邮件',
  284. 'inbox.forwardOnly': '仅转发',
  285. 'inbox.clientConfig': '客户端配置',
  286. 'inbox.mailboxWebhooks': '邮件到达 Webhook',
  287. 'inbox.clientConfigHelpSummary': '推荐优先配置 IMAP 收信;POP3 仅在需要下载到本地时使用。密码只在创建或重置时显示。',
  288. 'inbox.configUsername': '用户名',
  289. 'inbox.configPassword': '密码',
  290. 'inbox.passwordNotShown': '仅创建或重置时显示',
  291. 'inbox.incomingConfig': 'IMAP 配置',
  292. 'inbox.pop3Config': 'POP3 配置',
  293. 'inbox.outgoingConfig': '发信配置',
  294. 'inbox.configProtocol': '协议',
  295. 'inbox.configHost': '主机',
  296. 'inbox.configPort': '端口',
  297. 'inbox.configSecurity': '安全',
  298. 'inbox.configAuthMethod': '认证方式',
  299. 'inbox.unread': '未读',
  300. 'inbox.messageCount': '邮件数',
  301. 'inbox.lastMessageAt': '最近收信',
  302. 'inbox.noDomain': '请先添加域名,再创建该域名下的收信邮箱。',
  303. 'inbox.noMailboxDomain': '请先添加自己的域名,或让域名拥有者共享可创建邮箱的域名。',
  304. 'inbox.ownDomain': '我的域名',
  305. 'inbox.sharedDomain': '共享域名',
  306. 'inbox.messages': '入站邮件',
  307. 'inbox.mailboxFilter': '收信邮箱',
  308. 'inbox.searchPlaceholder': '搜索发件人、主题或正文预览',
  309. 'inbox.receivedAt': '收信时间',
  310. 'inbox.subject': '主题',
  311. 'inbox.noSubject': '(无主题)',
  312. 'inbox.sender': '发件人',
  313. 'inbox.mailbox': '收信邮箱',
  314. 'inbox.read': '已读',
  315. 'inbox.preview': '预览',
  316. 'inbox.localPart': '邮箱前缀',
  317. 'inbox.localPartRequired': '请输入邮箱前缀',
  318. 'inbox.localPartInvalid': '邮箱前缀不能包含 @ 或空格',
  319. 'inbox.domainRequired': '请选择域名',
  320. 'inbox.displayName': '显示名称',
  321. 'inbox.messageDetail': '邮件详情',
  322. 'inbox.copyRaw': '复制原文',
  323. 'inbox.recipients': '收件人',
  324. 'inbox.textBody': '文本正文',
  325. 'inbox.htmlBody': 'HTML 预览',
  326. 'inbox.htmlSource': 'HTML 源码',
  327. 'inbox.rawMessage': '原始 MIME',
  328. 'inbox.noTextBody': '暂无文本正文',
  329. 'inbox.noHtmlBody': '暂无 HTML 正文',
  330. 'inbox.noRawMessage': '暂无原始 MIME',
  331. 'inbox.messageNotFound': '邮件不存在或已被删除。',
  332. 'inbox.detailLoadFailed': '邮件详情加载失败。',
  333. 'inbox.noReceivingAccess': '当前账号没有可收取邮件的邮箱权限。',
  334. 'inbox.ownerManaged': '由邮箱所有者管理',
  335. 'inbox.deleteMailbox': '删除邮箱',
  336. 'inbox.deleteMailboxTitle': '迁移邮件并删除邮箱',
  337. 'inbox.deleteMailboxAction': '迁移邮件并删除',
  338. 'inbox.deleteMailboxWarning': '系统会先将源邮箱中的全部邮件迁移到目标邮箱,再停用并移除源邮箱账号。',
  339. 'inbox.deleteMailboxEmptyWarning': '此邮箱中没有邮件,可以直接停用并移除邮箱账号。',
  340. 'inbox.deleteMailboxEmptyAction': '删除邮箱',
  341. 'inbox.deleteMailboxSource': '待删除邮箱',
  342. 'inbox.deleteMailboxMessages': '待迁移邮件',
  343. 'inbox.deleteMailboxTarget': '目标邮箱',
  344. 'inbox.deleteMailboxTargetPlaceholder': '选择接收这些邮件的邮箱',
  345. 'inbox.deleteMailboxTargetRequired': '请选择目标邮箱',
  346. 'inbox.deleteMailboxNoTarget': '没有其他可管理的邮箱。请先创建一个目标邮箱,再删除当前邮箱。',
  347. 'inbox.deleteMailboxConfirmAddress': '输入完整邮箱地址确认',
  348. 'inbox.deleteMailboxConfirmAddressExtra': '为避免误删,请输入上方待删除邮箱的完整地址。',
  349. 'inbox.deleteMailboxConfirmAddressMismatch': '输入的邮箱地址与待删除邮箱不一致。',
  350. 'account.title': '账号与邮箱权限',
  351. 'account.subtitle': '查看账号信息,以及自己拥有或由管理员分配的邮箱权限。',
  352. 'account.summary': '账号信息',
  353. 'account.role': '角色',
  354. 'account.mailboxAccess': '我的邮箱权限',
  355. 'account.accessSource': '权限来源',
  356. 'account.permissions': '权限',
  357. 'account.owned': '拥有',
  358. 'account.assigned': '管理员分配',
  359. 'account.ownedMailbox': '我拥有的邮箱',
  360. 'account.adminAssigned': '管理员分配',
  361. 'account.adminAccess': '管理员查看',
  362. 'account.openInbox': '打开收件箱',
  363. 'account.manageMailbox': '管理邮箱',
  364. 'account.noMailboxes': '当前账号还没有拥有或被分配的邮箱。',
  365. 'mailboxPermission.view': '查看配置',
  366. 'mailboxPermission.receive': '收取邮件',
  367. 'mailboxPermission.send': '发送邮件',
  368. 'mailboxPermission.none': '无权限',
  369. 'logs.trackingScope': '统计范围',
  370. 'logs.messageLevel': '消息级(多收件人)',
  371. 'logs.recipientLevel': '单收件人',
  372. 'logs.firstOpened': '首次打开',
  373. 'logs.lastOpened': '最近打开',
  374. 'logs.firstClicked': '首次点击',
  375. 'logs.lastClicked': '最近点击',
  376. 'logs.proxyOpens': '代理打开',
  377. 'logs.scannerEvents': '扫描器事件',
  378. 'logs.statusQueued': '队列中',
  379. 'logs.statusSent': '已送达',
  380. 'logs.statusDeferred': '暂时失败',
  381. 'logs.statusBounced': '已退信',
  382. 'logs.statusFailed': '失败',
  383. 'smtp.connectionTitle': 'SMTP 连接信息',
  384. 'smtp.loginCredentialsTitle': 'SMTP 凭据',
  385. 'smtp.username': '用户名',
  386. 'smtp.password': '密码',
  387. 'smtp.usernameRequired': '请输入 SMTP Username',
  388. 'smtp.passwordRequired': '请输入 SMTP Password',
  389. 'smtp.passwordSet': '已设置',
  390. 'smtp.passwordEmpty': '未设置',
  391. 'smtp.passwordUnavailable': '请重新设置后复制',
  392. 'smtp.create': '新增凭据',
  393. 'smtp.createTitle': '新增 SMTP 凭据',
  394. 'smtp.editTitle': '编辑 SMTP 凭据',
  395. 'smtp.deleteConfirm': '确认删除该 SMTP 登录凭据?',
  396. 'smtp.passwordExtra': '留空保存时会保留原密码;出于安全原因,已保存密码不会再次显示。',
  397. 'smtp.regenerate': '重新生成密码',
  398. 'smtp.resetToCopy': '请重新设置后复制',
  399. 'smtpRelay.title': '发送中继',
  400. 'smtpRelay.create': '新增出口',
  401. 'smtpRelay.createTitle': '新增发送中继',
  402. 'smtpRelay.editTitle': '编辑发送中继',
  403. 'smtpRelay.name': '名称',
  404. 'smtpRelay.nameRequired': '请输入出口名称',
  405. 'smtpRelay.server': '服务器',
  406. 'smtpRelay.hostRequired': '请输入 SMTP Host',
  407. 'smtpRelay.portRequired': '请输入 SMTP Port',
  408. 'smtpRelay.username': '用户名',
  409. 'smtpRelay.password': '密码',
  410. 'smtpRelay.passwordSet': '已设置',
  411. 'smtpRelay.passwordEmpty': '未设置',
  412. 'smtpRelay.passwordExtra': '留空保存时会保留原密码;出于安全原因,已保存密码不会再次显示。',
  413. 'smtpRelay.generatePassword': '生成密码',
  414. 'smtpRelay.heloExtra': '留空时使用系统默认 HELO。',
  415. 'smtpRelay.default': '默认',
  416. 'smtpRelay.domainDefault': '默认发信 SMTP 出口',
  417. 'smtpRelay.domainDefaultExtra': '未选择时按请求指定、用户默认出口、系统全局 SMTP 的顺序选择。',
  418. 'smtpRelay.useResolutionOrder': '按默认选择顺序',
  419. 'smtpRelay.deleteConfirm': '确认删除该 SMTP 出口?绑定到该出口的域名会改为按默认顺序选择。',
  420. 'dnsApi.title': 'DNS 集成凭据',
  421. 'dnsApi.createTitle': '新增 DNS 集成凭据',
  422. 'dnsApi.editTitle': '编辑',
  423. 'dnsApi.zone': 'Zone / 根域名',
  424. 'dnsApi.zoneRequired': '请输入 Zone 或根域名',
  425. 'dnsApi.zoneExtra': '填写该账号下任一可管理 Zone 用于连接测试;一键配置时会按当前发信域名自动匹配 Zone。',
  426. 'dnsApi.cloudflareZoneExtra': 'Cloudflare 可填写任一可访问 Zone 用于测试;一键配置时会按当前发信域名自动匹配 Zone。',
  427. 'dnsApi.tokenExtra': '需要 Zone DNS Edit 权限。',
  428. 'dnsApi.keepSecret': '留空表示保留原密钥。',
  429. 'dnsApi.save': '保存修改',
  430. 'dnsApi.create': '新增凭据',
  431. 'dnsApi.secretHint': '密钥只在服务端加密保存,不会在列表中回显。',
  432. 'dnsApi.deleteConfirm': '确认删除该 DNS 集成凭据?删除后将无法再通过此 Provider 管理对应 Zone。',
  433. 'settings.checkItem': '检查项',
  434. 'settings.deliveryChecks': '发信环境检查',
  435. 'settings.noPermission': '当前账号没有系统设置权限。',
  436. 'settings.save': '保存设置',
  437. 'settings.engagementTracking': '默认启用打开与点击追踪',
  438. 'settings.registrationPolicy': '注册与账号',
  439. 'settings.registrationRequiresApproval': '邮箱验证后需要管理员审核',
  440. 'settings.registrationRequiresApprovalHint': '关闭时,用户验证邮箱后立即启用;开启时,账号进入待审核状态,需管理员批准后才能登录。',
  441. 'settings.approvalRequired': '需要审核',
  442. 'settings.approvalNotRequired': '自动启用',
  443. 'admin.title': '管理中心',
  444. 'admin.users': '用户',
  445. 'admin.mailboxAccess': '邮箱授权',
  446. 'admin.resources': '资源',
  447. 'admin.migration': '合并迁移',
  448. 'admin.systemEmail': '系统邮件',
  449. 'admin.auditLogs': '审计日志',
  450. 'adminMailboxAccess.title': '邮箱权限管理',
  451. 'adminMailboxAccess.drawerTitle': '配置邮箱权限',
  452. 'adminMailboxAccess.search': '搜索邮箱、所有者或邮箱地址',
  453. 'adminMailboxAccess.owner': '邮箱所有者',
  454. 'adminMailboxAccess.ownerPermissions': '所有者权限',
  455. 'adminMailboxAccess.assignedUsers': '已分配用户',
  456. 'adminMailboxAccess.configure': '配置权限',
  457. 'adminMailboxAccess.permissions': '邮箱权限',
  458. 'adminMailboxAccess.permissionHint': '收取邮件或发送邮件会自动包含查看配置权限;邮箱所有者始终拥有完整权限且不能移除。',
  459. 'adminMailboxAccess.permissionRequired': '每个用户至少选择一项权限,或移除该授权行。',
  460. 'adminMailboxAccess.user': '授权用户',
  461. 'adminMailboxAccess.addUser': '添加授权用户',
  462. 'adminMailboxAccess.remove': '移除授权用户',
  463. 'adminMailboxAccess.noAssignments': '该邮箱尚未分配给其他用户。',
  464. 'adminMailboxAccess.noSearchResult': '没有符合搜索条件的邮箱。',
  465. 'adminMailboxAccess.empty': '暂无可配置的邮箱。',
  466. 'adminMailboxAccess.notFound': '邮箱不存在、已删除或无权访问。',
  467. 'adminMailboxAccess.duplicateUser': '同一用户不能重复分配。',
  468. 'adminMailboxAccess.disabledUser': '已禁用',
  469. 'adminMailboxAccess.saved': '邮箱权限已保存',
  470. 'adminMailboxAccess.selectVisible': '选择全部筛选结果',
  471. 'adminMailboxAccess.selectMailbox': '选择邮箱',
  472. 'adminMailboxAccess.selectedVisible': '当前筛选中',
  473. 'adminMailboxAccess.clearSelection': '清空选择',
  474. 'adminMailboxAccess.bulkConfigure': '批量授权',
  475. 'adminMailboxAccess.bulkTitle': '批量配置邮箱权限',
  476. 'adminMailboxAccess.bulkHint': '仅处理所选邮箱与用户组合;其他用户已有授权不受影响,邮箱所有者组合会自动跳过。',
  477. 'adminMailboxAccess.bulkUpsertHint': '会将所选邮箱与用户组合的现有权限替换为下方权限;其他用户授权不受影响,邮箱所有者组合会自动跳过。',
  478. 'adminMailboxAccess.selectedMailboxes': '已选择邮箱',
  479. 'adminMailboxAccess.selectedMailboxPreview': '所选邮箱预览',
  480. 'adminMailboxAccess.bulkOperation': '批量操作',
  481. 'adminMailboxAccess.bulkUpsert': '设置或替换权限',
  482. 'adminMailboxAccess.bulkRemove': '移除授权',
  483. 'adminMailboxAccess.bulkUsers': '授权用户',
  484. 'adminMailboxAccess.bulkUsersPlaceholder': '选择一个或多个用户',
  485. 'adminMailboxAccess.bulkSaveAction': '应用权限',
  486. 'adminMailboxAccess.bulkRemoveAction': '移除授权',
  487. 'adminMailboxAccess.bulkRemoveWarning': '将从所有已选邮箱移除这些用户的授权,其他用户的权限不受影响。',
  488. 'adminMailboxAccess.bulkRemoveDisabledHint': '移除授权时可选择已禁用用户;已禁用用户不会出现在新增授权操作中。',
  489. 'adminMailboxAccess.bulkRemoveConfirmTitle': '确认批量移除授权',
  490. 'adminMailboxAccess.bulkRemoveConfirmWarning': '确认后将移除这些邮箱与用户组合中现有的授权。该操作不会删除邮箱或邮件。',
  491. 'adminMailboxAccess.bulkOwnerSkipPreview': '预计跳过邮箱所有者组合',
  492. 'adminMailboxAccess.bulkMailboxLimit': '单次最多选择邮箱数:',
  493. 'adminMailboxAccess.bulkUserLimit': '单次最多选择用户数:',
  494. 'adminMailboxAccess.bulkPairLimit': '单次最多处理邮箱与用户组合数:',
  495. 'adminMailboxAccess.bulkMailboxUnit': '个邮箱',
  496. 'adminMailboxAccess.bulkUserUnit': '个用户',
  497. 'adminMailboxAccess.bulkPairUnit': '个组合',
  498. 'adminMailboxAccess.bulkSaved': '批量邮箱权限已更新',
  499. 'adminMailboxAccess.bulkRemoved': '批量邮箱授权已移除',
  500. 'adminMailboxAccess.bulkChanged': '已更改',
  501. 'adminMailboxAccess.bulkUnchanged': '未变化',
  502. 'adminMailboxAccess.bulkSkippedOwner': '跳过所有者',
  503. 'metrics.accepted': '已接收',
  504. 'metrics.failed': '失败',
  505. 'metrics.recipients': '收件人',
  506. 'metrics.total': '总量',
  507. 'status.success': '已通过',
  508. 'status.pending': '等待生效',
  509. 'status.error': '配置错误',
  510. 'status.idle': '未配置',
  511. 'tokens.createTitle': '创建 API 密钥',
  512. 'tokens.subtitle': '按最小权限原则创建、更新或撤销用于发信和邮箱自动化的访问令牌。',
  513. 'tokens.name': '名称',
  514. 'tokens.namePlaceholder': 'Production API',
  515. 'tokens.nameRequired': '请输入密钥名称',
  516. 'tokens.create': '创建密钥',
  517. 'tokens.edit': '编辑密钥',
  518. 'tokens.editTitle': '编辑 API 密钥',
  519. 'tokens.listTitle': 'API 密钥',
  520. 'tokens.prefix': 'Token 前缀',
  521. 'tokens.scopes': '权限范围',
  522. 'tokens.scopesRequired': '请至少选择一项权限',
  523. 'tokens.scopesExtra': '发信使用 send;邮箱资源读取/创建使用 mailboxes:read、mailboxes:write;读取邮件内容使用 messages:read。',
  524. 'tokens.mailboxAccess': '邮箱访问范围',
  525. 'tokens.mailboxAccessOwner': '账号拥有的邮箱',
  526. 'tokens.mailboxAccessSelected': '指定邮箱',
  527. 'tokens.mailboxAccessAll': '全系统邮箱(管理员)',
  528. 'tokens.mailboxAccessExtra': 'Token 包含 send、mailboxes:read 或 messages:read 时生效。指定邮箱可包含管理员分配的邮箱;实际查看、读取邮件和发信能力仍与账号当前邮箱权限取交集。',
  529. 'tokens.mailboxIds': '授权邮箱',
  530. 'tokens.mailboxIdsRequired': '请至少选择一个邮箱',
  531. 'tokens.mailboxIdsPlaceholder': '选择该 Token 可访问的邮箱',
  532. 'tokens.status': '状态',
  533. 'tokens.statusActive': '生效中',
  534. 'tokens.statusExpired': '已过期',
  535. 'tokens.statusRevoked': '已撤销',
  536. 'tokens.expiresAt': '到期时间',
  537. 'tokens.expiresAtExtra': '留空表示长期有效;使用本地时间。',
  538. 'tokens.fullToken': '完整 Token',
  539. 'tokens.copyFull': '复制完整 Token',
  540. 'tokens.copyPrefix': '复制前缀',
  541. 'tokens.createdTitle': 'API 密钥已创建',
  542. 'tokens.createdWarning': '完整 Token 已加密保存,之后仍可在列表或详情中复制。请仅存放在可信的服务端环境。',
  543. 'tokens.createdSuccess': 'API 密钥已创建',
  544. 'tokens.rotatedTitle': 'API 密钥已重新生成',
  545. 'tokens.rotatedSuccess': 'API 密钥已重新生成,旧值已立即失效',
  546. 'tokens.rotatedWarning': '旧 Token 已立即失效。请尽快更新所有调用方,新的完整 Token 之后仍可在列表或详情中复制。',
  547. 'tokens.deletedSuccess': 'API 密钥已删除',
  548. 'tokens.updatedSuccess': 'API 密钥已更新',
  549. 'tokens.revokedSuccess': 'API 密钥已撤销',
  550. 'tokens.secretAvailable': '完整 Token 已加密保存,可随时复制。',
  551. 'tokens.secretUnavailable': '该历史 Token 不可恢复,只能通过前缀识别。重新生成后旧值会立即失效。',
  552. 'tokens.recoverable': '可复制',
  553. 'tokens.unrecoverable': '不可恢复',
  554. 'tokens.rotate': '重新生成',
  555. 'tokens.rotateConfirm': '重新生成 API 密钥?',
  556. 'tokens.rotateConfirmDescription': '旧 Token 会立即失效,所有仍使用旧值的调用都会失败。此操作无法撤销。',
  557. 'tokens.lastUsed': '最近使用',
  558. 'tokens.neverUsed': '未使用',
  559. 'tokens.createdAt': '创建时间',
  560. 'tokens.actions': '操作',
  561. 'tokens.deleteConfirm': '确认删除该 API 密钥?',
  562. 'tokens.revoke': '撤销密钥',
  563. 'tokens.revokeConfirm': '撤销后该 API 密钥将立即失效,确认继续?',
  564. 'tokens.copyCreated': '复制完整 Token',
  565. 'tokens.prefixOnlyHelp': '新 API 密钥会加密保存并支持完整复制;旧版历史 Token 可能仅保留前缀,需要重新生成后才能恢复完整复制能力。',
  566. 'tokens.docsTitle': 'API 使用文档',
  567. 'tokens.endpoint': 'API Endpoint',
  568. 'tokens.mailboxEndpoint': '邮箱 API Endpoint',
  569. 'tokens.authHeader': '认证方式',
  570. 'tokens.authHeaderValue': 'Authorization: Bearer <USER_API_TOKEN>',
  571. 'tokens.contentType': 'Content-Type',
  572. 'tokens.requestFields': '请求字段',
  573. 'tokens.fieldFrom': 'from:可使用账号可发信域名下的地址,或管理员分配且具发送权限、并已被“指定邮箱”范围选中的邮箱/别名;发件域名仍须通过验证。',
  574. 'tokens.fieldTo': 'to:收件人地址,支持单个邮箱或邮箱数组。',
  575. 'tokens.fieldSubject': 'subject:邮件主题。',
  576. 'tokens.fieldText': 'text:纯文本正文。',
  577. 'tokens.fieldHtml': 'html:HTML 正文,可选。',
  578. 'tokens.curlExample': 'curl 示例',
  579. 'tokens.nodeExample': 'Node / Fetch 示例',
  580. 'tokens.requestExample': '请求 Body 示例',
  581. 'tokens.responseExample': '成功响应示例',
  582. 'tokens.sendApi': '发信 API',
  583. 'tokens.mailboxApi': '创建邮箱 API',
  584. 'tokens.mailboxApiHint': '长期邮箱使用 mode=permanent;临时邮箱使用 mode=temporary 并提供 expiresInMinutes。临时邮箱可省略 address,服务端会按 domain 自动生成地址和密码。',
  585. 'tokens.permanentMailbox': '创建长期邮箱',
  586. 'tokens.temporaryMailbox': '创建临时邮箱',
  587. 'tokens.mailboxResponse': '创建结果与客户端配置',
  588. 'tokens.messagesApi': '收信 API',
  589. 'tokens.messagesApiHint': '需要 messages:read 权限,并受 Token 的邮箱访问范围及账号收信权限共同限制。列表支持分页与邮箱、文件夹、已读状态、关键词筛选。',
  590. 'tokens.messagesList': '查询邮件列表',
  591. 'tokens.messageDetail': '读取邮件详情',
  592. 'tokens.mailboxFolders': '查询邮箱文件夹',
  593. 'tokens.messagesFilters': '筛选参数:page/pageSize 控制分页;mailboxId 限定邮箱;folder 限定文件夹;read 使用 true/false;q 搜索发件人、收件人、主题、Message ID 与摘要。',
  594. 'tokens.messagesAccess': '范围说明:账号范围只覆盖 Token 所有者的邮箱;指定邮箱仅覆盖所选 ID;全系统邮箱只允许管理员显式选择。邮件读取和发信均与账号当前权限取交集。',
  595. 'tokens.securityTips': '安全建议',
  596. 'tokens.securityTipStore': '只在服务端环境保存 Token,不要放进浏览器前端代码或公开仓库。',
  597. 'tokens.securityTipRotate': '不同环境使用不同 Token,泄露后立即重新生成并更新所有调用方。',
  598. 'tokens.securityTipScopes': '只授予实际需要的权限;给自动化邮箱创建任务时无需授予 send。',
  599. 'tokens.securityTipDomain': 'From 必须属于账号可发信域名,或使用已分配且具发送权限的邮箱/别名;发件域名应先完成 DNS 验证。',
  600. 'tokens.noTokenHint': '创建 API 密钥后可在列表和详情中复制完整 Token,并按最小权限限制邮箱访问范围。',
  601. 'webhooks.title': 'Webhooks',
  602. 'webhooks.subtitle': '在投递状态变为已送达、退信或失败时,向你的 HTTPS 端点推送通知。',
  603. 'webhooks.create': '新建 Webhook',
  604. 'webhooks.createTitle': '新建 Webhook',
  605. 'webhooks.editTitle': '编辑 Webhook',
  606. 'webhooks.name': '名称',
  607. 'webhooks.namePlaceholder': 'Production deliveries',
  608. 'webhooks.nameRequired': '请输入 Webhook 名称',
  609. 'webhooks.url': '回调 URL',
  610. 'webhooks.urlPlaceholder': 'https://example.com/webhooks/mailhub',
  611. 'webhooks.urlRequired': '请输入回调 URL',
  612. 'webhooks.urlHint': '生产环境请使用 HTTPS。签名校验使用 X-MailHub-Signature 请求头。',
  613. 'webhooks.events': '订阅事件',
  614. 'webhooks.eventsRequired': '请至少选择一个事件',
  615. 'webhooks.eventSent': '已送达',
  616. 'webhooks.eventBounced': '已退信',
  617. 'webhooks.eventFailed': '失败',
  618. 'webhooks.eventOpened': '已打开',
  619. 'webhooks.eventClicked': '已点击',
  620. 'webhooks.eventReceived': '邮件到达',
  621. 'webhooks.enabled': '启用',
  622. 'webhooks.disabled': '已停用',
  623. 'webhooks.scope': '作用域',
  624. 'webhooks.scopeAccount': '账号级',
  625. 'webhooks.scopeDomain': '域名级',
  626. 'webhooks.scopeMailbox': '收信邮箱',
  627. 'webhooks.domain': '域名',
  628. 'webhooks.domainAccount': '整个账号',
  629. 'webhooks.domainOverrideHelp': '若某域名对某一事件存在任何已启用的端点,则该事件不会再投递到账号级端点。',
  630. 'webhooks.mailboxReceiptHelp': '仅在邮件成功保存到该邮箱后投递 email.received;仅转发而未保留的邮件不会触发。',
  631. 'webhooks.secret': '签名密钥',
  632. 'webhooks.secretPrefix': '密钥前缀',
  633. 'webhooks.secretCreatedTitle': 'Webhook 密钥已创建',
  634. 'webhooks.secretRotatedTitle': 'Webhook 密钥已轮换',
  635. 'webhooks.secretCreatedWarning': '完整密钥只会显示这一次。关闭后无法再次查看,请立即复制并保存到安全位置。',
  636. 'webhooks.copySecret': '复制完整密钥',
  637. 'webhooks.rotateSecret': '轮换密钥',
  638. 'webhooks.rotateConfirm': '确认轮换该 Webhook 的签名密钥?旧密钥将立即失效。',
  639. 'webhooks.test': '发送测试',
  640. 'webhooks.testQueued': '测试投递已入队',
  641. 'webhooks.deleteConfirm': '确认删除该 Webhook?相关投递记录也会一并删除。',
  642. 'webhooks.empty': '暂无 Webhook。创建后即可接收投递状态回调。',
  643. 'webhooks.listTitle': '端点列表',
  644. 'webhooks.loadFailed': 'Webhook 端点加载失败',
  645. 'webhooks.recentDeliveriesUnavailable': '最近投递状态暂不可用',
  646. 'webhooks.resourcesUnavailable': '域名或邮箱选项暂不可用',
  647. 'webhooks.actions': '操作',
  648. 'webhooks.deliveriesTitle': '投递记录',
  649. 'webhooks.deliveriesEmpty': '暂无投递记录',
  650. 'webhooks.deliveriesFilterWebhook': '按 Webhook 筛选',
  651. 'webhooks.deliveriesFilterStatus': '按状态筛选',
  652. 'webhooks.deliveriesFilterEvent': '按事件筛选',
  653. 'webhooks.allWebhooks': '全部 Webhook',
  654. 'webhooks.allStatuses': '全部状态',
  655. 'webhooks.allEvents': '全部事件',
  656. 'webhooks.statusPending': '待投递',
  657. 'webhooks.statusProcessing': '投递中',
  658. 'webhooks.statusSuccess': '成功',
  659. 'webhooks.statusDead': '已放弃',
  660. 'webhooks.attemptCount': '尝试次数',
  661. 'webhooks.responseStatus': 'HTTP 状态',
  662. 'webhooks.error': '错误',
  663. 'webhooks.replay': '重放',
  664. 'webhooks.replaySuccess': '投递已重新入队',
  665. 'webhooks.lastAttemptAt': '最近尝试',
  666. 'webhooks.nextAttemptAt': '下次尝试',
  667. 'webhooks.createdAt': '创建时间',
  668. 'webhooks.viewDeliveries': '查看投递',
  669. 'webhooks.docsTitle': '回调说明',
  670. 'webhooks.docsSignature': '使用 HMAC-SHA256 校验请求体;签名放在 X-MailHub-Signature。',
  671. 'webhooks.docsEvents': '事件类型:sent、bounced、failed、opened、clicked;收信邮箱可额外订阅 received。',
  672. 'testMail.title': '发送测试邮件',
  673. 'testMail.fromRequired': '请输入发件人',
  674. 'testMail.toRequired': '请输入收件人',
  675. 'actions.domainCreated': '域名已创建',
  676. 'actions.dnsCheckCompleted': 'DNS 检查已完成',
  677. 'actions.dnsCheckRefreshed': 'DNS 检查已刷新',
  678. 'actions.dnsApplyCompleted': 'DNS 写入请求已完成',
  679. 'actions.dnsApplyPartial': 'DNS 写入部分失败',
  680. 'actions.domainSaved': '域名配置已保存',
  681. 'actions.domainDeleted': '域名已删除',
  682. 'actions.testMailQueued': '已提交到发信队列',
  683. 'actions.dnsApiCreated': 'DNS API 已新增',
  684. 'actions.dnsApiUpdated': 'DNS API 已更新',
  685. 'actions.dnsApiDeleted': 'DNS API 已删除',
  686. 'actions.dnsApiTestCompleted': '连接测试完成',
  687. 'actions.smtpCreated': 'SMTP 登录凭据已新增',
  688. 'actions.smtpUpdated': 'SMTP 登录凭据已更新',
  689. 'actions.smtpDeleted': 'SMTP 登录凭据已删除',
  690. 'actions.smtpRelayCreated': 'SMTP 出口已新增',
  691. 'actions.smtpRelayUpdated': 'SMTP 出口已更新',
  692. 'actions.smtpRelayDeleted': 'SMTP 出口已删除',
  693. 'actions.inboundMailboxCreated': '收信邮箱已新增',
  694. 'actions.settingsSaved': '系统设置已保存',
  695. 'actions.webhookCreated': 'Webhook 已创建',
  696. 'actions.webhookUpdated': 'Webhook 已更新',
  697. 'actions.webhookDeleted': 'Webhook 已删除',
  698. 'actions.webhookSecretRotated': 'Webhook 密钥已轮换',
  699. 'actions.webhookTestQueued': 'Webhook 测试已入队',
  700. 'actions.webhookDeliveryReplayed': 'Webhook 投递已重放',
  701. 'nav.dashboard': '仪表盘',
  702. 'nav.overview': '概览',
  703. 'nav.activity': '发送活动',
  704. 'nav.domains': '发信域名',
  705. 'nav.dnsApi': 'DNS 集成',
  706. 'nav.smtp': 'SMTP 与中继',
  707. 'nav.inbox': '收件箱',
  708. 'nav.tokens': 'API 密钥',
  709. 'nav.logs': '发送记录',
  710. 'nav.webhooks': 'Webhooks',
  711. 'nav.smtpIntegration': 'SMTP 与中继',
  712. 'nav.apiKeys': 'API 密钥',
  713. 'nav.dnsIntegration': 'DNS 集成',
  714. 'nav.adminCenter': '管理中心',
  715. 'nav.admin': '管理中心',
  716. 'nav.settings': '系统设置',
  717. 'nav.group.overview': '概览',
  718. 'nav.group.delivery': '投递',
  719. 'nav.group.operations': '运行中心',
  720. 'nav.group.integrations': '接入与集成',
  721. 'nav.group.system': '系统'
  722. },
  723. 'en-US': {
  724. 'common.account': 'Account',
  725. 'common.addDomain': 'Add Domain',
  726. 'common.actions': 'Actions',
  727. 'common.cancel': 'Cancel',
  728. 'common.confirm': 'Confirm',
  729. 'common.copy': 'Copy',
  730. 'common.copied': 'Copied',
  731. 'common.delete': 'Delete',
  732. 'common.details': 'Details',
  733. 'common.edit': 'Edit',
  734. 'common.error': 'Operation failed',
  735. 'common.loadingConfig': 'Loading runtime config',
  736. 'common.logout': 'Log out',
  737. 'common.manual': 'Manual',
  738. 'common.next': 'Next',
  739. 'common.notConfigured': 'Not configured',
  740. 'common.notFound': 'None',
  741. 'common.previous': 'Previous',
  742. 'common.refresh': 'Refresh',
  743. 'common.save': 'Save',
  744. 'common.status': 'Status',
  745. 'common.user': 'User',
  746. 'common.unsetSendingIp': 'Sending IP not set',
  747. 'shell.skipToMain': 'Skip to main content',
  748. 'shell.mainNavigation': 'Main navigation',
  749. 'shell.openNavigation': 'Open main navigation',
  750. 'shell.closeNavigation': 'Close main navigation',
  751. 'shell.accountMenu': 'Account menu',
  752. 'shell.envReady': 'Environment healthy',
  753. 'shell.envNeedsSetup': 'Environment needs setup',
  754. 'shell.loadingFailed': 'Console failed to load',
  755. 'shell.retry': 'Retry',
  756. 'shell.backToLogin': 'Back to login',
  757. 'shell.forbiddenTitle': 'Access denied',
  758. 'shell.forbiddenDescription': 'This page is available to system administrators only.',
  759. 'shell.notFoundTitle': 'Page not found',
  760. 'shell.notFoundDescription': 'The link may be stale or the address may be incorrect.',
  761. 'shell.backOverview': 'Back to overview',
  762. 'shell.loadingConsole': 'Loading console',
  763. 'shell.loadingPage': 'Loading page',
  764. 'auth.email': 'Email',
  765. 'auth.emailPlaceholder': 'name@example.com',
  766. 'auth.backToLogin': 'Back to sign in',
  767. 'auth.forgotPassword': 'Forgot password?',
  768. 'auth.forgotPasswordButton': 'Send reset email',
  769. 'auth.forgotPasswordTitle': 'Recover password',
  770. 'auth.login': 'Sign in',
  771. 'auth.loginEyebrow': 'Sign in',
  772. 'auth.loginTitle': 'Sign in to console',
  773. 'auth.newPassword': 'New password',
  774. 'auth.password': 'Password',
  775. 'auth.register': 'Register',
  776. 'auth.registerButton': 'Create account',
  777. 'auth.registerEyebrow': 'Register',
  778. 'auth.registerTitle': 'Create account',
  779. 'auth.resendVerification': 'Resend verification email',
  780. 'auth.resendVerificationButton': 'Send verification email',
  781. 'auth.resendVerificationTitle': 'Resend verification email',
  782. 'auth.resetPasswordButton': 'Reset password',
  783. 'auth.resetPasswordTitle': 'Reset password',
  784. 'auth.resetTokenMissing': 'The reset link is missing a token. Please request a new password reset.',
  785. 'auth.submitLogin': 'Sign in',
  786. 'auth.username': 'Username',
  787. 'auth.usernameOrEmail': 'Username or email',
  788. 'auth.valueDns': 'DNS automation',
  789. 'auth.valueIsolation': 'User isolation',
  790. 'auth.valueObservability': 'Delivery visibility',
  791. 'auth.subtitle': 'One console for sending domains, DNS, SMTP, and API keys',
  792. 'auth.requestFailed': 'Request failed.',
  793. 'dashboard.title': 'Analytics',
  794. 'dashboard.verifiedDomains': 'Verified domains',
  795. 'dashboard.todaySent': 'Sent today',
  796. 'dashboard.successRate': 'Success rate',
  797. 'dashboard.bounceRate': 'Bounce rate',
  798. 'dashboard.complaintRate': 'Complaint rate',
  799. 'dashboard.lastSentAt': 'Last sent',
  800. 'dashboard.dnsIssues': 'DNS issues',
  801. 'dashboard.smtpStatus': 'SMTP status',
  802. 'dashboard.smtpReady': 'Ready',
  803. 'dashboard.smtpNotConfigured': 'Not configured',
  804. 'dashboard.trend': 'Sending trend',
  805. 'dashboard.statusDistribution': 'Status distribution',
  806. 'dashboard.domainRanking': 'Domain ranking',
  807. 'dashboard.domainHealth': 'Domain health',
  808. 'dashboard.hourlyHeatmap': 'Hourly distribution',
  809. 'dashboard.deliveryFunnel': 'Delivery funnel',
  810. 'dashboard.failureReasons': 'Top failure reasons',
  811. 'dashboard.recentFailures': 'Recent failures',
  812. 'dashboard.recentLogs': 'Recent sending logs',
  813. 'dashboard.noTrend': 'No trend data yet',
  814. 'dashboard.noDomains': 'No domains yet',
  815. 'dashboard.noFailures': 'No failures yet',
  816. 'dashboard.defaultPasswordWarning': 'The default admin password is still in use. Update .env and restart the service.',
  817. 'dashboard.acceptedMail': 'Accepted mail',
  818. 'dashboard.failedMail': 'Failed mail',
  819. 'dashboard.dnsActionHint': 'Handle domains with DNS issues first to protect delivery for new senders.',
  820. 'dashboard.statusQueued': 'Accepted',
  821. 'dashboard.statusFailed': 'Failed',
  822. 'dashboard.statusUnknown': 'Unknown',
  823. 'dashboard.stageSubmitted': 'Submitted',
  824. 'dashboard.stageAccepted': 'Accepted',
  825. 'dashboard.stageDelivered': 'Delivered',
  826. 'dashboard.stagePending': 'Pending',
  827. 'dashboard.stageFailed': 'Failed',
  828. 'dashboard.opens': 'Opens',
  829. 'dashboard.clicks': 'Clicks',
  830. 'dashboard.openRate': 'Open rate',
  831. 'dashboard.clickRate': 'Click rate',
  832. 'dashboard.clickToOpenRate': 'Click-to-open rate',
  833. 'dashboard.unique': 'unique',
  834. 'dashboard.total': 'total',
  835. 'dashboard.trackedDelivered': 'Tracked delivered',
  836. 'dashboard.measuredActivity': 'Measured activity',
  837. 'dashboard.proxyOpens': 'Proxy opens',
  838. 'dashboard.scannerEvents': 'Scanner events',
  839. 'dashboard.engagementTrend': 'Open and click trend',
  840. 'dashboard.topLinks': 'Top links',
  841. 'dashboard.link': 'Link',
  842. 'dashboard.uniqueClicks': 'Unique clicks',
  843. 'dashboard.totalClicks': 'Total clicks',
  844. 'dashboard.lastClicked': 'Last clicked',
  845. 'dashboard.noEngagement': 'No engagement data yet',
  846. 'domains.title': 'Sending domains',
  847. 'domains.domain': 'Domain',
  848. 'domains.senderHost': 'Sending host',
  849. 'domains.sendingIp': 'Sending IP',
  850. 'domains.dnsApi': 'DNS API',
  851. 'domains.smtp': 'SMTP',
  852. 'domains.lastSent': 'Last sent',
  853. 'domains.overallStatus': 'Overall status',
  854. 'domains.actions': 'Actions',
  855. 'domains.searchPlaceholder': 'Search domain or sending host',
  856. 'domains.statusPlaceholder': 'Overall status',
  857. 'domains.healthy': 'Healthy',
  858. 'domains.pending': 'Pending',
  859. 'domains.needsAction': 'Needs action',
  860. 'domains.waitingDns': 'Waiting for DNS',
  861. 'domains.sendable': 'Sendable',
  862. 'domains.waitingVerify': 'Waiting verification',
  863. 'domains.oneClickDns': 'One-click DNS',
  864. 'domains.check': 'Check',
  865. 'domains.test': 'Test',
  866. 'domains.deleteConfirm': 'Delete this domain?',
  867. 'domainDetail.back': 'Back to domains',
  868. 'domainDetail.overview': 'Domain overview',
  869. 'domainDetail.danger': 'Danger zone',
  870. 'domainDetail.deleteHint': 'Deleting the domain removes MailHub configuration, but does not delete records at your DNS provider.',
  871. 'domainDetail.editTitle': 'Edit domain settings',
  872. 'domainDetail.lastCheck': 'Last check',
  873. 'domainDetail.notChecked': 'Not checked',
  874. 'domainDetail.noDnsResult': 'No DNS check result yet',
  875. 'domainDetail.currentDnsResult': 'Current DNS results',
  876. 'domainDetail.recheckAll': 'Recheck all',
  877. 'domainDetail.copyAll': 'Copy all records',
  878. 'domainDetail.noPublicDns': 'No public DNS query data',
  879. 'domainDetail.notFoundRecord': 'Not found',
  880. 'domainDetail.needAttention': 'Needs attention',
  881. 'domainDetail.noSmtpPassword': 'Reset it on the SMTP page before copying',
  882. 'domainDetail.noApiToken': 'No token yet',
  883. 'domainDetail.apiExample': 'Sending API example',
  884. 'domainDetail.placeholder': 'configuration will be connected in a later version',
  885. 'dnsRecord.hostname': 'Hostname',
  886. 'dnsRecord.targetValue': 'Target value',
  887. 'dnsRecord.currentValue': 'Current value',
  888. 'dnsRecord.emptyCurrent': 'No record found',
  889. 'dnsRecord.ptrHint': 'PTR is usually configured at your server, cloud, or IP provider. DNS APIs usually cannot write it directly.',
  890. 'dnsRecord.recheck': 'Recheck',
  891. 'dnsRecord.copyLabel': 'Copy',
  892. 'dnsRecord.rootTxt': 'Root TXT',
  893. 'dnsRecord.verificationTxt': 'Verification TXT',
  894. 'dnsRecord.dkimTxt': 'DKIM TXT',
  895. 'dnsRecord.dmarcTxt': 'DMARC TXT',
  896. 'dnsRecord.senderA': 'Sending host A',
  897. 'dnsRecord.ptr': 'Sending IP PTR',
  898. 'domainHealth.sendingDomain': 'Sending domain',
  899. 'domainHealth.dnsProgress': 'DNS check progress',
  900. 'domainHealth.passed': 'passed',
  901. 'domainHealth.dnsIssues': 'DNS issues',
  902. 'domainHealth.dnsApi': 'DNS API',
  903. 'domainHealth.oneClickDns': 'Configure DNS',
  904. 'domainHealth.checkNow': 'Check now',
  905. 'domainHealth.sendTest': 'Send test email',
  906. 'domainHealth.edit': 'Edit settings',
  907. 'addDomain.title': 'Add sending domain',
  908. 'addDomain.stepDomain': 'Domain',
  909. 'addDomain.stepDns': 'DNS method',
  910. 'addDomain.stepPolicy': 'DKIM / SPF / DMARC',
  911. 'addDomain.stepConfirm': 'Confirm',
  912. 'addDomain.create': 'Create domain',
  913. 'addDomain.domainExtra': 'Use the root domain without http, paths, or email addresses.',
  914. 'addDomain.domainRequired': 'Enter the sending domain',
  915. 'addDomain.senderHostRequired': 'Enter the sending host',
  916. 'addDomain.sendingIpRequired': 'Enter the sending IP',
  917. 'addDomain.dnsExtra': 'You can create the domain without a credential and configure DNS manually later.',
  918. 'addDomain.manualDns': 'Manual DNS',
  919. 'addDomain.dnsHint': 'With a DNS API credential, the detail page can write verification, DKIM, SPF, DMARC, and sending host A records.',
  920. 'addDomain.selectorRequired': 'Enter the DKIM selector',
  921. 'addDomain.spfExtra': 'Third-party SPF includes',
  922. 'addDomain.generatedTitle': 'MailHub will generate',
  923. 'addDomain.recordVerification': 'Domain verification TXT',
  924. 'addDomain.recordDkim': 'DKIM TXT',
  925. 'addDomain.recordSpf': 'SPF TXT',
  926. 'addDomain.recordDmarc': 'DMARC TXT',
  927. 'addDomain.recordSenderA': 'Sending host A record',
  928. 'addDomain.recordPtr': 'PTR reverse DNS check hint',
  929. 'addDomain.immediateCheck': 'Check DNS immediately after creation',
  930. 'logs.title': 'Sending logs',
  931. 'logs.time': 'Time',
  932. 'logs.recipient': 'Recipient',
  933. 'logs.domain': 'Sending domain',
  934. 'logs.errorReason': 'Error reason',
  935. 'logs.viewDetail': 'View detail',
  936. 'logs.domainPlaceholder': 'Sending domain',
  937. 'logs.statusPlaceholder': 'Status',
  938. 'logs.recipientPlaceholder': 'Search recipient',
  939. 'logs.detailTitle': 'Sending detail',
  940. 'logs.deliveryLog': 'Full delivery log',
  941. 'logs.copyDeliveryLog': 'Copy delivery log',
  942. 'logs.noDeliveryLog': 'No structured delivery log. This may be a historical event.',
  943. 'logs.sender': 'Sender',
  944. 'logs.subject': 'Subject',
  945. 'logs.messageId': 'Message ID',
  946. 'logs.finalResponse': 'Final response',
  947. 'logs.messageBytes': 'Message bytes',
  948. 'logs.queueId': 'Postfix Queue ID',
  949. 'logs.deliveredAt': 'Delivered at',
  950. 'logs.trackingTimeline': 'Delivery timeline',
  951. 'logs.noTrackingTimeline': 'No delivery timeline is available.',
  952. 'logs.trackingTimelineTruncated': 'Only the latest 500 engagement events are shown; summary metrics include all events.',
  953. 'logs.trackingLinksTruncated': 'Only the top 200 links by clicks are shown; summary metrics include all links.',
  954. 'logs.deliveryAttempts': 'Delivery attempts',
  955. 'logs.noDeliveryAttempts': 'No final delivery receipt yet. The message may still be queued or historical.',
  956. 'logs.webhookDeliveries': 'Webhook callbacks',
  957. 'logs.noWebhookDeliveries': 'No related webhook callbacks.',
  958. 'logs.detailLoadFailed': 'Failed to load sending detail.',
  959. 'logs.detailNotFound': 'Sending record not found.',
  960. 'logs.stageSubmitted': 'Submitted',
  961. 'logs.stageAccepted': 'Accepted',
  962. 'logs.stageDelivered': 'Delivered',
  963. 'logs.stagePending': 'Pending',
  964. 'logs.stageFailed': 'Failed',
  965. 'logs.stageOpened': 'Opened',
  966. 'logs.stageClicked': 'Clicked',
  967. 'logs.stageWebhook': 'Webhook callback',
  968. 'logs.engagement': 'Engagement tracking',
  969. 'logs.opens': 'Opens',
  970. 'logs.clicks': 'Clicks',
  971. 'logs.trackingDisabled': 'Open and click tracking was not enabled when this email was sent.',
  972. 'logs.trackingDisabledShort': 'Off',
  973. 'logs.trackingScope': 'Tracking scope',
  974. 'logs.messageLevel': 'Message-level (multiple recipients)',
  975. 'logs.recipientLevel': 'Single recipient',
  976. 'logs.firstOpened': 'First opened',
  977. 'logs.lastOpened': 'Last opened',
  978. 'logs.firstClicked': 'First clicked',
  979. 'logs.lastClicked': 'Last clicked',
  980. 'logs.proxyOpens': 'Proxy opens',
  981. 'logs.scannerEvents': 'Scanner events',
  982. 'logs.statusQueued': 'Queued',
  983. 'logs.statusSent': 'Sent',
  984. 'logs.statusDeferred': 'Deferred',
  985. 'logs.statusBounced': 'Bounced',
  986. 'logs.statusFailed': 'Failed',
  987. 'inbox.title': 'Inbox',
  988. 'inbox.subtitle': 'Manage local receiving mailboxes and read mail accepted by MailHub SMTP.',
  989. 'inbox.createMailbox': 'New mailbox',
  990. 'inbox.inboundDisabled': 'Inbound receiving is disabled. Set INBOUND_ENABLED=true and restart the service.',
  991. 'inbox.clientHelpTitle': 'Client setup help',
  992. 'inbox.clientHelpIntro': 'After creating a mailbox, open Client configuration to copy the receiving and sending settings for third-party mail apps.',
  993. 'inbox.clientHelpImap': 'Use IMAP first when possible; it stays synchronized with the MailHub inbox.',
  994. 'inbox.clientHelpPop3': 'Use POP3 when you want to download mail locally; messages deleted by the client are removed from MailHub on quit.',
  995. 'inbox.clientHelpAuth': 'Use the full email address as the username and the password set when the mailbox was created or reset.',
  996. 'inbox.clientHelpSecurity': 'Prefer SSL/TLS ports 993/995/465, or enable STARTTLS/STLS on 143/110/587.',
  997. 'inbox.clientHelpPorts': 'Allow IMAP 143/993, POP3 110/995, and SMTP 587/465 in the server firewall and cloud security group.',
  998. 'inbox.mailboxes': 'Mailboxes',
  999. 'inbox.domainRoutes': 'Domain receiving routes',
  1000. 'inbox.mailboxUnit': 'mailboxes',
  1001. 'inbox.catchAllAddress': 'Catch-all mailbox',
  1002. 'inbox.catchAllDisabled': 'Disabled',
  1003. 'inbox.catchAllTitle': 'Catch-all mailbox',
  1004. 'inbox.catchAllExtra': 'Leave empty to reject unknown recipients. Use an email address to deliver/forward, or /dev/null to accept and discard.',
  1005. 'inbox.mailboxAddress': 'Mailbox address',
  1006. 'inbox.password': 'Password',
  1007. 'inbox.passwordRequired': 'Enter the mailbox password',
  1008. 'inbox.passwordMin': 'Mailbox password must be at least 8 characters',
  1009. 'inbox.generatePassword': 'Generate',
  1010. 'inbox.quotaMb': 'Quota',
  1011. 'inbox.unlimited': 'Unlimited',
  1012. 'inbox.aliases': 'Aliases',
  1013. 'inbox.aliasesExtra': 'One local part per line. For example, sales accepts sales@this domain.',
  1014. 'inbox.forwardTo': 'Forward to',
  1015. 'inbox.forwardToExtra': 'One or more email addresses, separated by line breaks, commas, or spaces.',
  1016. 'inbox.keepForwarded': 'Keep forwarded mail',
  1017. 'inbox.forwardOnly': 'Forward only',
  1018. 'inbox.clientConfig': 'Client configuration',
  1019. 'inbox.mailboxWebhooks': 'Mail arrival webhook',
  1020. 'inbox.clientConfigHelpSummary': 'Configure IMAP first for receiving mail. Use POP3 only when you need local download behavior. Passwords are shown only on create or reset.',
  1021. 'inbox.configUsername': 'Username',
  1022. 'inbox.configPassword': 'Password',
  1023. 'inbox.passwordNotShown': 'Shown only on create or reset',
  1024. 'inbox.incomingConfig': 'IMAP configuration',
  1025. 'inbox.pop3Config': 'POP3 configuration',
  1026. 'inbox.outgoingConfig': 'Outgoing configuration',
  1027. 'inbox.configProtocol': 'Protocol',
  1028. 'inbox.configHost': 'Host',
  1029. 'inbox.configPort': 'Port',
  1030. 'inbox.configSecurity': 'Security',
  1031. 'inbox.configAuthMethod': 'Auth method',
  1032. 'inbox.unread': 'Unread',
  1033. 'inbox.messageCount': 'Messages',
  1034. 'inbox.lastMessageAt': 'Last received',
  1035. 'inbox.noDomain': 'Add a domain before creating receiving mailboxes for it.',
  1036. 'inbox.noMailboxDomain': 'Add your own domain, or ask a domain owner to share a domain for mailbox creation.',
  1037. 'inbox.ownDomain': 'My domain',
  1038. 'inbox.sharedDomain': 'Shared domain',
  1039. 'inbox.messages': 'Inbound messages',
  1040. 'inbox.mailboxFilter': 'Mailbox',
  1041. 'inbox.searchPlaceholder': 'Search sender, subject, or preview',
  1042. 'inbox.receivedAt': 'Received at',
  1043. 'inbox.subject': 'Subject',
  1044. 'inbox.noSubject': '(no subject)',
  1045. 'inbox.sender': 'Sender',
  1046. 'inbox.mailbox': 'Mailbox',
  1047. 'inbox.read': 'Read',
  1048. 'inbox.preview': 'Preview',
  1049. 'inbox.localPart': 'Local part',
  1050. 'inbox.localPartRequired': 'Enter the local part',
  1051. 'inbox.localPartInvalid': 'The local part cannot contain @ or spaces',
  1052. 'inbox.domainRequired': 'Select a domain',
  1053. 'inbox.displayName': 'Display name',
  1054. 'inbox.messageDetail': 'Message detail',
  1055. 'inbox.copyRaw': 'Copy raw',
  1056. 'inbox.recipients': 'Recipients',
  1057. 'inbox.textBody': 'Text body',
  1058. 'inbox.htmlBody': 'HTML preview',
  1059. 'inbox.htmlSource': 'HTML source',
  1060. 'inbox.rawMessage': 'Raw MIME',
  1061. 'inbox.noTextBody': 'No text body',
  1062. 'inbox.noHtmlBody': 'No HTML body',
  1063. 'inbox.noRawMessage': 'No raw MIME',
  1064. 'inbox.messageNotFound': 'Message not found or deleted.',
  1065. 'inbox.detailLoadFailed': 'Failed to load message detail.',
  1066. 'inbox.noReceivingAccess': 'This account does not have permission to receive mail for any mailbox.',
  1067. 'inbox.ownerManaged': 'Managed by the mailbox owner',
  1068. 'inbox.deleteMailbox': 'Delete mailbox',
  1069. 'inbox.deleteMailboxTitle': 'Migrate mail and delete mailbox',
  1070. 'inbox.deleteMailboxAction': 'Migrate mail and delete',
  1071. 'inbox.deleteMailboxWarning': 'MailHub first migrates every message in the source mailbox to the target mailbox, then disables and removes the source mailbox account.',
  1072. 'inbox.deleteMailboxEmptyWarning': 'This mailbox has no messages, so its account can be disabled and removed directly.',
  1073. 'inbox.deleteMailboxEmptyAction': 'Delete mailbox',
  1074. 'inbox.deleteMailboxSource': 'Mailbox to delete',
  1075. 'inbox.deleteMailboxMessages': 'Messages to migrate',
  1076. 'inbox.deleteMailboxTarget': 'Target mailbox',
  1077. 'inbox.deleteMailboxTargetPlaceholder': 'Select the mailbox that will receive these messages',
  1078. 'inbox.deleteMailboxTargetRequired': 'Select a target mailbox',
  1079. 'inbox.deleteMailboxNoTarget': 'There is no other mailbox you can manage. Create a target mailbox before deleting this one.',
  1080. 'inbox.deleteMailboxConfirmAddress': 'Enter the full mailbox address to confirm',
  1081. 'inbox.deleteMailboxConfirmAddressExtra': 'To prevent accidental deletion, enter the full source mailbox address shown above.',
  1082. 'inbox.deleteMailboxConfirmAddressMismatch': 'The entered address does not match the mailbox being deleted.',
  1083. 'account.title': 'Account & mailbox access',
  1084. 'account.subtitle': 'Review your account and mailboxes you own or an administrator assigned.',
  1085. 'account.summary': 'Account information',
  1086. 'account.role': 'Role',
  1087. 'account.mailboxAccess': 'My mailbox access',
  1088. 'account.accessSource': 'Access source',
  1089. 'account.permissions': 'Permissions',
  1090. 'account.owned': 'Owned',
  1091. 'account.assigned': 'Assigned',
  1092. 'account.ownedMailbox': 'Owned mailbox',
  1093. 'account.adminAssigned': 'Admin assigned',
  1094. 'account.adminAccess': 'Administrator access',
  1095. 'account.openInbox': 'Open inbox',
  1096. 'account.manageMailbox': 'Manage mailbox',
  1097. 'account.noMailboxes': 'This account does not own or have access to any mailboxes yet.',
  1098. 'mailboxPermission.view': 'View configuration',
  1099. 'mailboxPermission.receive': 'Receive mail',
  1100. 'mailboxPermission.send': 'Send mail',
  1101. 'mailboxPermission.none': 'No access',
  1102. 'smtp.connectionTitle': 'SMTP connection',
  1103. 'smtp.loginCredentialsTitle': 'SMTP credentials',
  1104. 'smtp.username': 'Username',
  1105. 'smtp.password': 'Password',
  1106. 'smtp.usernameRequired': 'Enter SMTP username',
  1107. 'smtp.passwordRequired': 'Enter SMTP password',
  1108. 'smtp.passwordSet': 'Set',
  1109. 'smtp.passwordEmpty': 'Empty',
  1110. 'smtp.passwordUnavailable': 'Reset before copying',
  1111. 'smtp.create': 'New credential',
  1112. 'smtp.createTitle': 'New SMTP credential',
  1113. 'smtp.editTitle': 'Edit SMTP credential',
  1114. 'smtp.deleteConfirm': 'Delete this SMTP login credential?',
  1115. 'smtp.passwordExtra': 'Leave empty to keep the current password. Saved passwords are never shown again.',
  1116. 'smtp.regenerate': 'Regenerate password',
  1117. 'smtp.resetToCopy': 'Reset before copying',
  1118. 'smtpRelay.title': 'Sending relays',
  1119. 'smtpRelay.create': 'New relay',
  1120. 'smtpRelay.createTitle': 'New outbound SMTP relay',
  1121. 'smtpRelay.editTitle': 'Edit outbound SMTP relay',
  1122. 'smtpRelay.name': 'Name',
  1123. 'smtpRelay.nameRequired': 'Enter the relay name',
  1124. 'smtpRelay.server': 'Server',
  1125. 'smtpRelay.hostRequired': 'Enter SMTP Host',
  1126. 'smtpRelay.portRequired': 'Enter SMTP Port',
  1127. 'smtpRelay.username': 'Username',
  1128. 'smtpRelay.password': 'Password',
  1129. 'smtpRelay.passwordSet': 'Set',
  1130. 'smtpRelay.passwordEmpty': 'Empty',
  1131. 'smtpRelay.passwordExtra': 'Leave empty to keep the current password. Saved passwords are never shown again.',
  1132. 'smtpRelay.generatePassword': 'Generate password',
  1133. 'smtpRelay.heloExtra': 'Leave empty to use the system default HELO.',
  1134. 'smtpRelay.default': 'Default',
  1135. 'smtpRelay.domainDefault': 'Default outbound SMTP relay',
  1136. 'smtpRelay.domainDefaultExtra': 'When empty, MailHub uses request relay, user default relay, then system SMTP.',
  1137. 'smtpRelay.useResolutionOrder': 'Use default selection order',
  1138. 'smtpRelay.deleteConfirm': 'Delete this SMTP relay? Bound domains will fall back to the default selection order.',
  1139. 'dnsApi.title': 'DNS integration credentials',
  1140. 'dnsApi.createTitle': 'New DNS integration credential',
  1141. 'dnsApi.editTitle': 'Edit',
  1142. 'dnsApi.zone': 'Zone / root domain',
  1143. 'dnsApi.zoneRequired': 'Enter the Zone or root domain',
  1144. 'dnsApi.zoneExtra': 'Use any manageable Zone under this account for connection testing. One-click DNS matches the current sending domain automatically.',
  1145. 'dnsApi.cloudflareZoneExtra': 'For Cloudflare, use any accessible Zone for testing. One-click DNS matches the current sending domain automatically.',
  1146. 'dnsApi.tokenExtra': 'Requires Zone DNS Edit permission.',
  1147. 'dnsApi.keepSecret': 'Leave empty to keep the existing secret.',
  1148. 'dnsApi.save': 'Save changes',
  1149. 'dnsApi.create': 'Create credential',
  1150. 'dnsApi.secretHint': 'Secrets are encrypted server-side and never shown in the list.',
  1151. 'dnsApi.deleteConfirm': 'Delete this DNS integration credential? This provider will no longer be available for managing the associated zone.',
  1152. 'settings.checkItem': 'Check',
  1153. 'settings.deliveryChecks': 'Sending Environment Checks',
  1154. 'settings.noPermission': 'This account cannot access system settings.',
  1155. 'settings.save': 'Save settings',
  1156. 'settings.engagementTracking': 'Enable open and click tracking by default',
  1157. 'settings.registrationPolicy': 'Registration and accounts',
  1158. 'settings.registrationRequiresApproval': 'Require administrator approval after email verification',
  1159. 'settings.registrationRequiresApprovalHint': 'When off, verifying an email activates the account immediately. When on, the account remains pending until an administrator approves it.',
  1160. 'settings.approvalRequired': 'Review required',
  1161. 'settings.approvalNotRequired': 'Auto-activate',
  1162. 'admin.title': 'Admin center',
  1163. 'admin.users': 'Users',
  1164. 'admin.mailboxAccess': 'Mailbox access',
  1165. 'admin.resources': 'Resources',
  1166. 'admin.migration': 'Merge',
  1167. 'admin.systemEmail': 'System Email',
  1168. 'admin.auditLogs': 'Audit Logs',
  1169. 'adminMailboxAccess.title': 'Mailbox access management',
  1170. 'adminMailboxAccess.drawerTitle': 'Configure mailbox access',
  1171. 'adminMailboxAccess.search': 'Search mailbox, owner, or email address',
  1172. 'adminMailboxAccess.owner': 'Mailbox owner',
  1173. 'adminMailboxAccess.ownerPermissions': 'Owner permissions',
  1174. 'adminMailboxAccess.assignedUsers': 'Assigned users',
  1175. 'adminMailboxAccess.configure': 'Configure access',
  1176. 'adminMailboxAccess.permissions': 'Mailbox permissions',
  1177. 'adminMailboxAccess.permissionHint': 'Receive or send automatically includes view access. The mailbox owner always has full access and cannot be removed.',
  1178. 'adminMailboxAccess.permissionRequired': 'Select at least one permission for each user, or remove that grant row.',
  1179. 'adminMailboxAccess.user': 'Authorized user',
  1180. 'adminMailboxAccess.addUser': 'Add authorized user',
  1181. 'adminMailboxAccess.remove': 'Remove authorized user',
  1182. 'adminMailboxAccess.noAssignments': 'This mailbox has not been assigned to another user.',
  1183. 'adminMailboxAccess.noSearchResult': 'No mailboxes match this search.',
  1184. 'adminMailboxAccess.empty': 'There are no mailboxes to configure.',
  1185. 'adminMailboxAccess.notFound': 'The mailbox does not exist, was deleted, or is not accessible.',
  1186. 'adminMailboxAccess.duplicateUser': 'A user cannot be assigned more than once.',
  1187. 'adminMailboxAccess.disabledUser': 'Disabled',
  1188. 'adminMailboxAccess.saved': 'Mailbox access saved',
  1189. 'adminMailboxAccess.selectVisible': 'Select all filtered results',
  1190. 'adminMailboxAccess.selectMailbox': 'Select mailbox',
  1191. 'adminMailboxAccess.selectedVisible': 'In current results',
  1192. 'adminMailboxAccess.clearSelection': 'Clear selection',
  1193. 'adminMailboxAccess.bulkConfigure': 'Bulk access',
  1194. 'adminMailboxAccess.bulkTitle': 'Configure mailbox access in bulk',
  1195. 'adminMailboxAccess.bulkHint': 'Only the selected mailbox and user combinations are processed. Other users\' grants remain unchanged, and mailbox-owner combinations are skipped.',
  1196. 'adminMailboxAccess.bulkUpsertHint': 'Existing access for the selected mailbox and user combinations will be replaced with the permissions below. Other users\' grants remain unchanged, and mailbox-owner combinations are skipped.',
  1197. 'adminMailboxAccess.selectedMailboxes': 'Selected mailboxes',
  1198. 'adminMailboxAccess.selectedMailboxPreview': 'Selected mailbox preview',
  1199. 'adminMailboxAccess.bulkOperation': 'Bulk operation',
  1200. 'adminMailboxAccess.bulkUpsert': 'Set or replace access',
  1201. 'adminMailboxAccess.bulkRemove': 'Remove access',
  1202. 'adminMailboxAccess.bulkUsers': 'Authorized users',
  1203. 'adminMailboxAccess.bulkUsersPlaceholder': 'Select one or more users',
  1204. 'adminMailboxAccess.bulkSaveAction': 'Apply access',
  1205. 'adminMailboxAccess.bulkRemoveAction': 'Remove access',
  1206. 'adminMailboxAccess.bulkRemoveWarning': 'These users will be removed from every selected mailbox. Other users are not affected.',
  1207. 'adminMailboxAccess.bulkRemoveDisabledHint': 'Disabled users can be selected when removing access, but never when granting access.',
  1208. 'adminMailboxAccess.bulkRemoveConfirmTitle': 'Confirm bulk access removal',
  1209. 'adminMailboxAccess.bulkRemoveConfirmWarning': 'This removes existing grants from the selected mailbox and user combinations. It does not delete mailboxes or messages.',
  1210. 'adminMailboxAccess.bulkOwnerSkipPreview': 'Expected mailbox-owner combinations skipped',
  1211. 'adminMailboxAccess.bulkMailboxLimit': 'Maximum mailboxes per operation:',
  1212. 'adminMailboxAccess.bulkUserLimit': 'Maximum users per operation:',
  1213. 'adminMailboxAccess.bulkPairLimit': 'Maximum mailbox and user combinations per operation:',
  1214. 'adminMailboxAccess.bulkMailboxUnit': 'mailboxes',
  1215. 'adminMailboxAccess.bulkUserUnit': 'users',
  1216. 'adminMailboxAccess.bulkPairUnit': 'combinations',
  1217. 'adminMailboxAccess.bulkSaved': 'Bulk mailbox access updated',
  1218. 'adminMailboxAccess.bulkRemoved': 'Bulk mailbox access removed',
  1219. 'adminMailboxAccess.bulkChanged': 'Changed',
  1220. 'adminMailboxAccess.bulkUnchanged': 'Unchanged',
  1221. 'adminMailboxAccess.bulkSkippedOwner': 'Owners skipped',
  1222. 'metrics.accepted': 'Accepted',
  1223. 'metrics.failed': 'Failed',
  1224. 'metrics.recipients': 'Recipients',
  1225. 'metrics.total': 'Total',
  1226. 'status.success': 'Passed',
  1227. 'status.pending': 'Pending',
  1228. 'status.error': 'Misconfigured',
  1229. 'status.idle': 'Not configured',
  1230. 'tokens.createTitle': 'Create API key',
  1231. 'tokens.subtitle': 'Create, update, and revoke scoped tokens for sending and mailbox automation.',
  1232. 'tokens.name': 'Name',
  1233. 'tokens.namePlaceholder': 'Production API',
  1234. 'tokens.nameRequired': 'Enter a key name',
  1235. 'tokens.create': 'Create key',
  1236. 'tokens.edit': 'Edit key',
  1237. 'tokens.editTitle': 'Edit API key',
  1238. 'tokens.listTitle': 'API keys',
  1239. 'tokens.prefix': 'Token Prefix',
  1240. 'tokens.scopes': 'Scopes',
  1241. 'tokens.scopesRequired': 'Select at least one scope',
  1242. 'tokens.scopesExtra': 'Use send for delivery, mailboxes:read/mailboxes:write for mailbox resources, and messages:read for inbound message content.',
  1243. 'tokens.mailboxAccess': 'Mailbox access',
  1244. 'tokens.mailboxAccessOwner': 'All mailboxes owned by this account',
  1245. 'tokens.mailboxAccessSelected': 'Selected mailboxes',
  1246. 'tokens.mailboxAccessAll': 'All system mailboxes (admin)',
  1247. 'tokens.mailboxAccessExtra': 'Applies when the token includes send, mailboxes:read, or messages:read. Selected access may include assigned mailboxes; listing, message reads, and sending are still intersected with the account\'s current mailbox permissions.',
  1248. 'tokens.mailboxIds': 'Authorized mailboxes',
  1249. 'tokens.mailboxIdsRequired': 'Select at least one mailbox',
  1250. 'tokens.mailboxIdsPlaceholder': 'Select mailboxes this token can access',
  1251. 'tokens.status': 'Status',
  1252. 'tokens.statusActive': 'Active',
  1253. 'tokens.statusExpired': 'Expired',
  1254. 'tokens.statusRevoked': 'Revoked',
  1255. 'tokens.expiresAt': 'Expires at',
  1256. 'tokens.expiresAtExtra': 'Leave empty for no expiry. Uses local time.',
  1257. 'tokens.fullToken': 'Full Token',
  1258. 'tokens.copyFull': 'Copy full token',
  1259. 'tokens.copyPrefix': 'Copy prefix',
  1260. 'tokens.createdTitle': 'API key created',
  1261. 'tokens.createdWarning': 'The full token is stored encrypted and remains copyable from the list or detail view. Keep it only in a trusted server environment.',
  1262. 'tokens.createdSuccess': 'API key created',
  1263. 'tokens.rotatedTitle': 'API key regenerated',
  1264. 'tokens.rotatedSuccess': 'API key regenerated. The previous value stopped working immediately.',
  1265. 'tokens.rotatedWarning': 'The previous token stopped working immediately. Update every caller soon; the new full token remains copyable from the list or detail view.',
  1266. 'tokens.deletedSuccess': 'API key deleted',
  1267. 'tokens.updatedSuccess': 'API key updated',
  1268. 'tokens.revokedSuccess': 'API key revoked',
  1269. 'tokens.secretAvailable': 'The full token is stored encrypted and can be copied at any time.',
  1270. 'tokens.secretUnavailable': 'This legacy token cannot be recovered and is identifiable only by its prefix. Regenerating it immediately invalidates the old value.',
  1271. 'tokens.recoverable': 'Copyable',
  1272. 'tokens.unrecoverable': 'Not recoverable',
  1273. 'tokens.rotate': 'Regenerate',
  1274. 'tokens.rotateConfirm': 'Regenerate API key?',
  1275. 'tokens.rotateConfirmDescription': 'The previous token will stop working immediately. Every caller still using it will fail. This cannot be undone.',
  1276. 'tokens.lastUsed': 'Last used',
  1277. 'tokens.neverUsed': 'Never used',
  1278. 'tokens.createdAt': 'Created at',
  1279. 'tokens.actions': 'Actions',
  1280. 'tokens.deleteConfirm': 'Delete this API key?',
  1281. 'tokens.revoke': 'Revoke key',
  1282. 'tokens.revokeConfirm': 'This API key will stop working immediately. Continue?',
  1283. 'tokens.copyCreated': 'Copy full token',
  1284. 'tokens.prefixOnlyHelp': 'New tokens are stored encrypted and remain fully copyable. Legacy tokens may retain only a prefix and must be regenerated to become recoverable.',
  1285. 'tokens.docsTitle': 'API guide',
  1286. 'tokens.endpoint': 'API Endpoint',
  1287. 'tokens.mailboxEndpoint': 'Mailbox API Endpoint',
  1288. 'tokens.authHeader': 'Authentication',
  1289. 'tokens.authHeaderValue': 'Authorization: Bearer <USER_API_TOKEN>',
  1290. 'tokens.contentType': 'Content-Type',
  1291. 'tokens.requestFields': 'Request fields',
  1292. 'tokens.fieldFrom': 'from: an address on a domain this account can send from, or an assigned mailbox/alias with send permission that is included in the token\'s selected-mailbox scope. The sender domain must still be verified.',
  1293. 'tokens.fieldTo': 'to: recipient address. Single email or an array of emails.',
  1294. 'tokens.fieldSubject': 'subject: email subject.',
  1295. 'tokens.fieldText': 'text: plain text body.',
  1296. 'tokens.fieldHtml': 'html: optional HTML body.',
  1297. 'tokens.curlExample': 'curl example',
  1298. 'tokens.nodeExample': 'Node / Fetch example',
  1299. 'tokens.requestExample': 'Request body example',
  1300. 'tokens.responseExample': 'Success response example',
  1301. 'tokens.sendApi': 'Send API',
  1302. 'tokens.mailboxApi': 'Create mailbox API',
  1303. 'tokens.mailboxApiHint': 'Use mode=permanent for a persistent mailbox. Use mode=temporary with expiresInMinutes for a temporary mailbox. When address is omitted, the server generates an address and password from domain.',
  1304. 'tokens.permanentMailbox': 'Create a persistent mailbox',
  1305. 'tokens.temporaryMailbox': 'Create a temporary mailbox',
  1306. 'tokens.mailboxResponse': 'Creation result and client configuration',
  1307. 'tokens.messagesApi': 'Inbound message API',
  1308. 'tokens.messagesApiHint': 'Requires messages:read and is limited by both the token mailbox-access setting and the account\'s receive permission. Lists support pagination plus mailbox, folder, read-state, and keyword filters.',
  1309. 'tokens.messagesList': 'List inbound messages',
  1310. 'tokens.messageDetail': 'Read message detail',
  1311. 'tokens.mailboxFolders': 'List mailbox folders',
  1312. 'tokens.messagesFilters': 'Filters: page/pageSize control pagination; mailboxId limits one mailbox; folder limits one folder; read accepts true/false; q searches sender, recipients, subject, Message ID, and preview.',
  1313. 'tokens.messagesAccess': 'Access: account scope covers only mailboxes owned by the token owner; selected scope covers chosen IDs; all-system scope must be explicitly selected by an administrator. Message reads and sending are intersected with the account\'s current permissions.',
  1314. 'tokens.securityTips': 'Security tips',
  1315. 'tokens.securityTipStore': 'Store tokens only on the server side. Do not put them in browser code or public repositories.',
  1316. 'tokens.securityTipRotate': 'Use separate tokens per environment. Regenerate immediately after a leak and update every caller.',
  1317. 'tokens.securityTipScopes': 'Grant only the scopes your integration needs. Mailbox automation does not need send.',
  1318. 'tokens.securityTipDomain': 'From must use a domain this account can send from, or an assigned mailbox/alias with send permission. Verify the sender domain before production use.',
  1319. 'tokens.noTokenHint': 'Create a token, copy its full secret from the list or detail view, and limit mailbox access to the minimum required scope.',
  1320. 'webhooks.title': 'Webhooks',
  1321. 'webhooks.subtitle': 'Push delivery updates to your HTTPS endpoint when mail is sent, bounced, or failed.',
  1322. 'webhooks.create': 'Create webhook',
  1323. 'webhooks.createTitle': 'Create webhook',
  1324. 'webhooks.editTitle': 'Edit webhook',
  1325. 'webhooks.name': 'Name',
  1326. 'webhooks.namePlaceholder': 'Production deliveries',
  1327. 'webhooks.nameRequired': 'Enter a webhook name',
  1328. 'webhooks.url': 'Callback URL',
  1329. 'webhooks.urlPlaceholder': 'https://example.com/webhooks/mailhub',
  1330. 'webhooks.urlRequired': 'Enter a callback URL',
  1331. 'webhooks.urlHint': 'Use HTTPS in production. Verify requests with the X-MailHub-Signature header.',
  1332. 'webhooks.events': 'Events',
  1333. 'webhooks.eventsRequired': 'Select at least one event',
  1334. 'webhooks.eventSent': 'Sent',
  1335. 'webhooks.eventBounced': 'Bounced',
  1336. 'webhooks.eventFailed': 'Failed',
  1337. 'webhooks.eventOpened': 'Opened',
  1338. 'webhooks.eventClicked': 'Clicked',
  1339. 'webhooks.eventReceived': 'Received',
  1340. 'webhooks.enabled': 'Enabled',
  1341. 'webhooks.disabled': 'Disabled',
  1342. 'webhooks.scope': 'Scope',
  1343. 'webhooks.scopeAccount': 'Account',
  1344. 'webhooks.scopeDomain': 'Domain',
  1345. 'webhooks.scopeMailbox': 'Mailbox',
  1346. 'webhooks.domain': 'Domain',
  1347. 'webhooks.domainAccount': 'Entire account',
  1348. 'webhooks.domainOverrideHelp': 'If this domain has any enabled endpoint for an event, account-level endpoints for that event are skipped.',
  1349. 'webhooks.mailboxReceiptHelp': 'email.received is delivered only after mail is stored in this mailbox. Forward-only mail does not trigger it.',
  1350. 'webhooks.secret': 'Signing secret',
  1351. 'webhooks.secretPrefix': 'Secret prefix',
  1352. 'webhooks.secretCreatedTitle': 'Webhook secret created',
  1353. 'webhooks.secretRotatedTitle': 'Webhook secret rotated',
  1354. 'webhooks.secretCreatedWarning': 'The full secret is shown only once. Copy it now and store it somewhere secure.',
  1355. 'webhooks.copySecret': 'Copy full secret',
  1356. 'webhooks.rotateSecret': 'Rotate secret',
  1357. 'webhooks.rotateConfirm': 'Rotate this webhook signing secret? The previous secret stops working immediately.',
  1358. 'webhooks.test': 'Send test',
  1359. 'webhooks.testQueued': 'Test delivery queued',
  1360. 'webhooks.deleteConfirm': 'Delete this webhook? Related delivery records will also be removed.',
  1361. 'webhooks.empty': 'No webhooks yet. Create one to receive delivery status callbacks.',
  1362. 'webhooks.listTitle': 'Endpoints',
  1363. 'webhooks.loadFailed': 'Unable to load webhook endpoints',
  1364. 'webhooks.recentDeliveriesUnavailable': 'Recent delivery status is temporarily unavailable',
  1365. 'webhooks.resourcesUnavailable': 'Domain or mailbox options are temporarily unavailable',
  1366. 'webhooks.actions': 'Actions',
  1367. 'webhooks.deliveriesTitle': 'Deliveries',
  1368. 'webhooks.deliveriesEmpty': 'No deliveries yet',
  1369. 'webhooks.deliveriesFilterWebhook': 'Filter by webhook',
  1370. 'webhooks.deliveriesFilterStatus': 'Filter by status',
  1371. 'webhooks.deliveriesFilterEvent': 'Filter by event',
  1372. 'webhooks.allWebhooks': 'All webhooks',
  1373. 'webhooks.allStatuses': 'All statuses',
  1374. 'webhooks.allEvents': 'All events',
  1375. 'webhooks.statusPending': 'Pending',
  1376. 'webhooks.statusProcessing': 'Processing',
  1377. 'webhooks.statusSuccess': 'Success',
  1378. 'webhooks.statusDead': 'Dead',
  1379. 'webhooks.attemptCount': 'Attempts',
  1380. 'webhooks.responseStatus': 'HTTP status',
  1381. 'webhooks.error': 'Error',
  1382. 'webhooks.replay': 'Replay',
  1383. 'webhooks.replaySuccess': 'Delivery re-queued',
  1384. 'webhooks.lastAttemptAt': 'Last attempt',
  1385. 'webhooks.nextAttemptAt': 'Next attempt',
  1386. 'webhooks.createdAt': 'Created at',
  1387. 'webhooks.viewDeliveries': 'View deliveries',
  1388. 'webhooks.docsTitle': 'Callback notes',
  1389. 'webhooks.docsSignature': 'Verify the body with HMAC-SHA256; the signature is in X-MailHub-Signature.',
  1390. 'webhooks.docsEvents': 'Event types: sent, bounced, failed, opened, and clicked. Mailboxes can additionally subscribe to received.',
  1391. 'testMail.title': 'Send test email',
  1392. 'testMail.fromRequired': 'Enter the sender',
  1393. 'testMail.toRequired': 'Enter the recipient',
  1394. 'actions.domainCreated': 'Domain created',
  1395. 'actions.dnsCheckCompleted': 'DNS check completed',
  1396. 'actions.dnsCheckRefreshed': 'DNS check refreshed',
  1397. 'actions.dnsApplyCompleted': 'DNS write request completed',
  1398. 'actions.dnsApplyPartial': 'DNS write partially failed',
  1399. 'actions.domainSaved': 'Domain settings saved',
  1400. 'actions.domainDeleted': 'Domain deleted',
  1401. 'actions.testMailQueued': 'Submitted to sending queue',
  1402. 'actions.dnsApiCreated': 'DNS API created',
  1403. 'actions.dnsApiUpdated': 'DNS API updated',
  1404. 'actions.dnsApiDeleted': 'DNS API deleted',
  1405. 'actions.dnsApiTestCompleted': 'Connection test completed',
  1406. 'actions.smtpCreated': 'SMTP login credential created',
  1407. 'actions.smtpUpdated': 'SMTP login credential updated',
  1408. 'actions.smtpDeleted': 'SMTP login credential deleted',
  1409. 'actions.smtpRelayCreated': 'SMTP relay created',
  1410. 'actions.smtpRelayUpdated': 'SMTP relay updated',
  1411. 'actions.smtpRelayDeleted': 'SMTP relay deleted',
  1412. 'actions.inboundMailboxCreated': 'Inbound mailbox created',
  1413. 'actions.settingsSaved': 'System settings saved',
  1414. 'actions.webhookCreated': 'Webhook created',
  1415. 'actions.webhookUpdated': 'Webhook updated',
  1416. 'actions.webhookDeleted': 'Webhook deleted',
  1417. 'actions.webhookSecretRotated': 'Webhook secret rotated',
  1418. 'actions.webhookTestQueued': 'Webhook test queued',
  1419. 'actions.webhookDeliveryReplayed': 'Webhook delivery replayed',
  1420. 'nav.dashboard': 'Dashboard',
  1421. 'nav.overview': 'Overview',
  1422. 'nav.activity': 'Sending activity',
  1423. 'nav.domains': 'Domains',
  1424. 'nav.dnsApi': 'DNS integrations',
  1425. 'nav.smtp': 'SMTP & relays',
  1426. 'nav.inbox': 'Inbox',
  1427. 'nav.tokens': 'API keys',
  1428. 'nav.logs': 'Sending Logs',
  1429. 'nav.webhooks': 'Webhooks',
  1430. 'nav.smtpIntegration': 'SMTP & relays',
  1431. 'nav.apiKeys': 'API keys',
  1432. 'nav.dnsIntegration': 'DNS integrations',
  1433. 'nav.adminCenter': 'Admin center',
  1434. 'nav.admin': 'Admin center',
  1435. 'nav.settings': 'Settings',
  1436. 'nav.group.overview': 'Overview',
  1437. 'nav.group.delivery': 'Delivery',
  1438. 'nav.group.operations': 'Operations',
  1439. 'nav.group.integrations': 'Integrations',
  1440. 'nav.group.system': 'System'
  1441. }
  1442. };
  1443. export function normalizeLocale(locale = DEFAULT_LOCALE) {
  1444. const value = String(locale || '').trim();
  1445. if (supportedLocales.includes(value)) return value;
  1446. const lower = value.toLowerCase();
  1447. if (lower.startsWith('zh')) return 'zh-CN';
  1448. if (lower.startsWith('en')) return 'en-US';
  1449. return DEFAULT_LOCALE;
  1450. }
  1451. export function createTranslator(locale = DEFAULT_LOCALE) {
  1452. const normalized = normalizeLocale(locale);
  1453. return (key) => messages[normalized]?.[key] || messages[DEFAULT_LOCALE]?.[key] || key;
  1454. }
  1455. export function getLocaleLabel(locale) {
  1456. return {
  1457. 'zh-CN': '简体中文',
  1458. 'en-US': 'English'
  1459. }[normalizeLocale(locale)] || String(locale || DEFAULT_LOCALE);
  1460. }