Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ui/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,13 +291,13 @@ 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;切换即时生效无需刷新;
- **静态文案**:`index.html` 内静态中文用 `data-i18n` / `data-i18n-ph`(placeholder)/ `data-i18n-title`(title)标记,`applyStatic()` 启动时与每次切换时批量替换;**容器含表单控件的 `<label>` 用 `<label><span data-i18n="KEY">文本</span><input…></label>` 结构**(避免 innerHTML 替换销毁控件);
- **动态文案**:`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` 已移除全部 `<span class="en">` 静态小字(55 处);`.en` CSS 样式已删除;en 词典保持纯英文
- 冒烟测试:node 无 DOM 桩跑 i18n.js(t/setLang/mapErr/fmtNum/fmtRelTime 断言,见开发记录);Key 一致性扫描(app.js+index.html 引用的 496 键全部存在于 ZH/EN)。
1 change: 0 additions & 1 deletion ui/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

/* ---------- 通用组件 ---------- */

Expand Down
Loading
Loading