【问题标题】:Change Region Format in Settings in simulator but the locale in app doesn't change在模拟器的设置中更改区域格式,但应用程序中的语言环境没有改变
【发布时间】:2014-12-03 09:40:49
【问题描述】:

我使用 NSDateFormatter 的实例来帮助在我的应用程序中显示日期字符串,但是在我将模拟器设置中的区域格式从“美国”更改为“英国”后,设置中的示例将日期显示为“5, 2014 年 1 月”,这证明改变是成功的。但是当我在模拟器中打开我的应用程序时,日期仍然是“2014 年 1 月 5 日”。 我使用以下代码检查我的应用程序中的语言环境:

NSLocale *locale = [NSLocale currentLocale];
NSString *currentLocale = [locale objectForKey:NSLocaleIdentifier];
NSLog(@"Current locale is %@", currentLocale);

它会记录:当前语言环境是 en_US。 似乎我的应用程序在模拟器设置中没有获得当前的语言环境。应该是我在模拟器设置中更改了语言环境,我的应用程序可以反映更改。有什么问题吗? 日期格式代码为

static NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateStyle = NSDateFormatterMediumStyle;
dateFormatter.timeStyle = NSDateFormatterNoStyle;
self.dateLabel.text = [dateFormatter stringFromDate:item.dateCreated];

我正在使用 iOS 模拟器 8.1 版、Xcode 6.1.1 版、iOS 8.1、SDK 8.1

dateFormatter 代码放在一个视图控制器的 viewWillAppear 方法中,更改区域格式后,创建新的视图控制器仍然呈现旧的语言环境。同样的结果甚至杀死了应用程序。我在表格视图中注册区域设置更改通知并刷新它。它可以反映语言环境的变化。无法理解其中的区别。

【问题讨论】:

    标签: ios xcode internationalization simulator


    【解决方案1】:

    我也有同样的问题。它看起来像模拟器中的一个错误:https://devforums.apple.com/message/1063365

    【讨论】:

      【解决方案2】:

      您必须设置 NSDateFormatter 的语言环境

      NSLocale *locale = [NSLocale currentLocale];
      NSString *currentLocale = [locale objectForKey:NSLocaleIdentifier];
      NSLog(@"Current locale is %@", currentLocale);
      
      
      static NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      
      [dateFormatter setLocale:locale]; // <- Here
      
      dateFormatter.dateStyle = NSDateFormatterMediumStyle;
      dateFormatter.timeStyle = NSDateFormatterNoStyle;
      self.dateLabel.text = [dateFormatter stringFromDate:item.dateCreated];
      

      【讨论】:

      • setLocale之前,我在设置里改成“英国”后,currentLocale还是“en_US”。所以 [dateFormatter setLocale:locale];没有帮助。
      • 这是因为模拟器正在使用您的 Mac 的语言环境,即使您从模拟器设置中更改了语言环境。如果您在实际设备上进行测试,则需要该行。
      • 感谢设备建议,虽然我还没有在设备上尝试过我的应用程序。我希望它现在可以在模拟器上运行。 dateFormatter 代码放在一个视图控制器的 viewWillAppear 方法中,更改区域格式后,创建新的视图控制器仍然呈现旧的区域格式。同样的结果甚至杀死了应用程序。我在表格视图中注册区域设置更改通知并刷新。它可以反映语言环境的变化。无法理解其中的区别。有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 2011-07-07
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2011-02-05
      相关资源
      最近更新 更多