实施 #3404(PR #3405,给注册路径的 FullscreenFieldEditor 接 i18n)时在同包邻近文件发现,未并入该 PR —— #3404 的文件面裁定只含 FullscreenFieldEditor.tsx,明确不碰 TextAreaField.tsx。
现象
packages/fields/src/widgets/TextAreaField.tsx:84(对当前 origin/main ≥ 7d08c3f 复核):
aria-label={`Character count: ${(value || '').length} of ${maxLength}`}
这是内联 textarea 右下角字数统计块的可访问名。渲染出来的数字本身({(value || '').length}/{maxLength})是纯数字、与语言无关,但它的 aria-label 是硬编码英文句子。
可达性
不是死代码,但比 #3404 窄两层:
- 仅当字段元数据声明了
maxLength 时才渲染这个块({maxLength && (...)});
- 仅读屏用户能感知 —— 该元素带
aria-live="polite",所以非英文会话下,每次输入变化都会朗读一句英文。
视觉用户看到的只是数字,不受影响。因此我把它当作比 #3404 严重度低的一条,但它确实运行期有人读(与 #3394 那种设计器 defaultProps、运行期无人读的情况不同)。
同族但不重叠:#3404 是「键早已存在、这条路径没消费」;这一条是键根本不存在 —— 十个语言包里没有任何 characterCount / charCount 键(已 grep 确认)。所以修它需要新增一个键并翻译十个包,而 #3404 明确是零新增键。这也是它没有被顺手并进 PR #3405 的实质原因,而不只是文件面裁定。
修的时候要先回答的问题
aria-live="polite" + 每次按键重算的 aria-label 是否本身就该重新设计(每敲一个字就朗读一次完整句子是相当吵的),还是只把句子搬进语言包就行。这决定了新键是一句话(fields.textarea.characterCount,带 {{count}} / {{max}} 插值)还是需要拆分。建议 triage 时一并裁定,别只做机械替换。
同 FullscreenFieldEditor 的字符计数 footer({draft.length}/{maxLength})没有 aria-label,不在此列。
Generated by Claude Code
实施 #3404(PR #3405,给注册路径的
FullscreenFieldEditor接 i18n)时在同包邻近文件发现,未并入该 PR —— #3404 的文件面裁定只含FullscreenFieldEditor.tsx,明确不碰TextAreaField.tsx。现象
packages/fields/src/widgets/TextAreaField.tsx:84(对当前origin/main≥ 7d08c3f 复核):这是内联 textarea 右下角字数统计块的可访问名。渲染出来的数字本身(
{(value || '').length}/{maxLength})是纯数字、与语言无关,但它的aria-label是硬编码英文句子。可达性
不是死代码,但比 #3404 窄两层:
maxLength时才渲染这个块({maxLength && (...)});aria-live="polite",所以非英文会话下,每次输入变化都会朗读一句英文。视觉用户看到的只是数字,不受影响。因此我把它当作比 #3404 严重度低的一条,但它确实运行期有人读(与 #3394 那种设计器
defaultProps、运行期无人读的情况不同)。与 #3404 的关系
同族但不重叠:#3404 是「键早已存在、这条路径没消费」;这一条是键根本不存在 —— 十个语言包里没有任何
characterCount/charCount键(已 grep 确认)。所以修它需要新增一个键并翻译十个包,而 #3404 明确是零新增键。这也是它没有被顺手并进 PR #3405 的实质原因,而不只是文件面裁定。修的时候要先回答的问题
aria-live="polite"+ 每次按键重算的aria-label是否本身就该重新设计(每敲一个字就朗读一次完整句子是相当吵的),还是只把句子搬进语言包就行。这决定了新键是一句话(fields.textarea.characterCount,带{{count}}/{{max}}插值)还是需要拆分。建议 triage 时一并裁定,别只做机械替换。同
FullscreenFieldEditor的字符计数 footer({draft.length}/{maxLength})没有 aria-label,不在此列。Generated by Claude Code