aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-12 13:48:09 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-12 16:36:54 +0200
commit98e27c8f251022320020716a9ef7a5b892ad2b61 (patch)
tree7cfb3f397c3f001768413676a739fe147743c824 /packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
parente671b931fd594a39fc840916c81b5d4b1f1e3227 (diff)
downloadmeshbay-98e27c8f251022320020716a9ef7a5b892ad2b61.tar.gz
feat(hub): the mail bounds are settings, with a panel to change them
They were constants in two modules, so an operator could not touch them without editing code and redeploying — and the hour a budget runs out is not when anyone wants to do that. `[mail]` in hub.toml carries the defaults; the live values live in `hub_settings`, read at each use. A missing row falls back to what the configuration file says, so an instance that never opens the panel behaves as its file describes. The panel sends only what changed, the hub clamps each value to a stated range and refuses a key it does not know, and the response is what gets rendered — so a clamped value is never shown as stored. `GET /v1/admin/mail` is the other half. There was no way to see any of this: a refusal was a line in the journal, so an instance that had stopped sending sign-up codes looked, from the panel, exactly like one with no sign-ups. It reports the hour's use, what is left for sign-ups, and what is left for recovery — the difference between those two being the reserved share made visible. Labels in all ten catalogues. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T4YmK41VsEURWFdop4EEeT
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js13
1 files changed, 13 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
index 01b54c3..1f6881b 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js
@@ -470,6 +470,19 @@ export default {
'admin.general_groups_heading': "Groups",
'admin.allow_public_groups_label': "Allow members to create public groups",
'admin.allow_public_groups_hint': "When off, new groups can only be private and invite-only. Existing public groups are left as they are — suspend them one by one from the Groups tab.",
+ 'admin.mail_heading': "外发邮件",
+ 'admin.mail_hint': "本 Hub 会发送什么、发送多少。真正起作用的是两项:每小时总量,再多账号也无法提高;以及每位收件人每日上限,这正是被大量骚扰的人实际收到的数量。",
+ 'admin.mail_this_hour': "本小时已发送",
+ 'admin.mail_remaining': "注册与更换地址还剩 {general} 封,密码重置与邀请还剩 {recovery} 封。",
+ 'admin.mail_hourly_budget': "每小时邮件数(整个实例)",
+ 'admin.mail_hourly_reserved_for_recovery': "其中为重置与邀请保留",
+ 'admin.mail_destination_daily_cap': "每日发往同一收件人的邮件数",
+ 'admin.mail_destination_cooldown_seconds': "发往同一收件人的间隔(秒)",
+ 'admin.mail_verification_resend_cooldown': "两次注册验证码的间隔(秒)",
+ 'admin.mail_reset_cooldown': "两次重置验证码的间隔(秒)",
+ 'admin.mail_email_change_cooldown': "账号可再次申请其他地址前的秒数",
+ 'admin.mail_save': "保存邮件限制",
+ 'admin.mail_reset_defaults': "恢复默认值",
'admin.settings_readonly': "Only an admin can change these settings.",
// Admin stats