How to get detailed language of device in swift

Swift 3 does not have an NSLocaleCountryCode, this is replaced by regionCode

https://developer.apple.com/reference/foundation/nslocale.key/1417845-countrycode

solution in Swift 5:

let langCode = Locale.current.languageCode ?? ""
let regionCode = Locale.current.regionCode ?? ""
let language = "\(langCode)-\(regionCode)"

Another solution is NSLocale.current.identifier This will return e.g. en_us

You could replace _ for -. it will look like this: NSLocale.current.identifier.replacingOccurrences(of: "_", with: "-")


No need an extra effort, just use the following as per your requirement.

Locale.current.identifier //en_US
Locale.current.collatorIdentifier //en-US

Start with the currentLocale() and ask questions about it. For example:

let lang = NSLocale.currentLocale().localeIdentifier

Or, at a finer level of granularity:

let langId = NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode) as! String
let countryId = NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as! String
let language = "\(langId)-\(countryId)" // en-US on my machine