如何在不使屏幕阅读器在句子中间暂停的情况下覆盖单词发音?

11
假设我在HTML中有以下句子:
```html

Please enter your licence number

```
屏幕阅读器错误地将单词“licence”发音为“liss-ens”(音标拼写)。它应该发音为“lice-ens”(音标拼写)。
我希望通过向屏幕阅读器提供音标来解决这个问题,同时使文本在视觉上保持不变。
我可以使用`span`元素、`aria`属性和样式来达成目的:
```html

Please enter your license number

```
虽然这种方法可行,但是屏幕阅读器(我用的是MacOS上的VoiceOver)在第一个`span`时会停顿,需要按[VO]+[右箭头]才能继续读到下一个单词:
“Please enter your”... [VO]+[右箭头] ... “lice-ens” ... [VO]+[右箭头] ... “number”
我希望屏幕阅读器能够流畅地朗读整个句子,而不是停顿。
是否可能做到这一点?还是说我不应该尝试控制这个呢?

3
在我使用英国英语设置的环境中,使用OSX、iOS上的VoiceOver以及Android上的TalkBack,简单的<p> ...licence...</p>在发音上是正确的。个人意见是不应该更正或者修改发音。因为你在一个环境下修复了发音,很可能在另一个环境下是错误的,除非你有机会通过不同的AT工具和语言设置在所有平台上进行测试。如果视力受损的用户无法理解口头单词,则AT设备/屏幕阅读器通常提供逐个拼写字符的工具,这有助于消除歧义。 - RobC
3个回答

33

不要这样做。

真的,不用担心。我知道这听起来很陈词滥调,但这是多年与屏幕阅读器用户合作的实际建议(以及尝试你正在尝试做的事情)。

大多数屏幕阅读器用户已经熟悉了他们的工具如何朗读单词,缩写、日期、时间等的怪癖。通过尝试覆盖它,您可能会让您的用户感到困惑。

如果您与屏幕阅读器用户交谈,您很可能会发现这是真的。这是一个如此普遍的问题,以至于在本周的WebAIM邮件列表中又出现了这个问题:http://webaim.org/discussion/mail_message?id=34398

请注意该线程中的这条有见地的评论:

事实上,有时候如果你非常仔细地听屏幕阅读器用户说话,你会发现我们会像我们的屏幕阅读器一样发音——而我们甚至没有意识到这一点。

绝对不要尝试重复使用<ruby>。一般来说,如果您不理解一个元素,就不要使用它,尤其不要作为hack。这可能会给试图自动翻译内容的人造成问题。

此外,如果您没有准备好在所有屏幕阅读器和平台组合(包括每个屏幕阅读器和浏览器配对的多个版本)中测试它,请不要使用hack。

最后,请记住,约三分之一的屏幕阅读器用户有视觉障碍, 因此有时强制发音会影响他们在屏幕上看到的内容。


4
一个经过深思熟虑的“不要”始终是最好的无障碍建议。 - Justin
喜欢“不要”这个答案!对于与可访问性相关的问题,它经常是我的首选答案。建议加入一个潜在的可靠“黑客”实现。这可以防止那些不接受你的理由的开发人员创建重复的问题!我在回答许多与可访问性相关的问题时遇到过这种情况,只是引用WCAG并说“不要这样做!”。不幸的是,“复制和粘贴”代码答案不可避免地变得更受欢迎,因为它们比告诉他们寻求这些解决方案的要求是错误的经理更容易。 - MobA11y
1
在代码点上达成了一致,在许多答案中,我包括了一个最不冒犯的hack,但是我选择不这样做。我听到很多用户热情地描述这个问题,如果我提供一个绕过它的方法,我感觉自己会像个混蛋。 - aardrian
不幸的是,这样做可能会更糟。我正在尝试使一本15世纪的书的外交版本易于理解,但像ñl这样的单词需要发音为en el而不是ene eledõde eſtã应该发音为dónde están而不是dode eta。鉴于这样的缩写几乎出现在每个单词中,默认阅读实际上是难以理解的。W3C正在努力解决这个问题,但它可能不会成为一个可行的解决方案:https://www.w3.org/TR/pronunciation-use-cases/ - user0721090601
来自Léonie Watson,SR用户的持续确认:https://lists.w3.org/Archives/Public/w3c-wai-ig/2020OctDec/0047.html - aardrian

2

我认为我找到了一个解决方案。在MacOS上使用VoiceOver似乎可以解决问题。(尚未测试其他屏幕阅读器,如JAWS。)

解决方案是重新使用<ruby>元素,并使用CSS覆盖其样式:

Please enter your 
<ruby>
  <rt aria-hidden="true" style="font-size: 1em"><!--Standard-->licence</rt>
  <rt style="display: inline-block; width: 1px; height: 1px; overflow: hidden"><!--Phonetic-->license</rt>
</ruby>
 number

这会正确显示字符串,并在不暂停的情况下用语音发音读出来。

但我也愿意接受其他/更好的解决方案。或对问题本身进行批判。 :)


0

这个有点用:

<span aria-label="license">licence</span>

如果 span 元素是 AT 的焦点,则会宣布其具有“组”角色,可以使用 aria-roledescription 属性覆盖该角色(仅允许非空白值)。在阅读句子或段落时不描述该角色。

2
https://developer.paciellogroup.com/blog/2017/07/short-note-on-aria-label-aria-labelledby-and-aria-describedby/ - aardrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接