You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在macOS/AppKit中如何为VoiceOver指定界面元素的内容语言

macOS AppKit 下指定无障碍朗读语言的可行方案

方案1:单语言内容控件直接设置视图级属性

macOS 10.10 及以上版本中,所有NSView子类都遵守NSAccessibility协议,原生支持和iOS端逻辑一致的accessibilityLanguage属性,不需要通过富文本属性绕路实现。
直接对目标NSTextField设置对应语言的ISO 639-1编码(建议附带区域编码匹配系统语音包)即可:

// Swift 示例
// 指定控件内容为法语,VoiceOver会自动调用法语语音引擎朗读
wordTextField.accessibilityLanguage = "fr-FR"
// Objective-C 示例
self.wordTextField.accessibilityLanguage = @"ja-JP"; // 指定为日语

注意:设置前请确认系统已下载对应语言的语音包,路径为「系统设置 > 辅助功能 > 语音 > 系统语音 > 自定义」

方案2:多语言混合富文本内容的处理

如果单个控件内同时存在多种语言的文本,再使用富文本的accessibilityLanguage属性,该属性需要绑定到对应文本的范围才能生效,直接设置到整个富文本对象不会触发效果:

let mixedText = NSMutableAttributedString(string: "你好 Bonjour")
// 给中文片段指定中文语音
mixedText.addAttribute(
    .accessibilityLanguage, 
    value: "zh-CN", 
    range: NSRange(location: 0, length: 2)
)
// 给法语片段指定法语音
mixedText.addAttribute(
    .accessibilityLanguage, 
    value: "fr-FR", 
    range: NSRange(location: 2, length: 7)
)
textField.attributedStringValue = mixedText

调试排查流程

如果设置后未生效,按以下步骤排查:

  • 确认系统版本高于等于10.10,低版本系统无对应原生属性
  • 打开Accessibility Inspector,选中目标控件后在「Advanced」标签页查看Accessibility Language字段,确认属性值已正确写入
  • 重启VoiceOver(按Option+Command+F5关闭后重新打开),清除语音缓存后再测试

内容的提问来源于stack exchange,提问作者codingFriend1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:54:04