Усі прийняті та інші відповіді не враховують, що бажаною мовою може бути інша мова, ніж мова пристрою .
Мова пристрою - це мова, на якій представлені елементи операційної системи та програми Apple.
Бажана мова є мовою користувач хотів би мати додаток , локалізоване в. Apple , надає тільки обмежений набір перекладів. Якщо бажаною мовою є одна мова, на яку Apple переклала свої програми, це також буде мовою пристрою. Однак якщо користувач віддає перевагу мові, на яку Apple не надає переклади, пристрій і бажані мови не збігаються . Мова пристрою не буде на першій позиції у списку бажаних мов.
Наступна функція пройде через список бажаних мов і перевірить, чи є переклад у рамках Apple. Першою мовою для перекладу є мова пристрою. Функція поверне свій код мови.
func deviceLanguage() -> String? {
let systemBundle: NSBundle = NSBundle(forClass: UIView.self)
let englishLocale: NSLocale = NSLocale(localeIdentifier: "en")
let preferredLanguages: [String] = NSLocale.preferredLanguages()
for language: String in preferredLanguages {
let languageComponents: [String : String] = NSLocale.componentsFromLocaleIdentifier(language)
guard let languageCode: String = languageComponents[NSLocaleLanguageCode] else {
continue
}
// ex: es_MX.lproj, zh_CN.lproj
if let countryCode: String = languageComponents[NSLocaleCountryCode] {
if systemBundle.pathForResource("\(languageCode)_\(countryCode)", ofType: "lproj") != nil {
// returns language and country code because it appears that the actual language is coded within the country code aswell
// for example: zh_CN probably mandarin, zh_HK probably cantonese
return language
}
}
// ex: English.lproj, German.lproj
if let languageName: String = englishLocale.displayNameForKey(NSLocaleIdentifier, value: languageCode) {
if systemBundle.pathForResource(languageName, ofType: "lproj") != nil {
return languageCode
}
}
// ex: pt.lproj, hu.lproj
if systemBundle.pathForResource(languageCode, ofType: "lproj") != nil {
return languageCode
}
}
return nil
}
Це працює, якщо список бажаних мов:
- Африкаанс (iOS не перекладається на африкаанс)
- Іспанська (мова пристрою)
Список бажаних мов можна редагувати у : Settings.app -> General -> Language & Region -> Preferred Order Language
Можна, ніж використовувати код мови пристрою, і перекласти його в назву мови. Наступні рядки надрукують мову пристрою мовою пристрою. Наприклад, "Español", якщо пристрій встановлено на іспанську мову.
if let deviceLanguageCode: String = deviceLanguage() {
let printOutputLanguageCode: String = deviceLanguageCode
let printOutputLocale: NSLocale = NSLocale(localeIdentifier: printOutputLanguageCode)
if let deviceLanguageName: String = printOutputLocale.displayNameForKey(NSLocaleIdentifier, value: deviceLanguageCode) {
// keep in mind that for some localizations this will print a language and a country
// see deviceLanguage() implementation above
print(deviceLanguageName)
}
}
NSLocale
. Дивіться мою відповідь.