HuanLinOTO
7ceee777b4
feat(i18n): 接入 @huanlin/dsh-plugin-better-locale 支持 ja 覆盖
新增 ja 词典(src/client/locales-ja.ts,326 keys,与 zh key-set-equal),
通过可选 peer @huanlin/dsh-plugin-better-locale 接入第三语言覆盖:
- locales.ts: 新增 attachBetterLocale(store) + ja dict export;t() 先查
store.getOverride(active, 'betterSidebar', key),命中则返回覆盖文本,
否则走原 zh/en 链;isZh() 在 override 激活时返回 false
- client/index.tsx: apply 中 ctx.get('betterLocale') 取得 override store
(optional,未安装时为 undefined),attachBetterLocale 注入 t();同时
register('betterSidebar', { ja }) 把 ja 词典注册进 better-locale 的
store,让外部 ctx.locale.lookup 调用者也能拿到 ja 文本
- Sidebar.tsx: 新增 betterLocaleActive uSES 订阅 store.subscribe,覆盖
切换时全树重渲染(DSH locale 的 active 字段不变,既有 localeRevision
uSES 不会触发)
- package.json: @huanlin/dsh-plugin-better-locale 加为 optional peer
+ devDep link
- tests/locales.spec.ts: 新增 7 个 better-locale override 测试(命中/
fallback/detach/interpolate/ja dict 完整性 smoke check)
未安装 better-locale 时 ctx.get 返回 undefined,整段为 no-op,zh/en
行为完全不变。
2026-08-23 00:52:20 +08:00
..
2026-08-22 22:50:13 +08:00
2026-08-18 20:29:14 +08:00
2026-08-16 22:32:17 +08:00
2026-08-10 21:43:58 +08:00
2026-08-16 23:06:44 +08:00
2026-08-15 00:28:59 +08:00
2026-08-14 20:17:27 +08:00
2026-08-12 18:27:28 +08:00
2026-08-20 02:09:36 +08:00
2026-08-11 19:28:48 +08:00
2026-08-11 19:28:48 +08:00
2026-08-22 23:19:17 +08:00
2026-08-18 01:22:28 +08:00
2026-08-18 01:22:28 +08:00
2026-08-20 02:09:36 +08:00
2026-08-14 21:28:41 +08:00
2026-08-21 01:28:17 +08:00
2026-08-22 23:13:35 +08:00
2026-08-22 22:50:13 +08:00
2026-08-11 11:16:36 +08:00
2026-08-22 17:22:10 +08:00
2026-08-22 23:19:17 +08:00
2026-08-16 23:06:44 +08:00
2026-08-22 22:50:13 +08:00
2026-08-20 18:28:57 +08:00
2026-08-17 15:00:03 +08:00
2026-08-16 23:35:57 +08:00
2026-08-16 23:35:57 +08:00
2026-08-22 23:11:27 +08:00
2026-08-22 23:09:58 +08:00
2026-08-16 23:35:57 +08:00
2026-08-12 01:16:20 +08:00
2026-08-13 09:06:55 +08:00
2026-08-14 22:30:34 +08:00
2026-08-15 15:05:06 +08:00
2026-08-23 00:52:20 +08:00
2026-08-20 02:09:36 +08:00
2026-08-13 10:26:57 +08:00
2026-08-18 01:22:28 +08:00
2026-08-18 01:22:28 +08:00
2026-08-18 01:22:28 +08:00
2026-08-22 23:19:17 +08:00
2026-08-14 14:53:03 +08:00
2026-08-22 23:19:17 +08:00
2026-08-22 23:19:17 +08:00
2026-08-16 23:06:44 +08:00
2026-08-11 11:22:28 +08:00
2026-08-16 23:35:57 +08:00
2026-08-16 23:35:57 +08:00
2026-08-14 23:04:25 +08:00
2026-08-21 01:28:17 +08:00
2026-08-21 01:28:17 +08:00
2026-08-16 23:06:44 +08:00
2026-08-17 00:06:20 +08:00
2026-08-18 19:56:04 +08:00
2026-08-11 19:28:48 +08:00
2026-08-13 01:39:59 +08:00
2026-08-17 15:00:03 +08:00
2026-08-16 16:24:28 +08:00
2026-08-21 01:28:17 +08:00
2026-08-20 02:09:36 +08:00
2026-08-22 23:19:17 +08:00
2026-08-17 15:00:03 +08:00
2026-08-22 15:34:05 +08:00
2026-08-22 15:34:05 +08:00
2026-08-21 15:41:14 +08:00
2026-08-22 15:34:05 +08:00
2026-08-22 17:21:27 +08:00
2026-08-22 23:11:57 +08:00
2026-08-21 18:15:49 +08:00
2026-08-22 15:34:05 +08:00
2026-08-21 18:15:49 +08:00
2026-08-13 09:06:55 +08:00
2026-08-21 18:15:49 +08:00
2026-08-21 18:15:49 +08:00
2026-08-22 19:57:34 +08:00
2026-08-18 23:04:29 +08:00
2026-08-14 22:59:19 +08:00
2026-08-22 22:50:13 +08:00
2026-08-17 00:06:20 +08:00
2026-08-14 14:36:49 +08:00
2026-08-16 16:37:11 +08:00
2026-08-21 01:28:17 +08:00
2026-08-20 02:09:36 +08:00
2026-08-14 23:03:26 +08:00
2026-08-14 00:41:08 +08:00
2026-08-20 18:28:57 +08:00
2026-08-21 01:28:17 +08:00