受け入れられた、および他のすべての回答は、優先言語がデバイス言語以外の言語である可能性があることを考慮していません。
デバイスの言語、オペレーティングシステムの構成要素とAppleのアプリが提示されている言語です。
好みの言語には、ユーザーがローカライズされたアプリケーションがしたい言語です。Appleは唯一の翻訳の限定セットを提供します。優先言語がAppleがアプリを翻訳した1つの言語である場合、それはデバイス言語にもなります。ただし、ユーザーが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
ます。私の答えを見てください。