'How to get detailed language of device in swift

I have a database on the server that contains all the languages keywords that I use inside my applications and these languages could be changed any time.

In the language table of database there is column for Language (id , key, value, lang).

In the android application I read the language from device and it returns for example en-GB or en-US.

But in the iOS application I can't get the language like the above example , It always returns just the language (en , es, fr).

So I can't query to database to get the language specified keywords on the iOS application. Because the languages on the database is en-GB, en-US style.

var langId: String? = NSLocale.preferredLanguages().first as? String

How can I get the language with more details ?



Solution 1:[1]

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: "-")

Solution 2:[2]

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

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

Solution 3:[3]

For Swift 4 use instead:

NSLocale.current.identifier //Output: en-US, pt-BR

Solution 4:[4]

Swift 5

Locale.currentLanguage.rawValue

Solution 5:[5]

just use this code line can solve:

let identifier = Locale.current.identifier

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Tapas Pal
Solution 3 moraisandre
Solution 4 Lasantha Basnayake
Solution 5 Kingiol