接受的答案和其他答案都没有考虑到首选语言可以是设备语言之外的另一种语言。
所述设备的语言是在其中操作系统元件和苹果的应用程序呈现的语言。
的首选语言是用户想要在苹果只提供了一组有限的翻译本地化的应用程序的语言。如果首选语言是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 - >常规- >语言和区域选项- >首选语言的词序
然后,您可以使用设备语言代码并将其翻译为语言名称。以下各行将以设备语言打印设备语言。如果设备设置为西班牙语,例如“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
。看我的答案。