【问题标题】:Foundation - What is collatorIdentifier for Locale?Foundation - 什么是区域设置的 collat​​orIdentifier?
【发布时间】:2020-01-10 14:22:09
【问题描述】:

要实现的目标

在表格中,有一个日期列。日期应具有基于用户区域设置的格式。 示例:

  • 24/01/2020 或 24/01/20(我不介意)适用于法国用户
  • 2020 年 1 月 24 日,美国用户

注意:该应用程序(目前)只有英文版。

我有一个Date 对象,我想以正确的格式向用户显示它。为此,我想我必须使用具有 locale 参数的 DateFormatter。但我遇到了后者的问题。

问题

在 Xcode 操场上,在法语 (Regio = BE) 的 Mac 上(但 Xcode 是英语),以下代码返回奇怪的东西。

Locale.current.regionCode // returns "BE"
Locale.current.languageCode // returns "en"
Locale.preferredLanguages[0] // returns "en"
Locale.current.identifier // returns "en_BE"
Locale.current.collatorIdentifier // returns "fr-BE"
Locale.current.collationIdentifier // returns nil

注意:法语是比利时的一种语言。

collatorIdentifier 让我感兴趣,因为它是唯一一个检测到我的 mac 是法语的。但它是什么?它的目标是什么?为什么它返回的东西与其他的明显不同?

【问题讨论】:

  • 感谢您提供的链接,这当然很有趣。但是我想知道它如何回答Locale.collatorIdentifier 是什么以及为什么它返回的结果与其他示例不同的问题。
  • 您说过您的目标是什么,这就是您应该如何根据用户区域设置和设备设置显示本地化日期。如果这不能解决您的问题,请告诉我,以便我重新提出您的问题。
  • 这确实是最终目标,但问题在于语言环境。参考问题的问题部分。

标签: swift nsdateformatter foundation


【解决方案1】:

首先,对于您的问题:语言环境在 Xcode 中很棘手,尤其是在 Playgrounds 中。如果您的 Playground 以 iOS 为目标,那么它基于 Simulator 的 Locale。如果它针对的是 macOS,我觉得这有点奇怪,因为 Xcode 覆盖了一些东西。请注意,区域设置更改通常需要重新启动才能完全生效(模拟器或 Mac),但我仍然发现 Playgrounds 不可靠,因为 Xcode 没有正确本地化(或者我想根本没有本地化......)如果你没有重新启动,那么可能会发生不匹配。如果您在 Playgrounds 中跑步,即使您重新启动,所有赌注都将取消。我建议创建 Mac 命令行工具。它们更可靠。

如果您要使用 Playgrounds,请使用您初始化的特定区域设置,而不是 current

对于它是什么的问题,排序规则通常是应该如何将字母视为“排序”。这在语言之间、在共享一种语言的文化之间,甚至在单一文化中的用法之间都是不同的。几个例子from the ICU(还有很多):

  • 字母 A-Z 可以按与英文不同的顺序排序。例如,在立陶宛语中,“y”在“i”和“k”之间排序。

  • 可以将字母组合视为一个字母。例如,在传统的西班牙语中,“ch”被视为单个 字母,并在“c”和“d”之间排序。

  • 重音字母可以被视为非重音字母的次要变体。例如,“é”可以等同于“e”。

  • 重音字母可以被视为不同的字母。例如,丹麦语中的“Å”被视为一个单独的字母,紧随其后 “Z”。

  • 在一种语言中被认为是不同的非重音字母在另一种语言中可能是模糊的。例如,字母“v”和“w”是两个 根据英文不同的字母。但是,“v”和“w”是 传统上被认为是瑞典语中同一字母的变体形式。

collatorIdentifier 是整个标识符,collationIdentifier 是特定用途部分。

let l = Locale(identifier: "de@collation=phonebook")
l.collatorIdentifier  // "de@collation=phonebook"
l.collationIdentifier // "phonebook"

【讨论】:

  • 非常感谢 Rob 的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多