iOS中用于DateFormatters的“区域”设置的目的

时间:2018-09-28 14:45:13

标签: ios localization dateformatter

我知道DateFormatter既使用语言也使用区域来生成所需的字符串/内容。 特别是阅读documentation时,似乎我正确地理解了它们应该如何工作。

  

语言环境代表特定用户的格式选择,而不是该用户的首选语言。这些通常是相同的,但可以不同。例如,居住在德国的以英语为母语的人可能选择英语作为语言,选择德国作为区域。文本以英语显示,但日期,时间和数字遵循德语格式规则。日期在月份之前,并且24小时制代表时间,如表4-1

那为什么我要设置手机

  • 首选系统语言: [西班牙语,意大利语]

  • 地区:美国

  • ,而我的应用仅支持德语

一个简单的(伪代码)

let df = DateFormatter()
df.string(from: date)` 

返回miércoles, 26. sept 2018吗? (西班牙语为德语区域格式)

考虑到包(以及从NSLocalizedString(..)返回的所有字符串和相关资源)已经正确选择了语言(de,德语),为什么基础对象不使用相同的语言(而不是区域)由捆绑包支持和标识以产生所需的输出,而是紧贴系统的输出?

我是否缺少一些应用程序明智的配置,或者我真的必须重写我需要使用的每个Calendar,DateFormatter,NumberFormatter,ecc的语言,语言环境和区域?尤其要考虑这些类及其实例的效率如何。

1 个答案:

答案 0 :(得分:0)

我在评论中列出了几个问题,答案可能会改变我对该问题的理解,但是假设问题只是如何使用德语中所说的德语来使格式化程序格式化,那只是在设置语言环境。

let locale = Locale(identifier: "de-DE")
let df = DateFormatter()
df.dateStyle = .full
df.locale = locale
df.string(from: Date())  // "Freitag, 28. September 2018"

我当前使用的语言环境为美国这一事实并不会对此产生影响。

创建DateFormatter和分配其区域设置只需要创建DateFormatter就可以了。这是额外的一行代码,但是您可以根据需要将其包装在扩展中(而且,如果您希望避免重复创建它们,则可能要创建共享的不可变实例,但这是正确的,无论您是否设置了显式的Locale还是没有)。

dateStyle之类的事情的全部要点是它可以适应用户的配置。如果您不想适应用户的配置,只需配置格式器以使其符合您的期望即可。