Skip to content

Instantly share code, notes, and snippets.

@zwaldowski
Created July 22, 2016 13:59
Show Gist options
  • Save zwaldowski/b9e9187b6bceba7b47be2ccef25ef1fb to your computer and use it in GitHub Desktop.
Save zwaldowski/b9e9187b6bceba7b47be2ccef25ef1fb to your computer and use it in GitHub Desktop.
import Foundation
private extension NSPersonNameComponentsFormatter {
static let nameDefaultsByLocale: [String: AnyObject] = {
let bundle = NSBundle(forClass: NSPersonNameComponentsFormatter.self)
guard let url = bundle.URLForResource("NSPersonNameComponentsFormatterDefaults", withExtension: "plist"),
let dict = NSDictionary(contentsOfURL: url) as? [String: AnyObject] else { return [:] }
return dict["localeInfo"] as! [String: AnyObject]
}()
static func supportedNameDefaults(from locale: NSLocale) -> [String: AnyObject] {
let preferredLocalization = NSBundle.preferredLocalizationsFromArray(Array(nameDefaultsByLocale.keys), forPreferences: [ locale.localeIdentifier ])
return nameDefaultsByLocale[preferredLocalization[0]] as! [String: AnyObject]
}
}
extension NSPersonNameComponentsFormatter {
enum Order: Int {
// "unset" is 0
case givenNameFirst = 1, familyNameFirst
}
static func userPreferredOrder(for locale: NSLocale = .currentLocale()) -> Order {
if let order = Order(rawValue: NSUserDefaults.standardUserDefaults().integerForKey("NSPersonNameDefaultDisplayNameOrder")) {
return order
} else if let order = (supportedNameDefaults(from: locale)["nameOrder"] as? Int).flatMap(Order.init) {
return order
} else {
return .givenNameFirst
}
}
}
NSPersonNameComponentsFormatter.userPreferredOrder(for: .init(localeIdentifier: "en_US"))
NSPersonNameComponentsFormatter.userPreferredOrder()
// https://github.com/apple/swift/blob/swift-2.3-branch/stdlib/private/StdlibUnittestFoundationExtras/StdlibUnittestFoundationExtras.swift
NSPersonNameComponentsFormatter.userPreferredOrder(for: .init(localeIdentifier: "ja_JP"))
withOverriddenNSLocaleCurrentLocale("ja_JP") {
NSPersonNameComponentsFormatter.userPreferredOrder()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment