强制屏幕阅读器将数字作为个别数字读取

4

我正在使用语音识别技术,并尝试让它将数字读作单个数字,例如如果我输入了2000,则语音识别会读出"two thousand"。我希望所需的行为是读出"two zero zero zero"。

我的当前输入元素大致如下:

<input class="some-class" id="some-id" name="some-name"
 type="text">

我尝试过将类型属性设置为type="number"type="tel",并添加一个等于style="speak:spell-out"的样式属性,但它们都没有起作用。
当我使用空格分隔数字,如value="2 0 0 0"时,它可以工作,但是当然,你不能指望用户这样做。
我理解可能有一种方法可以使用JavaScript来解决这个问题,但由于业务要求,解决方案不能在浏览器中包含JavaScript。
有什么建议吗?

onchange="this.value = this.value.replace(/\s+/, '').split('').join(' ')" 当发生改变时,"this.value" 的值将被替换为去除空格后的字符串,并且每个字符之间会插入一个空格。 - epascarello
@QuentinC 是正确的,除非你能给出一个非常具体的理由,说明为什么你认为你应该尝试修改输出,否则不要去尝试这样做。让屏幕阅读器自行处理吧,屏幕阅读器用户可以使用控件逐字符阅读,如果他们有需要的话。 - GrahamTheDev
2个回答

7
不要强行规定数字的发音或数字分组方式。如果数字的分组对于特定的意义或含义有重要性,请添加空格。基本原则是数字在屏幕阅读器中不应与其呈现方式不同。如果必须以特定方式分隔数字,请添加空格、点、破折号或其他分隔符。相反,如果没有空格,则无需绝对按位读取数字。这很简单。
不要强迫屏幕阅读器以您自己的方式读取某些内容。其他人可能与您的视角不同。关于数字,有些人喜欢逐个数字地阅读,但其他人喜欢将它们分组为两个、三个或四个,以便更容易阅读、写作和记忆。他们的屏幕阅读器通常已进行配置。
如果特定的分组很重要,则必须使用空格或其他字符分隔组。如果没有分隔符,则这意味着分组没有特别重要性。
请注意,屏幕阅读器始终提供逐位数字阅读的可能性,如果用户愿意的话。通常情况下,它不是默认设置。逐个数字地阅读数字通常仅用于非常大的数字(十亿)或混合数字和字母时。
此外,请考虑以下事项:
- 不同屏幕阅读器用户有不同的偏好,从无障碍性的角度来看,违背偏好或常见默认设置通常是不明智的。 - 有几个屏幕阅读器和许多语言中的许多不同声音;所有可能在阅读数字时略微不同,任何微小的变化为了微调它都可能带来更多问题而不是解决问题。 - 屏幕阅读器用户习惯发音怪癖,他们可以使用个人词典进行修正。 - 屏幕阅读器现在对于是否需要整体、分组或逐位数字阅读并没有那么糟糕。
因此,避免决定特定的分组或发音方式。这是一个坏主意,并且在技术上很危险。

谢谢回复。我应该澄清一下,被读取的数字将会有8位数(1000万)。我理解你的意思,也很合理,但在这种情况下,我需要逐位地读出数字。你有什么办法可以实现这个吗? - Josh Parker
除了添加空格之外,没有办法确保您的数字会被逐位读取。我自己是一个屏幕阅读器用户。如果我真的需要逐位阅读一个数字,我总是有这个可能性,但默认情况下我不需要这样做。您真的不应该强加给我您阅读数字的方式,因为它可能不适用于我。我会稍微修改我的答案。 - QuentinC
也许你可以提供更多背景信息,为什么你真的需要逐位读取数字?这是一个账号吗?电话号码?还是个人识别码?在我看来,这三者都没有绝对的必要性。它是金融相关的吗?科学相关的?如果是这样,请认真考虑添加空格或分组。 - QuentinC
@QuentinC 我有一个非常不同的问题,但谷歌把我带到了这里... 我有一个选择框,其中包含值 10 - 2021 - 50 等等。但屏幕阅读器要么说成 ten twenty,要么是通过 10-20one zero two zero)来读出。有没有办法让它读作 ten to twenty 或其他方式?我知道你说我们不应该强制屏幕阅读器以不同的方式读出某些内容,但屏幕阅读器是否能理解 10 - 20ten twenty)和 10 20ten twenty)之间的区别呢? - Robin Schambach
除非你明确写上“10到20”,否则不行,但别担心。上下文应该足够清楚,你是在选择一个范围。 你可以使用aria-label,但是1/它在<option>中不起作用,2/对于你的情况可能完全没有用处。 如果你想要更多的精确信息,请随时提问。 - QuentinC

0
我知道可能有一种使用JavaScript的方法来实现这个,但由于业务要求,解决方案不能在浏览器中包含JavaScript。
你已经尝试了HTML和CSS,而且不能使用JavaScript。屏幕阅读器使用无障碍树。它们不使用CSS,没有指令告诉它们如何拼写文本。它们可能选择在阅读某些缩写时拼写一些首字母缩略词。这是屏幕阅读器的选择。
屏幕阅读器用户习惯于以任何奇怪的方式听到数字,并且如果他们希望按字符拼读它们,他们有相应的快捷键来主动拼读。

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