You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Triage: pm:queue (in-repo objectui card — no routing label by design).
Classification basis — concrete defect with mechanism, measured blast radius, and named anchors, re-verified live on origin/main @ f0a625a: packages/i18n/src/useSafeTranslation.tsfallbackT reads defaults[key] || key and then treats every option — defaultValue included — as an interpolation variable; packages/plugin-detail/src/useDetailTranslation.ts defaults table has no detail.history / detail.saving / detail.add entries (spot-checked), so those keys render raw on provider-less hosts exactly as measured. Provider-less embedding is a supported scenario by the helper's own doc comment, so this is a real consumer-facing face, not a test artifact.
Direction: A as default (make fallbackT honor a string options.defaultValue and exclude that reserved name from the interpolation loop) — one helper change, aligns the no-provider path with i18next semantics, and collapses the two-path fork; B not alone (hardens a hand-table against the single-source direction); C is A's long-term completion, not today's card. The census of other createSafeTranslation consumers (plugin-gantt / plugin-kanban / data-table) is the card's own named first step and belongs to the implementer.
Activity
os-zhuang commentedon Aug 8, 2026
Triage:
pm:queue(in-repo objectui card — no routing label by design).origin/main@f0a625a:packages/i18n/src/useSafeTranslation.tsfallbackTreadsdefaults[key] || keyand then treats every option —defaultValueincluded — as an interpolation variable;packages/plugin-detail/src/useDetailTranslation.tsdefaults table has nodetail.history/detail.saving/detail.addentries (spot-checked), so those keys render raw on provider-less hosts exactly as measured. Provider-less embedding is a supported scenario by the helper's own doc comment, so this is a real consumer-facing face, not a test artifact.fallbackThonor a stringoptions.defaultValueand exclude that reserved name from the interpolation loop) — one helper change, aligns the no-provider path with i18next semantics, and collapses the two-path fork; B not alone (hardens a hand-table against the single-source direction); C is A's long-term completion, not today's card. The census of othercreateSafeTranslationconsumers (plugin-gantt / plugin-kanban / data-table) is the card's own named first step and belongs to the implementer.defaultValueis currently dead on BOTH paths for these components is material to [finding] 8 处 auth 调用点的内联 defaultValue 与 en 包值不一致 —— key 存在故兜底是死代码,三道 i18n 门禁按设计都看不见这一类 #3810's option C — recorded here so the lane picks it up when both cards are in hand.{{name}}一种写法,i18next 还认带空格 / 带格式化 / 嵌套三种 #3512 is the same helper but a different defect (interpolation placeholder shape); 258 个 t() 调用点引用的 key 在任何语言包里都不存在(#3530 守卫首跑实测),其中 8 处直接把 raw key 渲染给用户 #3546 records the mirror-direction trap; detail.showEmptyRelated 的复数族只有 _one/_other,没有基础 key —— ru 在 2-4/5-20、ar 在 2-99 直接渲染英文 #3863 is the sibling plural-slot card. All cross-linked, no duplicate. No file overlap with detail.showEmptyRelated 的复数族只有 _one/_other,没有基础 key —— ru 在 2-4/5-20、ar 在 2-99 直接渲染英文 #3863; A touches onlyuseSafeTranslation.ts.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
yinlianghui commentedon Aug 11, 2026
CLAIM + 代决 — session
session_017Qqyix2QcnpUC9XeYVDzx3(objectui whole-repo PM seat;否决窗口开放)。Branch:claude/issue-3865-safe-translation-defaultvalue。裁决:A(卡片倾向 + triage 默认方向,采纳)——
fallbackT读取字符串型options.defaultValue(顺位:defaults[key]→defaultValue→key,与 i18next 语义一致:表值即包值的替身,恒胜内联兜底),并把defaultValue从插值循环剔除为保留名(i18next 本就如此保留)。一处 helper 改动,162 个调用点中凡带内联兜底的立刻不再露 key,双路径分叉消灭。C(取消 defaults 表)记为长期方向不在本卡执行——A 落地后各表变冗余无害,届时是一张 dead-surface sweep 卡;B 不做。附带任务(卡片自名的第一步):普查其余
createSafeTranslation消费方(plugin-gantt/plugin-kanban/data-table 等)的表外 key 规模,数字进 PR 正文;并把"内联 defaultValue 此前在两条路径上都是死的"这一事实记到 #3810(其选项 C 的前提)。#3512(同 helper 插值缺陷)与 #3863(同 hook 复数族,在飞)不并入,无文件重叠。Generated by Claude Code
test(i18n): re-pin #3863's no-plural-suffix invariant after #3865 mov…
fix(i18n): createSafeTranslation's provider-less fallback honours an …