ได้รับการยอมรับและคำตอบอื่น ๆ ทั้งหมดไม่ได้คำนึงถึงว่าภาษาที่สามารถเป็นภาษาอื่นที่ไม่ใช่ภาษาอุปกรณ์
ภาษาของเครื่องที่เป็นภาษาที่องค์ประกอบของระบบปฏิบัติการและแอพพลิเคแอปเปิ้ลจะถูกนำเสนอ
ภาษาที่เป็นภาษาที่ผู้ใช้ต้องการที่จะมีแอพพลิเคท้องถิ่นใน. แอปเปิ้ลเพียง แต่ให้ชุด จำกัด ของการแปล หากภาษาที่ต้องการคือภาษาเดียวที่ 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
ภายใน ดูคำตอบของฉัน