问题描述
我正在尝试实现我的 ios 项目的可访问性。
有没有办法在打开画外音时纠正某些特定单词的发音?例如,“speech”的正确发音是[spiːtʃ],但我希望在我的整个项目中,画外音将“speech”的所有单词都读为“speak”[spiːk]。
我知道有一种方法可以设置任何 UIElements 的可访问性标签,我想将发音更改为“speak”。但是,有些元素是动态的。例如,我们从后端获取标签文本,但我们永远不知道标签文本何时会是“语音”。如果我从后端得到“speech”这个词,我想听到画外音将它读成“speak”。
因此,我想更改画外音的设置。每次,如果单词是'speech',画外音将读为'speak'。
我可以吗?
解决方法
简答。
是的,您可以这样做,但请不要这样做。
长答案
我可以吗?
是的,当然可以。
只需从后端获取数据,并使用要替换的单词字典对您想要以不同方式说出的任何单词的字符串进行查找替换,然后添加新版本的字符串作为可访问性标签。
你应该这样做吗?
绝对不会。
每次有人试图“修正”发音时,结果都会让事情变得更糟。
我什至不明白为什么您希望屏幕阅读器用户在其他人看到“语音”时听到“说话”,这没有意义并且可能会破坏句子的含义:
“我参加了昨晚的演讲,内容非常丰富”。
会变成:
“我参加了昨晚的演讲,内容非常丰富”
屏幕阅读器用户已经习惯了。
屏幕阅读器用户习惯于听到不同的说法(而且是错误的!),我猜是您使用屏幕阅读器的时间不够长,无法习惯屏幕阅读器语音的特性。
您实际上不仅不会帮助屏幕阅读器用户,反而会让事情变得更糟。
我只覆盖了屏幕阅读器的默认行为两次,一次是版本号被读取为日期,一次是密码管理器读取密码并尝试将内容读取为单词。
除了那些非常狭窄的例子,我没有遇到过为屏幕阅读器改变一些东西的理由。
盲文用户呢?
你可以改变一些事情,因为它们听起来不对。但盲文用户也使用屏幕阅读器,为他们更改内容可能会非常令人困惑(如上面的“语音”示例)。
最佳做法如何
“为辅助技术用户提供尽可能与非辅助技术用户相似的体验”。这是可访问性的首要指导原则,第二次更改发音和单词,您可能会更改句子的含义,从而提供不同的体验。
总结
无论如何,当它不应该成为时,这变成了咆哮(我的歉意,我只是想弄清楚这一点,因为我经常回答类似的问题!),希望你明白了,离开单独和呈现相同的信息,我什至没有涵盖不同的语音合成器、语言翻译以及使用“非自然”语言可能会干扰的更多内容。
,最简单的解决方案是从后端返回仅用于accessibilityLabel 的第二个字符串。
如果你需要更多的控制,你可以传递一个 AttributedString 作为辅助功能标签,并有许多不同的选项来控制发音
https://medium.com/macoclock/ios-attributed-accessibility-labels-f54b8dcbf9fa
,我可以吗?
是的,你可以,我推荐它。 ?
以下是我将遵循的里程碑:
- 当你收到后端的文本时,写一种正则表达式来找出发音不正确的单词。
- 将它们替换为属性字符串并使用
accessibilitySpeechIPANotation
键为 VoiceOver 定义适当的语音(自 iOS11 起可用)。立>
如果需要,可以提供有关此主题的更多信息:?
- VoiceOver pronunciation
- Attributed a11y properties
- Apple doc
- WWDC summary with phonetics
-
Creating phonemes:阅读
Phonemes
表。
根据这个基本原理,您只是调整了您认为 VoiceOver 错误读出的单词的声音:对盲文功能没有影响。
在我看来,必须执行这种操作,因为您的应用程序必须适应用户,而不是相反。