我正在尝试使用以下代码来获取用户选择的当前首选语言:
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
这是第一次运行应用程序时给出的首选语言,但一旦我更改了系统设置中的语言,就不会反映更改。如果我卸载应用程序,那么更改语言,然后再次重新安装应用程序,该应用程序现在正在使用这种新语言(并且只显示此语言)
以下是发生的事情:
- 首次安装应用时,语言设置为英语(澳大利亚语)。
- 应用会显示
*language
给出值en-AU
(正确的值)。- 现在语言已改为塞尔维亚语。
- 重新启动应用后
*language
仍然提供en-AU
,而应该sr-XX
。- 重新安装应用后,
language
显示正确的值sr-XX
且应用按预期正常工作,但现在它不会更改为任何其他语言(如上所述)
我正在iPhone(iOS 11)上直接测试应用程序。我已在项目设置中添加了本地化资源,以确保我还在方案中将默认应用程序语言设置为 System Preferred 。
我也尝试使用currentLocale
,但它仍然会给出相同的结果。
我还在某处找到了以下代码,这也是给出和数组2的元素,但其行为与preferredLanguage
相同,并且不随语言变化而变化。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *languages = [[NSMutableArray alloc] initWithArray:[userDefaults objectForKey:@"AppleLanguages"]];
我对iOS开发相对较新,不确定我在哪里做错了。请帮忙。
答案 0 :(得分:5)
如果您想要“始终反映最新配置设置”的区域设置,请在Swift中使用autoupdatingCurrent
,在Objective-C中使用autoupdatingCurrentLocale
。
如果您希望在应用程序恰好挂起或运行时收到任何更改通知,您可能还希望自己在Swift中NSLocale.currentLocaleDidChangeNotification
的观察者,在Objective-C中NSCurrentLocaleDidChangeNotification
。在语言环境发生变化的背景中(例如,为了相应地更新UI)。