【问题标题】:How do I make a CFLocale for a target language?如何为目标语言制作 CFLocale?
【发布时间】:2017-02-19 12:54:21
【问题描述】:
在 Objective C 中,可以按如下方式创建 CFLocale(取自 2012 年的 this post):
CFLocaleRef myLocale = CFLocaleCopyCurrent() 用于当前语言环境;或:
CFLocaleRef myLocale = CFLocaleCreate(kCFAllocatorDefault, CFSTR("ja")),用于目标语言环境。语言环境名称来自ISO 639-1/639-2 table 的最右列,Apple 将其指定为语言代码here 的标准。*
*注意:非常古老的代码示例指的是像“日语”这样的长语言代码,在 Mac OS X 10.4 之前的版本中为 may be expected。
如何在 Swift 3 中创建一个 CFLocale,因为 API 似乎在几个方面发生了变化?
【问题讨论】:
标签:
swift
swift3
locale
core-foundation
【解决方案1】:
CFLocale 可免费转接到NSLocale,因此您只需拨打电话
let myLocale = NSLocale(localeIdentifier: "ja")
// or
let myLocale = NSLocale(localeIdentifier: NSLocale.canonicalLocaleIdentifier(from: "Japanese"))
取决于您是否有 ISO 639-1 语言代码。
对应的Swift 3“覆盖值类型”Locale
(由Calendar、DateFormatter、...、
比较SE-0069 Mutability and Foundation Value Types)
可以类似地创建
let myLocale = Locale(identifier: "ja")
// or
let myLocale = Locale(identifier: Locale.canonicalIdentifier(from: "Japanese"))
【解决方案2】:
以下是自 2012 年给出的 Objective-C 示例以来对 Swift 的 API 更改:
这可以通过以下两行来完成:
let localeIdentifier: CFLocaleIdentifier = CFLocaleCreateCanonicalLanguageIdentifierFromString(kCFAllocatorDefault, "ja" as CFString!)
let locale: CFLocale = CFLocaleCreate(kCFAllocatorDefault, localeIdentifier)