From 7be8794345aae14f8dfaaf8d0db96c9d6f6b6a55 Mon Sep 17 00:00:00 2001 From: argszero Date: Tue, 18 Aug 2026 22:04:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20i18n=20clean-up=20=E2=80=94=20remov?= =?UTF-8?q?e=20zh/en=20mixed-language=20annotations=20(v1.21.1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Host feedback (rant 2026-08-18T21:40:10): pages still show mixed '仪表盘 Dashboard' style strings after switching language. - zh pack: strip 86 English annotation suffixes (nav/view/dash/stats/buttons), values are now pure Chinese (proper nouns like API/Key/Plan/tokens and shortcuts Ctrl+C/Esc kept per rant allowance) - en pack: translate leftover Chinese admin.raise.sub - index.html: remove all 55 static bilingual annotations - style.css: remove the now-unused .en rule - ui/README.md: document the single-language i18n convention (v1.21.1) --- ui/README.md | 4 +- ui/css/style.css | 1 - ui/index.html | 110 ++++++++++++++--------------- ui/js/i18n.js | 176 +++++++++++++++++++++++------------------------ 4 files changed, 145 insertions(+), 146 deletions(-) diff --git a/ui/README.md b/ui/README.md index 7d06f2d..0728428 100644 --- a/ui/README.md +++ b/ui/README.md @@ -291,7 +291,7 @@ ui/ - 删除 = 彻底下架(key 从平台移除,不可恢复);暂停 = 临时不接单,可恢复 - 全部数据为前端常量(mock),无后端、无真实调用 -## 界面国际化 i18n 约定(v1.21,rant 2026-08-18T20:49:22) +## 界面国际化 i18n 约定(v1.21.1,rant 2026-08-18T20:49:22 + 21:40:10 去中英混排) - **语言包**:`ui/js/i18n.js` 零依赖 IIFE,`I18N = { zh, en }` 双词典(563 键 ×2,覆盖导航/登录/视图标题/通用/仪表盘/市场/共享/钱包/交易/设置/管理/运营/聊天/游客/相对时间/帮助/tour/主题/错误映射);`window.t(key, vars)` 查当前语言,**缺失回退 zh,再缺回退 key 本身**;`{var}` 占位符插值; - **切换机制**:设置页「偏好 → 界面语言」下拉(`#prefs-lang`,zh/en)→ `I18n.setLang()`:写 `localStorage('atp_lang')` + `document.documentElement.lang` 同步(zh→`zh-CN` / en→`en`)+ 派发 `atp:langchange` → app.js 重渲染 `renderNav()` + `renderView(activeView)` + `document.title`(引导中额外 `renderTourStep()`);**首载**:localStorage → `navigator.language` 前缀(`zh*`→zh,否则 en)→ 默认 zh;切换即时生效无需刷新; @@ -299,5 +299,5 @@ ui/ - **动态文案**:`app.js` 面向用户字符串全部走 `t('key')`;**语言敏感常量存 key 而非文案**(NAV/VIEW_TITLE/TOUR_STEPS/HELP_KEYS 存 key,渲染时 `T()` 解析;SHARE_STATUS/RAISE_STATUS 的 `text` 为函数;TX_COLUMNS 的 `title`/`options` 为函数;`DAY_LABELS` 动态 `T("share.day."+n)`)——保证切换语言后重渲染即时生效; - **数字/时间本地化**:`I18n.fmtNum`(zh→`zh-CN` / en→`en-US` `toLocaleString`);`I18n.fmtRelTime`(刚刚/N 分钟前/N 小时前/昨天 ↔ just now/N min ago/N hr ago/yesterday);数量单位(人/个/笔/次)用 `cnt.*` 键(zh 带量词,en 纯数字); - **后端错误映射**:`api.js` 抛错前过 `I18n.mapErr()`——en 模式下已知中文错误(「该模型暂无可用 key」「点数余额不足」「需要管理员权限」等 15 组)映射为英文,未知原样返回;zh 模式原样透传; -- **双语注释保留**:原有 `.en` 小字注释在 zh 词典文案内联保留(如「仪表盘 Dashboard」),切换 en 后显示纯英文; +- **单语原则(v1.21.1 去混排)**:zh 词典值一律纯中文(仅保留 API/Key/Plan/tokens/CSV 等专有名词、键盘快捷键与占位符),不再内联英文注释;`index.html` 已移除全部 `` 静态小字(55 处);`.en` CSS 样式已删除;en 词典保持纯英文; - 冒烟测试:node 无 DOM 桩跑 i18n.js(t/setLang/mapErr/fmtNum/fmtRelTime 断言,见开发记录);Key 一致性扫描(app.js+index.html 引用的 496 键全部存在于 ZH/EN)。 diff --git a/ui/css/style.css b/ui/css/style.css index cfb2728..de0123a 100644 --- a/ui/css/style.css +++ b/ui/css/style.css @@ -94,7 +94,6 @@ body { } .table tbody { animation: tbodyIn 0.15s ease-out; } .muted { color: var(--text-mute); } -.en { color: var(--text-mute); font-size: 12px; font-weight: 400; } /* ---------- 通用组件 ---------- */ diff --git a/ui/index.html b/ui/index.html index 4442772..5dccf95 100644 --- a/ui/index.html +++ b/ui/index.html @@ -30,11 +30,11 @@

AITokenPool

演示账号:demo@aitokenpool.local / demo1234 · 管理员 admin@aitokenpool.local / admin1234 - + - - + + @@ -57,11 +57,11 @@

AITokenPool