如何快速更改 VoiceOver 的发音?
Posted
技术标签:
【中文标题】如何快速更改 VoiceOver 的发音?【英文标题】:How to change the VoiceOver pronunciation in swift? 【发布时间】:2021-02-16 20:57:07 【问题描述】:我正在尝试实现对我的 ios 项目的可访问性。
打开画外音时,有没有办法纠正某些特定单词的发音?例如,“speech”的正确发音是 [spiːtʃ],但我希望画外音在我的整个项目中将所有单词 'speech' 读成与 'speak' [spiːk] 相同。
我知道有一种方法可以设置我想要将发音更改为“说话”的任何 UIElements 的可访问性标签。但是,有些元素是动态的。例如,我们从后端获取标签文本,但我们永远不会知道标签文本何时会是“语音”。如果我从后端得到“speech”字样,我希望听到画外音将其读作“speak”。
因此,我想更改画外音的设置。每次,如果单词是“speech”,画外音将读作“speak”。
我可以吗?
【问题讨论】:
"> 然而,有些元素是动态的”——你的意思是什么?任何从NSObject
继承的东西都可以有accessibilityLabel
。您无法全局替换屏幕阅读器发音的单词,因为它已经发音了您告诉它的内容 - 可访问性标签。
抱歉表达不清楚。我的意思是,如果我们从后端获取标签文本。文本将是动态的,我们永远不会知道这个标签的内容是什么。我想做的是改变一些特定单词的发音。 “演讲”就是一个例子。如果我从后端得到“speech”字样,我希望听到画外音将其读为“speak”。
您可以从后端添加可访问性标签文本以及有效负载中的单独字符串。
【参考方案1】:
简短回答。
是的,你可以这样做,但请不要这样做。
长答案
可以吗?
是的,当然可以。
只需从后端获取数据并使用要替换的单词字典对字符串执行查找替换,然后将新版本的字符串添加为可访问性标签。
你应该这样做吗?
绝对不是。
每次有人试图“修复”发音时,结果都会变得更糟。
我什至不明白为什么您希望屏幕阅读器用户在其他人看到“讲话”时听到“讲话”,这是没有意义的,并且可能会破坏句子的含义:
“我参加了昨晚的演讲,内容非常丰富”。
会变成:
“我参加了昨晚的演讲,内容非常丰富”
屏幕阅读器用户习惯了。
屏幕阅读器用户习惯于听到不同的说法(而且是错误的!),我猜你使用屏幕阅读器的时间还不够长,无法习惯屏幕阅读器语音的特性。
您不仅不能帮助屏幕阅读器用户,反而会让事情变得更糟。
我只重写了两次屏幕阅读器默认行为,一次是版本号被读取为日期,一次是密码管理器读取密码并尝试将内容读取为单词。
除了那些 非常 狭隘的例子,我还没有找到改变屏幕阅读器的理由。
盲文用户呢?
你可以改变一些东西,因为它们听起来不正确。但是盲文用户也使用屏幕阅读器,并且为他们更改内容可能会非常混乱(根据上面的“语音”示例)。
最佳实践呢
“为辅助技术用户提供与非辅助技术用户尽可能相似的体验”。这是可访问性的首要指导原则,第二个你改变发音和单词,你可能会改变句子的含义,从而提供不同的体验。
总结
无论如何,当它不应该成为一种咆哮时(我很抱歉,我只是想明白这一点,因为我经常回答类似的问题!),希望你明白这个想法,离开它本身并提供相同的信息,我什至没有介绍不同的语音合成器、语言翻译以及使用“非自然”语言可能会干扰的更多内容。
【讨论】:
感谢您的回复。 “Speech”和“Speak”只是一个例子。其实,我只是想通过画外音来纠正错误的发音。有时,画外音会导致某些单词的发音不正确。 正如我所说,您无需费心。屏幕阅读器用户已经习惯了它,它会让你非常头疼。如果您仍想继续,那么字典查找和替换是运行时的方法,但我不想进一步推广该选项,因为这是一种不好的做法。为自己节省一些额外的工作,然后离开它们 :-) 总会有其他可访问性之战要赢得!呵呵。 感谢您的广泛回答!这帮助我决定不在我的accessibilityLabel
中使用 ^.
以使其听起来更正确(对我来说)。
没问题@laka,很高兴你发现它有用!【参考方案2】:
最简单的解决方案是从后端返回第二个字符串,该字符串仅用于accessibilityLabel。
如果您需要更多控制,可以将 AttributedString 作为accessibilityLabel 传递,其中包含许多用于控制发音的不同选项
https://medium.com/macoclock/ios-attributed-accessibility-labels-f54b8dcbf9fa
【讨论】:
以上是关于如何快速更改 VoiceOver 的发音?的主要内容,如果未能解决你的问题,请参考以下文章