NSLocale NSLocale preferred语言不会更新语言更改

时间:2017-12-28 08:34:18

标签: ios localization

我正在尝试使用以下代码来获取用户选择的当前首选语言:

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开发相对较新,不确定我在哪里做错了。请帮忙。

1 个答案:

答案 0 :(得分:5)

如果您想要“始终反映最新配置设置”的区域设置,请在Swift中使用autoupdatingCurrent,在Objective-C中使用autoupdatingCurrentLocale

如果您希望在应用程序恰好挂起或运行时收到任何更改通知,您可能还希望自己在Swift中NSLocale.currentLocaleDidChangeNotification的观察者,在Objective-C中NSCurrentLocaleDidChangeNotification。在语言环境发生变化的背景中(例如,为了相应地更新UI)。