v1.3.3: 中英双语 i18n + 回归时序根治

i18n(竞品 7 家全有、Aurora 唯一还缺的一线能力)
- site/i18n.js:330 条文案字典,顶栏「中 / EN」切换,偏好存 aa-lang,
  <html lang> 与 document.title 同步
- 设计取舍:以中文源串为字典键,而非抽象 key。中文是规范原文语言也是
  app.js 现有字面量;源串作键意味着未收录文案自动回退原文,不会出现
  空白或 key 泄漏
- 覆盖:导航/侧栏/首页 Hero 与设计原则/总览/快速开始/设计规范(含令牌
  导出区)/For Agents 全表/更新日志/组件详情页(何时使用、API 三表、
  无障碍键盘表、Do&Don't、设计契约、实现资源、相关组件)/Playground/
  主题面板/搜索弹窗/FAB 提示
- 语言感知显示:组件名主次调换(中文模式主显中文名,英文模式主显英文
  名),详情页大标题不再重复;分类名走 CAT_EN 不占字典

修复回归时序(根治偶发)
- DensitySwitcher 对比度偶发失败:断言在演示页内联脚本执行完之前就跑了,
  读到 is-active 尚未应用的中间态(白字未落到品牌蓝底)。单页打开通过、
  并发收集器里偶发失败
- 根因是固定帧数等待(load + 双 rAF)在多个 iframe 抢主线程时不够稳。
  改为就绪轮询:readyState === 'complete' 且 DOM 连续 3 次采样(约 48ms)
  无变化才断言,另设约 4.8s 超时兜底
- 验证:四次连跑全部 100%,偶发不再复现

修复 i18n 接入中的三个真实缺陷
- TDZ 顺序:KIND_KEYS 等模块级常量在 I18N/T 定义前调用 T(),抛
  Cannot read properties of undefined。改为存中文源串、渲染时求值
  (模块级预先求值还会导致语言切换后不更新)
- 局部变量遮蔽:renderDesign 内原有 var T = data.tokens 遮蔽全局翻译
  函数,导致设计规范页整个渲染失败。改名 TOKENS
- 模板拼接括号:el() 调用在包装 T() 后少一个右括号

验证
- 9 个路由 × 2 语言全部正常渲染(中英文内容均非空且确实不同)
- 回归保持 100%:961 断言 / 925 通过 / 0 失败 / 79 页全通过 / N/A 36
This commit is contained in:
aurora-admin
2026-09-11 17:15:42 +08:00
parent 7c9516011b
commit cbed5ba7ca
11 changed files with 1012 additions and 253 deletions
+24
View File
@@ -4,6 +4,30 @@
## [Unreleased]
## [1.3.3] - 2026-09-11
### Added — 中英双语(i18n)
- `site/i18n.js`:330 条文案字典,顶栏新增 `中 / EN` 切换器,偏好存 `localStorage['aa-lang']`,`<html lang>` 与 `document.title` 同步。
- **设计取舍**:以「中文源串」作字典键而非抽象 key。中文是规范原文语言(组件1~10.txt)也是 app.js 现有字面量;源串作键意味着未收录文案自动回退原文,不会出现空白或 key 泄漏。
- 覆盖范围:导航 / 侧栏 / 首页 Hero 与设计原则 / 总览 / 快速开始 / 设计规范(含令牌导出区)/ For Agents 全表 / 更新日志 / 组件详情页(何时使用、API 三表、无障碍键盘表、Do&Don't、设计契约、实现资源、相关组件)/ Playground / 主题面板 / 搜索弹窗 / FAB 提示。
- 语言感知的显示逻辑:
- 组件名主次调换(中文模式主显中文名,英文模式主显英文名),详情页大标题不再重复;
- 侧栏分类名走 `CAT_EN`,不占字典;
- 动态生成的键盘表、插槽说明按语言重算。
### Fixed — 回归时序(根治偶发)
- **DensitySwitcher 对比度偶发失败**:断言在演示页内联脚本执行完之前就跑了,读到 `is-active` 尚未应用的中间态(白字未落到品牌蓝底 → 2.51:1)。单页打开时通过、并发收集器里偶发失败。
- 根因是固定帧数等待(`load` + 双 `requestAnimationFrame`)在多个 iframe 抢主线程时不够稳。改为**就绪轮询**:`readyState === 'complete'` 且 DOM 连续 3 次采样(约 48ms)无变化才断言,另设约 4.8s 超时兜底避免卡死。
- 验证:**四次连跑全部 100%**(961 断言 / 0 失败 / 79 页全通过),偶发不再复现。
### Fixed — i18n 接入过程中的三个真实缺陷
- **TDZ 顺序**:`KIND_KEYS` 等模块级常量在 `I18N`/`T` 定义之前调用了 `T()`,抛 `Cannot read properties of undefined (reading 'T')`。已改为存中文源串、渲染时求值(模块级预先求值还会导致语言切换后不更新)。
- **局部变量遮蔽**:`renderDesign` 内原有 `var T = data.tokens;` 遮蔽了全局翻译函数,导致设计规范页整个渲染失败。改名 `TOKENS`。
- **模板拼接括号**:`el()` 调用在包装 `T()` 后少一个右括号,已修正。
### Changed
- 回归基线:961 断言 / 925 通过 / **100%** / 79 页全通过 / N/A 36,四次连跑一致。
## [1.3.2] - 2026-09-11
### Added — 契约第三批:全量契约化 79/79