Skip to content

form.tsx 仍有一批用户可见的硬编码英文(全屏文本编辑对话框、Submit/Cancel 默认值、required aria-label) #3272

Description

@xuyushun441-sys

在实现 objectui#3263(PR objectui#3271)时发现,未在该 PR 内修改 —— #3263 的 scope 只包含内建 select 分支那一句 'No options available'

现象

packages/components/src/renderers/form/form.tsx 顶部已有 useSafeFormTranslation(createSafeTranslation + defaults map),表单的校验消息、门控提示、选项空态都走了 i18n。但同一文件里仍有几处用户可见的英文字面量没有 key,zh/ja/ar 会话下会直接读到英文:

  1. 全屏文本编辑对话框(FullscreenTextarea,移动端 mobile_fullscreen)—— 这是一整块对话框 UI,不是一个词:
    • {label ?? 'Edit text'}(对话框标题,约 L346)
    • Edit the full text value, then save or cancel your changes.(sr-only 描述,约 L348)
    • 底部两个按钮 Cancel / Done(约 L363、L366)
  2. submitLabel = 'Submit' / cancelLabel = 'Cancel' 的默认值(约 L382-383)—— schema 没写 label 时提交/取消按钮就渲染这两个英文词。注意这两个是元数据默认值,不只是展示文案:改成 i18n key 会让「默认值」和「作者显式写的值」的边界变得需要设计(比如默认值改为 undefined + 渲染时 t() 回落),属于需要维护者拍板的取舍,不宜顺手改。
  3. aria-label="required"(约 L1347)—— 必填星号的无障碍标签,屏幕阅读器在任何语言下都念英文。
  4. placeholder={placeholder || 'Select an option'}(约 L1897,内建 select 分支)—— 目前是够不到的兜底:唯一调用点已经传了 placeholder: … ?? t('common.selectOption'),所以这一句在当前代码路径下永远不会渲染。删掉或换成 t('common.selectOption') 都行,但它是死分支,单独修价值很低,列在这里只是为了让下一个读这个文件的人不必再判断一次。

为什么单独开一条

fields.options.empty / fields.options.selectFirst 这两句(#3231#3263)是「同一句话在两条渲染路径上各有一份拷贝」的问题,修法是共享 key。上面这几处不是拷贝问题,是从来没接过 i18n,而且第 2 条牵涉 schema 默认值语义 —— 需要先定方向再动手,和 #3263 混在一起会把一个 3 行的改动变成一次没有边界的清扫。

建议范围

  • 第 1、3 条:直接补 key(form.fullscreen.*form.requiredAria)+ 十个语言包,与 fields.options.* 同样的做法。
  • 第 2 条:先定「默认按钮文案是元数据默认值还是渲染时回落」,再实现。
  • 第 4 条:随手删掉死兜底,或留到第 1 条一起。

关联:objectui#3231、objectui#3263、PR objectui#3271。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions