Blocked-by: #3426(PR #3457)
缘起
#3426 修的是 ListView 与 ObjectGrid 两处「在传入侧自拼英文标题、把 NavigationOverlay 的 i18n 默认值挤掉」的缺陷。那个 issue 的文件围栏只圈了 plugin-list / plugin-grid。在核验 #3426 前提时按同一模式全仓 grep,发现同一类缺陷还有三处,都在围栏外,本次未改动:
| 文件 |
传给 title 的东西 |
packages/plugin-kanban/src/ObjectKanban.tsx(约 504 行) |
${objectName 首字母大写并把下划线换成空格} Detail,无 objectName 时是字面量 'Card Details' |
packages/plugin-tree/src/ObjectTree.tsx(约 453 行) |
裸字面量 "Record Details" |
packages/plugin-view/src/ObjectView.tsx(约 1153 行) |
${objectLabel} Detail(mode="split" 的那个浮层) |
行号取自 main@112b20912,会漂。用 NavigationOverlay + title 搜更稳。
为什么这是缺陷而不是风格问题
NavigationOverlay 的 resolvedTitle 是 title || t('detail.recordDetail') —— 只要宿主传了 title,组件自己的 i18n 默认值就永远不生效。而这个值不是无障碍名,是可见标题:抽屉里是 SheetTitle,模态里是 DialogTitle,split 模式是一个 h3,popover 是一个 h4。所以一个 zh/ja/de 会话会拿到一个通体本地化的浮层,顶上挂着唯一一句英文。这正是 #3426 的形状。
可达性:本人未核验
#3426 的两条路径我逐条核验过并写进了 PR #3457(公开页面块 + navigation 可编写键 + 行点击接 handleClick,并有走完整用户路径的测试作为可执行证据)。这三处我没有做同等核验 —— 它们只是 grep 同形命中。三处看上去都挂在 navigation.isOverlay 门后,与 list/grid 同构,但「看上去同构」不等于可达,派发时应先做与 #3426 同样的可达性判定,可能出现某一处其实被上层覆盖/是死默认的情况。
修法(若可达)
沿用 #3426 落下的形状,不要在 NavigationOverlay 里加宽容:
一个需要决定的点
kanban 的 'Card Details' 和 tree 的 "Record Details" 都是复数拼法,语言包里没有对应键(现有的是单数 detail.recordDetail = Record Detail)。两条路:
倾向 A:这是同一个组件的同一个标题槽,plugin-detail 里 label: 'Record Details' 那种别处的用法不构成保留理由;英文串的变化面很小,改前 grep 一遍 e2e/ 即可确认。但涉及可见文案的取舍,留给维护者拍板。
相关
Blocked-by: #3426(PR #3457)
缘起
#3426 修的是
ListView与ObjectGrid两处「在传入侧自拼英文标题、把NavigationOverlay的 i18n 默认值挤掉」的缺陷。那个 issue 的文件围栏只圈了plugin-list/plugin-grid。在核验 #3426 前提时按同一模式全仓 grep,发现同一类缺陷还有三处,都在围栏外,本次未改动:title的东西packages/plugin-kanban/src/ObjectKanban.tsx(约 504 行)${objectName 首字母大写并把下划线换成空格} Detail,无 objectName 时是字面量'Card Details'packages/plugin-tree/src/ObjectTree.tsx(约 453 行)"Record Details"packages/plugin-view/src/ObjectView.tsx(约 1153 行)${objectLabel} Detail(mode="split"的那个浮层)行号取自
main@112b20912,会漂。用NavigationOverlay+title搜更稳。为什么这是缺陷而不是风格问题
NavigationOverlay的resolvedTitle是title || t('detail.recordDetail')—— 只要宿主传了title,组件自己的 i18n 默认值就永远不生效。而这个值不是无障碍名,是可见标题:抽屉里是SheetTitle,模态里是DialogTitle,split 模式是一个h3,popover 是一个h4。所以一个 zh/ja/de 会话会拿到一个通体本地化的浮层,顶上挂着唯一一句英文。这正是 #3426 的形状。可达性:本人未核验
#3426 的两条路径我逐条核验过并写进了 PR #3457(公开页面块 +
navigation可编写键 + 行点击接handleClick,并有走完整用户路径的测试作为可执行证据)。这三处我没有做同等核验 —— 它们只是 grep 同形命中。三处看上去都挂在navigation.isOverlay门后,与 list/grid 同构,但「看上去同构」不等于可达,派发时应先做与 #3426 同样的可达性判定,可能出现某一处其实被上层覆盖/是死默认的情况。修法(若可达)
沿用 #3426 落下的形状,不要在
NavigationOverlay里加宽容:t('detail.recordDetailWithLabel', { label })(该键由 PR fix(i18n): ListView / ObjectGrid 记录详情浮层标题改为入键,不再自拼英文 (#3426) #3457 引入,已进全部十个语言包);detail.recordDetail;createSafeTranslation在无 provider 时读的是它,不是语言包),并保证英文输出逐字节不变。一个需要决定的点
kanban 的
'Card Details'和 tree 的"Record Details"都是复数拼法,语言包里没有对应键(现有的是单数detail.recordDetail=Record Detail)。两条路:detail.recordDetail—— 同一个控件只有一份译文,不会漂;代价是英文输出从Record Details变成Record Detail(非逐字节不变,需确认没有 e2e 用旧串寻址)。倾向 A:这是同一个组件的同一个标题槽,
plugin-detail里label: 'Record Details'那种别处的用法不构成保留理由;英文串的变化面很小,改前 grep 一遍e2e/即可确认。但涉及可见文案的取舍,留给维护者拍板。相关
detail.recordDetailWithLabel键NavigationOverlay的resolvedTitle接上 i18n 默认值的那个 PR