Skip to content

[i18n] @object-ui/collaboration 整包接入 i18n:CommentThread 全部 13 处硬编码英文(承接 objectstack#5506 第 5 处) #3424

Description

@yinlianghui

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,且无任何门禁。
  • 两轴同向,无需交维护者权衡;如有异议请在本单否决。

完成范围

  1. packages/collaboration/package.json@object-ui/i18n: workspace:* + pnpm-lock.yaml importers 条目;
  2. COLLAB_DEFAULT_TRANSLATIONScreateSafeTranslation(data-table / form / filter-builder 既有模式;defaults map 即无 provider 时英文兜底的来源);
  3. 全部 13 处字符串入键、十包全补真实译文:reaction tooltip + just now{n}m agoSaveCancelReplyEditDeleteAdd thumbs up · ResolvedReopen/ResolveSort commentsAdd 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 模块级默认实例陷阱:createI18ninitReactI18next 注册不随 cleanup 撤销,无 provider 断言必须放在从不 import I18nProvider 的独立测试文件(踩坑记录见 PR fix(components,i18n): 把记录浮层与页签计数徽标的剩余硬编码英文接入 i18n (objectstack#5506) #3423 正文与测试);
  • 相对时间(just now/{n}m ago)若涉及格式而非纯词条,按包内最小改动处理,不引入新的日期库。

Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions