2017-02-19 48 views
-1

在Objective C,如下(從this post在2012截取)可以創建一個CFLocale:如何爲目標語言製作CFLocale?

  • CFLocaleRef myLocale = CFLocaleCopyCurrent()當前區域;或者:

  • CFLocaleRef myLocale = CFLocaleCreate(kCFAllocatorDefault, CFSTR("ja")),對於目標語言環境。語言環境的名稱來源於ISO 639-1/639-2 table的最右邊一列,其中蘋果公司指定作爲其語言代碼here標準*

*注意:很老的代碼示例涉及到長期的語言代碼,如「日本」 ,作爲may be expected由Mac OS X 10.4以前的版本。

如何在Swift 3中創建一個CFLocale,因爲API似乎在幾種方式上發生了變化?

回答

1

CFLocale是免費電話橋接NSLocale,所以你可以簡單地調用

let myLocale = NSLocale(localeIdentifier: "ja") 
// or 
let myLocale = NSLocale(localeIdentifier: NSLocale.canonicalLocaleIdentifier(from: "Japanese")) 

取決於你是否有或不是ISO 639-1語言代碼。

相應夫特3 「覆蓋值類型」 Locale (其用於通過CalendarDateFormatter,..., 比較SE-0069 Mutability and Foundation Value Types) 可以類似地與

let myLocale = Locale(identifier: "ja") 
// or 
let myLocale = Locale(identifier: Locale.canonicalIdentifier(from: "Japanese")) 
創建
1

以下是由於從2012給出的目標C如API變化夫特:

  • CFLocaleRef已取代CFLocale
  • CFStringRef已取代CFString字符串,其可通過常規字符串鑄造被創建以CFString字符串類型:"ja" as CFString!
  • CFLocaleCreate()現在預計一個CFLocaleIdentifier而不僅僅是一個CFString字符串,所以我們使用CFLocaleCreateCanonicalLanguageIdentifierFromString()必須提供一個。

這可以通過以下兩行來完成:

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