허용되는 답변과 다른 답변은 모두 선호 언어가 장치 언어 이외의 다른 언어 일 수 있다는 점을 고려하지 않습니다 .
장치 언어는 운영 체제 요소와 애플의 애플 리케이션을 제시하는 언어입니다.
선호하는 언어는 사용자가 애플 만 번역의 제한된 집합을 제공합니다. 현지화 애플 리케이션을하고 싶은 언어입니다. 선호하는 언어가 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
있습니다. 내 대답을 참조하십시오.