2017-02-19 4 views
-1

В Objective C, можно создать CFLocale следующим образом (взяты из this post в 2012 году):Как сделать CFLocale для целевого языка?

  • CFLocaleRef myLocale = CFLocaleCopyCurrent() для данной местности; или:

  • CFLocaleRef myLocale = CFLocaleCreate(kCFAllocatorDefault, CFSTR("ja")), для целевого региона. Имя локали происходит из крайнего правого столбца ISO 639-1/639-2 table, который Apple, определяет в качестве стандарта для языковых кодов here *

* Примечание:. Очень старые примеры кода см длинных кодов языка, как «японский» , как may be expected версиями Mac OS X старше 10.4.

Как создать CFLocale в Swift 3, поскольку API, похоже, изменился несколькими способами?

ответ

1

CFLocale является бесплатным мостиком NSLocale, так что вы можете просто позвонить

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

в зависимости от того есть ли у вас ISO 639-1 или нет.

Соответствующий Свифта "тип значения наложения" 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")) 
1

Вот изменения API к Swift начиная пример Objective-C данном с 2012:

  • 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) 
Смежные вопросы