Part of objectstack-ai/objectstack#5506 (该单 5 处中 4 处已由 PR #3423 落地;第 5 处——CommentThread reaction tooltip——按 PM 裁定归入本单,与同文件其余 12 处一并处理)。
PM 裁定与依据(两轴,veto 窗口开放)
dev 上报的问题:@object-ui/collaboration 当前唯一依赖是 @object-ui/types,接入 i18n 需在 packages/collaboration/package.json 加 "@object-ui/i18n": "workspace:*"(i18next + react-i18next 进入该发布包的传递运行时依赖图);且同文件另有 12 处硬编码英文,只翻一处会更不自洽。
裁定:整包一次接入(方案 A),不做单串补丁(B),不做 formatter prop 兜底(D) 。
项目长远合理性 :该包任何一个字符串要本地化,依赖代价都得付;付一次覆盖全文件是唯一收敛的版本。B 用同样的公共契约代价换 1/13 的收益,且保证第二个 PR 重摸同一批行。
防 AI 犯错 :A 把每个字符串放进 all-locales-key-parity 强制的声明键——缺翻译是红构建,不是 zh 控制台里漏一个英文词。D 正是 AGENTS.md #0.1 禁止的消费端宽容形状:英文没消掉,只是把默认值搬进组件,让每个宿主自己重解一遍 i18n,且无任何门禁。
两轴同向,无需交维护者权衡;如有异议请在本单否决。
完成范围
packages/collaboration/package.json 加 @object-ui/i18n: workspace:* + pnpm-lock.yaml importers 条目;
COLLAB_DEFAULT_TRANSLATIONS 走 createSafeTranslation(data-table / form / filter-builder 既有模式;defaults map 即无 provider 时英文兜底的来源);
全部 13 处字符串入键、十包全补真实译文:reaction tooltip + just now、{n}m ago、Save、Cancel、Reply、Edit、Delete、Add thumbs up、 · Resolved、Reopen/Resolve、Sort comments、Add a comment... (use @ to mention)。
约束(违反即返工)
reaction tooltip 用专属 键对 collaboration.reactionCount / reactionCountOne——既有 detail.reactionCount 插值 {{emoji}},此 tooltip 无 emoji 可传,不得复用;
双 key 复数约定,⛔ 不用 i18next _one/_other 后缀(zh/ja/ko 无独立单数,parity gate 会判丢键);
react-i18next 模块级默认实例陷阱 :createI18n 的 initReactI18next 注册不随 cleanup 撤销,无 provider 断言必须放在从不 import I18nProvider 的独立测试文件(踩坑记录见 PR fix(components,i18n): 把记录浮层与页签计数徽标的剩余硬编码英文接入 i18n (objectstack#5506) #3423 正文与测试);
相对时间(just now/{n}m ago)若涉及格式而非纯词条,按包内最小改动处理,不引入新的日期库。
Generated by Claude Code
Part of objectstack-ai/objectstack#5506(该单 5 处中 4 处已由 PR #3423 落地;第 5 处——CommentThread reaction tooltip——按 PM 裁定归入本单,与同文件其余 12 处一并处理)。
PM 裁定与依据(两轴,veto 窗口开放)
dev 上报的问题:
@object-ui/collaboration当前唯一依赖是@object-ui/types,接入 i18n 需在packages/collaboration/package.json加"@object-ui/i18n": "workspace:*"(i18next + react-i18next 进入该发布包的传递运行时依赖图);且同文件另有 12 处硬编码英文,只翻一处会更不自洽。裁定:整包一次接入(方案 A),不做单串补丁(B),不做 formatter prop 兜底(D)。
all-locales-key-parity强制的声明键——缺翻译是红构建,不是 zh 控制台里漏一个英文词。D 正是 AGENTS.md #0.1 禁止的消费端宽容形状:英文没消掉,只是把默认值搬进组件,让每个宿主自己重解一遍 i18n,且无任何门禁。完成范围
packages/collaboration/package.json加@object-ui/i18n: workspace:*+pnpm-lock.yamlimporters 条目;COLLAB_DEFAULT_TRANSLATIONS走createSafeTranslation(data-table / form / filter-builder 既有模式;defaults map 即无 provider 时英文兜底的来源);just now、{n}m ago、Save、Cancel、Reply、Edit、Delete、Add thumbs up、· Resolved、Reopen/Resolve、Sort comments、Add a comment... (use @ to mention)。约束(违反即返工)
collaboration.reactionCount/reactionCountOne——既有detail.reactionCount插值{{emoji}},此 tooltip 无 emoji 可传,不得复用;_one/_other后缀(zh/ja/ko 无独立单数,parity gate 会判丢键);createI18n的initReactI18next注册不随 cleanup 撤销,无 provider 断言必须放在从不 importI18nProvider的独立测试文件(踩坑记录见 PR fix(components,i18n): 把记录浮层与页签计数徽标的剩余硬编码英文接入 i18n (objectstack#5506) #3423 正文与测试);just now/{n}m ago)若涉及格式而非纯词条,按包内最小改动处理,不引入新的日期库。Generated by Claude Code