Skip to content

表单渲染器内建 select 分支的空状态文案仍是硬编码英文(form.tsx:1843) #3263

Description

@xuyushun441-sys

在 objectui#3231 / PR objectui#3262 期间发现,该单已按 scope fence 明确不修(内建分支是另一条独立活路径,PM 要求不要顺手统一)。

现象

packages/components/src/renderers/form/form.tsx 的内建(未注册)select 分支:

if(!options||options.length===0){return(<divclassName="text-sm text-muted-foreground">{emptyHint||'No options available'}</div>);}

'No options available' 是硬编码英文字面量,而同一个组件里 const { t } = useSafeFormTranslation(); 早已可用(form.tsx 顶部的 createSafeTranslation 工厂)。

为什么现在才值得单独处理

objectui#3231 刚把四个已注册选项 widget 的同一句文案接到了 i18n 上,并新增了共享 key:

  • fields.options.empty = No options available
  • fields.options.selectFirst = Select {{fields}} first

两个 key 已经补齐十个语言包,并且 fields.options.selectFirst 已被 form.tsx 的门控提示(gatedHint)使用 —— 也就是说这个文件里已经有一半走了 i18n,另一半没有。内建分支的这句 'No options available' 是同一个文件里唯一剩下的硬编码副本。

建议

把它改成 t('fields.options.empty'),并在 useSafeFormTranslation 的 defaults map 里补上同名英文默认值(与 fields.options.selectFirst 的做法一致,这样无 provider 时行为不变)。

预期风险很低:createSafeTranslation 在没有翻译时回落到 defaults map,英文渲染结果与现状逐字相同,现有断言(如 form-cascading-select.test.tsx)不受影响。需要补一条测试钉住 zh locale 下渲染中文。

注意

这条不要顺手把内建分支和 OptionsEmptyState(packages/fields)统一 —— 两者是不同包、不同渲染路径,共享的应当只是 i18n key,不是组件。

关联:objectui#3231、PR objectui#3262。

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions