在iOS应用中,VoiceOver何时会自动切换语言?

3
我的手机系统语言设置为en_us,我已经将瑞典语和法语添加到VoiceOver转盘语言中。
添加语言后,当浏览包含语言设置的网页时,VoiceOver/Safari组合会自动以相应的语言开始。
检查了我安装的各种非英语AppStore应用程序后,其中一个在我打开它时会触发屏幕阅读器的自动语言更改。
我在一个非常简单的iOS应用程序中尝试了语言和本地化设置,以查看是否可以触发这样的切换。该应用程序包含一个由Storyboard编辑器创建的带有UILabel的单个视图控制器。
我尝试更改Info.plist中“本地化本地开发区域”的值。瑞典语在图形编辑器的下拉菜单中不可用,因此我使用“打开源代码”进行了更改。这只是将瑞典标签读取为英语文本,也就是与不做任何事情没有区别。
然后我尝试了ahbou's solution中的编辑project.pbxproj,将对“en”的引用替换为“sv”。我重新部署了这个更改,但没有任何区别。
我尝试添加第二个非英语环境,以及检查和取消“使用基本本地化”选项,但这也没有任何差别。
在所有的瞎忙活中,它曾经很短暂地开始了瑞典语,但在将转子转回后,我再也无法触发改变。
我想到从Xcode部署和部署IPA之间可能存在差异,所以我尝试了一下,但没有运气。
我试图看看能否在不依赖故事板并且本地化为英语和瑞典语的非最小应用程序中触发VoiceOver语言更改。如果在通过Xcode部署之前编辑模式,并将“应用程序语言”设置为“瑞典语”和“应用程序区域”设置为“瑞典”,则会导致VoiceOver在应用程序中以瑞典语开始,但仅设置应用程序语言则不会。
查看我安装的触发瑞典语音的AppStore应用程序时,它看起来像是在Web视图内显示的Web内容。即使如此,它工作的事实表明应该有一些方法来在标准iOS应用程序中触发自动切换。
感谢任何想法!
---- 2019年2月6日星期三编辑 ----

根据Mats的建议,我尝试使用accessibilityLanguage设置。在UIApplication上设置语言会将其传播到应用程序中的所有元素。我按以下方式修改了应用程序委托:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        application.accessibilityLanguage = "sv"
        return true
    }

请注意,对于UIApplication,默认情况下isAccessibilityElement的值为false(与用户通常预期看到或与之交互的组件不同)。无需将其更改为true以应用语言设置,并且我不确定更改它的价值是什么,因为用户不直接与应用程序交互。我尝试将其设置为true,但就VoiceOver而言似乎没有任何区别。

我知道你已经尽可能地解释了,但是你能告诉我们你的应用程序到底是做什么或者应该做什么,它现在没有做什么,以及你期望它做什么吗? - staticVoidMan
1
这不是关于我正在编写的应用程序(我正在开发的应用程序已国际化)。我试图确定编写单语言应用程序的开发人员需要做什么才能使VoiceOver在运行该应用程序的设备的系统语言与应用程序语言不同的情况下自动选择正确的语言。我编写了一个简单的应用程序进行实验。 - Pacificana
我觉得你误解了我的问题。在非英语国家,人们通常会使用多种语言的应用程序。例如,作为瑞典的居民,我使用的公共部门应用程序没有国际化,但我并不想将瑞典语设置为我的系统语言。期望所有应用都本地化并不现实,但是我们可以找到一种方法告诉VoiceOver应用程序的语言是什么。从我的问题中可以清楚地看出,我确实尝试了将本地化设置为一个区域,但它并没有起作用。 - Pacificana
1
哦,好的,所以......假设一个应用程序的文字内容是瑞典语,并且未本地化。但您希望配音人员以瑞典语音/发音读取其内容,而不是设备的默认语音引擎,可能是英式英语。这是你想表达的吗? - staticVoidMan
您可以在此处阅读我的博客文章,了解如何配置VoiceOver以手动切换语言:https://someminorusabilityissues.blogspot.com/2019/02/configuring-ios-screen-reader-voiceover.html,以及基于Mats建议的解决方案的文章:https://someminorusabilityissues.blogspot.com/2019/02/how-hard-can-it-be-to-configure-ios.html。 - Pacificana
显示剩余2条评论
2个回答

2

您可以通过检查Info.plist文件(XCode的GUI编辑器仅允许少数语言)来更改首选语言,在那里修改下一个属性。

<key>CFBundleLocalizations</key>
<array>
    <string>sp</string>
</array>

不要使用sp(西班牙语的代码),而是使用您想要使用的区域设置代码。我这样做了,现在VoiceOver语言在整个应用程序中都是普遍存在的。


0

您可以使用accessibilityLanguage属性更改任何辅助功能元素的VoiceOver语言。该属性在NSObjectUIAccessibility扩展中有所记录。

我认为它也会影响所有子元素,因此您只需要为应用程序窗口设置即可。


嗨Mats,我现在已经尝试过了。将其设置到窗口上并没有起作用,但是在应用程序上进行设置就可以了。谢谢! - Pacificana
我在博客中介绍了这个解决方案,并将你列为Mats。如果你联系我,我很乐意提供你的全名。https://someminorusabilityissues.blogspot.com/2019/02/how-hard-can-it-be-to-configure-ios.html - Pacificana

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