热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NSDateFormatter和iOS11中的当前语言

如何解决《NSDateFormatter和iOS11中的当前语言》经验,为你挑选了2个好方法。

似乎NSDateFormatteriOS11 中的默认行为已更改.此代码用于根据iOS11之前当前选择的iPhone/iPad语言工作和生成日期格式化程序:

 _dateFormatterInstance = [[NSDateFormatter alloc] init];
 _dateFormatterInstance.timeZOne= [NSTimeZone systemTimeZone];

看起来在iOS11中我们必须为它明确指定locale属性:

 _dateFormatterInstance = [[NSDateFormatter alloc] init];
 _dateFormatterInstance.timeZOne= [NSTimeZone systemTimeZone];
 _dateFormatterInstance.locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] firstObject]];

有人可以证实我的发现吗?



1> rmaddy..:

这不是问题NSDateFormatter,它是iOS 11支持本地化的一个变化.

在iOS 11下,[NSLocale currentLocale]仅返回应用程序本地化支持的语言.如果您的应用仅支持英语(作为基本本地化),则无论用户在设备上选择何种语言,currentLocale都将始终返回英语.

在iOS 10及更早版本中,currentLocale无论您的应用支持哪种本地化,都会直接代表用户选择的语言和区域.

类如NSDateFormatter默认使用NSLocale currentLocale.因此,无论您的应用通过其本地化实际支持哪种语言,类NSDateFormatter都会在设备上设置的语言中显示文本,即使它与您的应用使用的语言不同.

iOS 11修复了这种不一致.虽然有人可能会认为这种变化打破了许多仅支持一种(或几种)语言的应用程序,但它实际上使应用程序更加一致.

为了使所有这些清楚,请考虑一个例子.您可以使用英语基础本地化创建一个简单的测试应用程序.如果您使用iOS 10运行您的应用程序并且设备的语言设置为英语,您显然会看到英文文本,并且您会看到格式化为英语的日期.如果您现在将设备的语言更改为法语并重新启动应用程序,则用户现在可以在应用程序中看到英文文本(因为这是唯一的本地化),但现在日期显示法语月份和工作日名称.

现在在iOS 11下运行相同的应用程序.与iOS 10一样,如果设备的语言是英语,您会看到所有的英语.如果您随后将设备的语言更改为法语并运行应用程序,iOS 11会发现您的应用程序仅支持英语并currentLocale返回英语,而不是法语.所以现在用户看到英文文本(由于应用程序的本地化),日期现在仍然是英文.


谢谢!这非常有用和彻底.在我的情况下 - 我实际上更喜欢iOS10的行为,因为我们从后端为用户可见的所有UI文本提供本地化支持,但显然不适用于月份和日期等标准事物.

2> 小智..:

这实际上似乎更像是一个错误,而不是iOS 11中的行为故意改变.如果您只有一种语言集,则此行为不会出现,因为即使您的应用未本地化,也Locale.current始终返回正确的语言和区域那种语言.

但是,如果您使用多种语言(例如法语和英语),则iOS 11在使用时似乎总是倾向于使用英语或您应用中最接近的支持语言Locale.current.

Locale.preferredLanguages 似乎返回正确的语言区域信息,因此您可以使用它.

下面是示出从输出的示例Locale.currentLocale.preferredLanguages,显示了不一致性.

这是从仅支持英语的应用程序生成的.在设备上,法语被设置为主要语言和区域,在第一个示例中将英语(澳大利亚)设置为第二语言.

(不正确)Locale.current使用多种语言 - 请注意英语是何种语言,何时应该是法语,因此应该是fr_FR

  - identifier : "en_FR"
  - kind : "current"

(正确)Locale.preferredLanguages多种语言

  - 0 : "fr-FR"
  - 1 : "en-AU"

(正确)Locale.current用法语作为唯一的语言

  - 0 : "fr-FR"

(正确)Locale.preferredLanguages用法语作为唯一的语言

  - identifier : "fr_FR"
  - kind : "current"


在iOS 12中,如果列表中只有一种喜欢的语言(例如西班牙语),则“ Locale.current”为英语(如果这是您在应用中支持的唯一语言)。
推荐阅读
author-avatar
手机用户2502936007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有