Jawaban yang diterima, dan jawaban lainnya tidak memperhitungkan bahwa bahasa yang dipilih dapat berupa bahasa lain dari bahasa perangkat .
Bahasa perangkat adalah bahasa tempat elemen sistem operasi dan aplikasi Apple disajikan.
Bahasa yang disukai adalah bahasa yang ingin dilokalisasi oleh pengguna. Apple hanya menyediakan serangkaian terjemahan terbatas. Jika bahasa yang disukai adalah satu bahasa yang diterjemahkan Apple ke aplikasi mereka, itu juga akan menjadi bahasa perangkat. Namun jika pengguna lebih memilih bahasa yang Apple tidak menyediakan terjemahan, perangkat dan bahasa pilihan tidak akan cocok . Bahasa perangkat tidak akan berada di posisi pertama dalam daftar bahasa yang disukai.
Fungsi berikut akan melalui daftar bahasa yang disukai dan memeriksa apakah ada terjemahan dalam kerangka kerja Apple. Bahasa pertama yang memiliki terjemahan adalah bahasa perangkat. Fungsi akan mengembalikan kode bahasanya.
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
}
Ini berfungsi jika daftar bahasa yang disukai adalah:
- Afrikaans (iOS tidak diterjemahkan ke dalam Afrikaans)
- Spanyol (Bahasa Perangkat)
Daftar bahasa yang disukai dapat diedit di : Settings.app -> Umum -> Bahasa & Wilayah -> Urutan Bahasa Pilihan
Anda dapat menggunakan kode bahasa perangkat dan menerjemahkannya ke nama bahasa. Baris berikut akan mencetak bahasa perangkat dalam bahasa perangkat. Misalnya "Español" jika perangkat diatur ke bahasa Spanyol.
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
. Lihat jawaban saya.