feat(i18n): ③ 原型接单源 — I18N 块由 strings.json 生成,消除重复翻译

原型 design/prototype/screens/{ui-desktop,ui-mobile}.html 的 I18N 数据块不再手写,
改由 strings.json 生成(marker 包裹、生成器唯一写):
- alias.json:protoKey → flutterKey(产品串取单源 zh/en,单源赢);desktop 130 / mobile 143。
- overlay.json:原型专属(开发挡板 + app 没有的串,zh/en);desktop 98 / mobile 104。
- new-strings.json:4 个新产品串(分流规则/自定义/局域网直连/强制),6 语,已并入
  strings.json + app_text.dart 抽象声明 + 重生成 6 份 strings_*.dart。
- gen_proto_i18n.mjs:strings.json+alias+overlay → 两份 HTML 的 I18N 块;--check 只比对
  marker 块(unrelated HTML 编辑不误报)。
- check-proto-i18n.mjs:两份 HTML 所有 data-i18n key 的 zh/en 必须 resolve。
- ci/check-codegen-drift.sh:加原型 i18n 段(--check 漂移 + resolution 验收)。

同带入之前路由原型 WIP 的 i18n 收口:私有服务内置行→局域网/私网直连行、rr.* 接 data-i18n
(rr.lan→routingLanDirect 等)。路由页其余 UI(段选/添加规则页)仍为独立后续。

验收(自复核全绿):生成器跑通、data-i18n 0 unresolved、两生成器重生成零 diff、
flutter analyze lib/l10n 0 issue、flutter test 244 全绿、new-strings 无红线词。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
This commit is contained in:
wangjia
2026-07-27 09:59:18 +08:00
parent f46191ef4d
commit 75d23023e3
16 changed files with 2139 additions and 264 deletions
+12
View File
@@ -46,3 +46,15 @@ if ! git diff --quiet -- "$L10N_GEN"/strings_*.dart; then
exit 1
fi
echo "✅ l10n 无漂移:strings_*.dart 与 strings.json 单源一致。"
# ── 原型 i18n 单源:strings.json + alias + overlay → 两份 HTML 的 I18N 块 ──
# --check 只比对 marker 块(unrelated HTML 编辑不误报);再跑 key resolution 验收。
echo "→ 校验原型 I18N 块 (design/codegen/gen_proto_i18n.mjs --check) ..."
if ! node design/codegen/gen_proto_i18n.mjs --check; then
echo "❌ 原型 I18N 漂移:改了 strings.json/alias/overlay 却没重生成原型块。" >&2
echo " 修复:node design/codegen/gen_proto_i18n.mjs 后提交。" >&2
exit 1
fi
echo "→ 校验原型 data-i18n key 全 resolve (check-proto-i18n.mjs) ..."
node design/prototype/tools/check-proto-i18n.mjs
echo "✅ 原型 i18n 无漂移:I18N 块与单源一致、data-i18n 全 resolve。"