Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

注册路径的全屏长文本对话框全是英文字面量:Cancel / Done / Edit text / "Edit {label} fullscreen" 不走 i18n,而同一功能的内置分支已翻译(键早已存在于十个语言包) #3404

Closed

Description

@yinlianghui

在实施 #3402(PR #3403,给注册路径的 FullscreenFieldEditor 补 disabled)时发现,未在该 PR 内修改 —— #3402 的文件面裁定只含 disabled 闸门,这是同一文件上的另一条独立缺陷。

现象

同一个「全屏编辑长文本」功能有两条渲染路径,内置分支已经国际化,注册路径全是英文字面量:

packages/fields/src/widgets/FullscreenFieldEditor.tsx:

  • :197 aria-label={ + 反引号 Edit ${label ?? 'text'} fullscreen + 反引号 —— 展开按钮的可访问名
  • :209 {label ?? 'Edit text'} —— 对话框标题的兜底
  • :216 Cancel
  • :224 Done

对照 packages/components/src/renderers/form/form.tsx 的 FullscreenTextarea,四处全部走 t():

  • :453 t('form.fullscreen.toggle', { label: label ?? t('form.fullscreen.textFallback') })
  • :467 label ?? t('form.fullscreen.title')
  • :486 t('common.cancel')
  • :494 t('form.fullscreen.done')

键已经存在,只是没人用

这不是「要新增翻译」,是已有翻译在这条路径上没被消费。form.fullscreen.* 在十个语言包里都齐全,例如 packages/i18n/src/locales/zh.ts:143:

    fullscreen: {
      title: '编辑文本',
      description: '编辑完整的文本内容,然后保存或取消更改。',
      done: '完成',
      toggle: '全屏编辑{{label}}',
      textFallback: '文本',
    },

common.cancel 同样早已存在。

可达性

不是死代码。ObjectForm 在 mobile.fullscreenLongText 打开时给每个长文本字段盖 mobile_fullscreen,field:textarea → TextAreaField、field:markdown / field:html → RichTextField 都从这里渲染对话框。任何非英文用户在注册路径上打开全屏编辑,看到的就是 Cancel / Done 两个英文按钮,而同一个表单里内置分支渲染的长文本字段显示的是「取消 / 完成」—— 同一份表单内出现两种语言。

RichTextField 自己已经在用 useObjectTranslation(:106),所以 packages/fields 消费 i18n 没有依赖障碍;FullscreenFieldEditor 只是没接。

关联

顺带观察(未验证,勿并入严重度)

同一文件的 DialogContent 没有 DialogDescription,而内置分支有一条 sr-only 的 t('form.fullscreen.description')(form.tsx:468)—— form.fullscreen.description 这个键因此在注册路径上也是没人消费的。是否触发 Radix 的 missing-Description 警告没有实测,列在这里只是因为它与上文是同一处漂移,严重度请 triage 自行判定。


Generated by Claude Code

Activity

  1. self-assigned this
    on Aug 5, 2026
  2. yinlianghui commented on Aug 5, 2026

    @yinlianghui
    ContributorAuthor

    认领:objectui 分片 PM 滚动补位第 16 单(#3402/PR #3403 落地后同文件释放)
    会话:session_01GTRjn8xBqp75dk7kFupVRt
    分支:claude/issue-3404-fullscreen-editor-i18n
    Worktree:objectui-issue-3404
    域:objectui 分片(fields)
    文件面:packages/fields/src/widgets/FullscreenFieldEditor.tsx + 相应测试 + .changeset/*.md(patch)。当前在飞 0。

    口径照正文:接 useObjectTranslation(RichTextField 已在用,无依赖障碍),消费既有 form.fullscreen.* 与 common.cancel 键 —— 十包零新增;测试:en/非 en 正向 + 英文字面量反向,两 widget 各覆盖。「顺带观察」的 DialogDescription 缺失:允许 dev 实测 Radix 警告后顺带补 sr-only description(消费 form.fullscreen.description,同处漂移、同文件、零新键),不强制;超出此范围即停。


    Generated by Claude Code

  3. yinlianghui commented on Aug 5, 2026

    @yinlianghui
    ContributorAuthor

    PM 验收:ACCEPT → PR #3405 已转 ready + auto-merge(报告时 9 项完成全绿、7 项全仓作业在跑零失败),跟到 MERGED。

    落地内容:四处字面量全部消费既有 form.fullscreen.*/common.cancel,十包零新增。三处按测量的判断,PM 逐条追认:① 偏离口径走 useFieldTranslation(实测裸 useObjectTranslation 无 provider 时返回原始 key 且丢 {{label}} 插值 —— 严格劣于原字面量,还会破既有 provider-less fixture);随之多改 useFieldTranslation.ts 的 FIELD_DEFAULTS(代码内英文兜底,非语言包,逐字节同旧字面量)—— 零新键承诺仍成立;② 第二轮反向验证抓出自己测试的空绿缺陷(I18nProvider 装成全局默认实例,同文件邻例泄漏破坏 no-provider 态),按仓内惯例拆独立文件后重验为真红;③ DialogDescription 的 Radix 警告猜测被实测证伪(钉定版本零 console 调用),但按真实理由补上(Radix 仅在有 Description 时设 aria-describedby,form.fullscreen.description 就此有了消费者)。另自纠一处字节纪律滑坡(断言正则里的 CJK 字面量改转义区间)。

    衍生分诊:#3406(TextAreaField 字符计数 aria-label 硬编码,aria-live="polite" 下非英文会话每击键重读英文句 —— 需新键十包,故不能搭本单零新键 PR)已复核入队 bug + pm:queue。

    objectui 分片 PM session_01GTRjn8xBqp75dk7kFupVRt


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions