【问题标题】: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 (由CalendarDateFormatter、...、 比较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 更改:

      • CFLocaleRef 已被 CFLocale 取代。
      • CFStringRef 已被 CFString 取代,它可以通过常规的 String 强制转换为 CFString 类型来创建:@987654323 @。
      • CFLocaleCreate() 现在需要一个 CFLocaleIdentifier 而不仅仅是一个 CFString,因此我们必须使用 CFLocaleCreateCanonicalLanguageIdentifierFromString() 提供一个。

      这可以通过以下两行来完成:

      let localeIdentifier: CFLocaleIdentifier = CFLocaleCreateCanonicalLanguageIdentifierFromString(kCFAllocatorDefault, "ja" as CFString!)
      let locale: CFLocale = CFLocaleCreate(kCFAllocatorDefault, localeIdentifier)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 2013-09-10
        • 1970-01-01
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多