VoiceOver在什么情况下会自动在iOS应用中切换语言

时间:2019-02-05 13:10:51

标签: ios xcode locale voiceover

我的电话被设置为en_us作为系统语言,并且我已经在VoiceOver转子语言中添加了瑞典语和法语。

添加语言后,我发现在浏览包含文档语言设置的网页时,VoiceOver / Safari组合会自动以适当的语言启动。

在检查了我安装的各种非英语AppStore应用程序后,其中一个在我打开屏幕阅读器时会触发自动语言更改。

我在一个非常简单的iOS应用中尝试了语言和本地化设置,以查看是否可以触发这种切换。该应用程序包含一个带有UILabel的视图控制器,该视图控制器在情节提要编辑器中创建。

我试图在Info.plist中更改“本地化本机开发区域”的值。瑞典语在图形编辑器的下拉菜单中不可用,因此我使用“作为源代码打开”对其进行了更改。这只是将瑞典标签视为英文文本,也就是说,什么都不做没有区别。

然后,我尝试ahbou's solution编辑project.pbxproj,将对“ en”的引用替换为“ sv”。我进行了重新部署,并进行了此更改,但这没什么区别。

我尝试添加第二个非英语语言环境,并选中和取消选中“使用基本本地化”选项,但这也没有什么不同。

在无所事事的情况下,它确实很短暂地以瑞典语开始,但是将转子转回原位后,我再也无法触发更改。

在我看来,从Xcode部署与部署IPA之间可能会有区别,所以我尝试了这一点,但是没有运气。

我尝试查看是否可以在不依赖故事板且本地化为英语和瑞典语的非最小应用程序中触发VoiceOver语言更改。如果在通过Xcode进行部署之前编辑架构,则将“应用程序语言”设置为瑞典语,将“应用程序区域”设置为瑞典语将使VoiceOver以该应用程序的瑞典语启动,但仅设置应用程序语言不会。

在查看我安装的触发瑞典语语音的AppStore应用程序时,该应用程序可能是显示在网络视图中的网络内容。即使是这种情况,它可以正常工作的事实表明,应该有某种方法可以触发标准iOS应用中的自动切换。

感谢任何想法!

----编辑于2019年2月6日星期三----

我根据Mats的有用建议对accessibilityLanguage设置进行了实验。在UIApplication上设置语言确实会将其传播到应用程序中的所有元素。我修改了应用程序委托,如下所示:

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

请注意,isAccessibilityElement的值在默认情况下对于UIApplication为false(与通常要求用户查看或交互的组件不同)。不必将其更改为true即可应用语言设置,并且我不确定由于用户不直接与应用程序交互而进行更改的价值。我确实尝试将其设置为true,就VoiceOver而言,这似乎没有任何区别。

2 个答案:

答案 0 :(得分:1)

您可以通过检查 Info.plist 文件(XCode 的 GUI 编辑器只允许几种语言)来更改您的首选语言,一旦修改下一个属性

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

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

答案 1 :(得分:0)

您可以使用任何辅助功能元素上的SUBSTRING()属性来更改VoiceOver语言。在ORDER BY SUBSTRING(name, LOCATE('(', name)+1, 4) 的{​​{1}}附件中有记录。

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