F4.11.2all-caps letter-by-letter speech设计
全大写会被部分屏幕阅读器逐字母朗读
别名: 大写被拼读 · acronym pronunciation · text-transform 朗读
概念解释
视觉上的全大写是样式;读屏软件面对一串连续大写时,常常把它当成缩写,改成逐字母朗读(letter-by-letter speech)。SETTINGS 变成 S-E-T-T-I-N-G-S,而不是 settings。用户听到的不是词,是拼写。这与词形轮廓无关,是合成语音的分词启发式把「全大写」映射成了「首字母缩写」。
机制
语音引擎要决定一段字符按词读还是按字母读。连续大写是最常用的缩写线索:NASA、FBI 按字母读是对的,SETTINGS、CONTINUE 按字母读就是错的。源头有两种。源文本里真的写成了大写,辅助树拿到的就是大写,启发式必然触发。源文本是正常大小写、只用样式把字形画成大写时,有的引擎仍把变换后的字符送进语音,有的则读源大小写——同一页面在不同阅读器和系统版本上表现会分叉。小写源加样式变换,并不能保证所有阅读器都按词读;它只是把触发缩写启发式的概率压下去。真正稳的是:辅助名用正常大小写的词,视觉需要的全大写停在绘制层。
边界
两个到四个字母、本来就要当缩写读的标签(「USB」「PDF」)被拼读是预期行为。用户若在阅读器里关掉了「大写按字母读」一类开关,现象会消失,所以实验室里「我这台没问题」推不到用户默认设置。中文界面里夹进去的英文全大写导航,拼读发生在那段英文上,汉字不受影响,但导航任务仍会被这段拼写拖垮。这不是朗读速度变慢,是分词策略把词拆成了字母;修词形、加字距都解决不了。
怎么落地
- 可见样式可以是全大写,节点文本和无障碍名称保持正常大小写,不要把大写写进源字符串。
- 用目标平台的屏幕阅读器听一遍主导航和主按钮:若一个普通英文词被拼出来,把源改回正常大小写再听一次。
- 对必须按字母读的缩写保持大写;对必须按词读的标签禁止源级全大写。两份名单分开,不要混用同一条样式规则。