Foundation-什么是语言环境的collat orIdentifier?

问题描述 投票:0回答:1

目标实现

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

  • 对于法国用户,为[24/01/2020或24/01/20(我不介意)
  • 美国用户01/24/20

注意:(当前)该应用程序仅使用英语。

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

问题

[在Xcode游乐场中,在法语(Regio = BE)(但英语为Xcode)的Mac上,以下代码返回奇怪的内容。

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是法语的计算机。那是什么它的目标是什么,为什么它返回的东西与其他东西大不相同?

swift nsdateformatter foundation
1个回答
1
投票

[首先,要解决的问题:语言环境在Xcode中是棘手的,尤其是在Playgrounds中。如果您的游乐场针对iOS,则它基于模拟器的区域设置。如果它针对的是macOS,我会觉得它有点奇怪,因为Xcode会覆盖所有内容。请注意,语言环境的更改通常需要重新启动才能完全生效(无论是Simulator还是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"
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.