Tất cả các câu trả lời được chấp nhận và các câu trả lời khác đều không tính đến việc ngôn ngữ ưa thích có thể là ngôn ngữ khác ngoài ngôn ngữ thiết bị .
Các ngôn ngữ điện thoại là ngôn ngữ, trong đó yếu tố hệ điều hành và các ứng dụng của Apple được trình bày.
Các ngôn ngữ ưa thích là ngôn ngữ người dùng muốn có các ứng dụng cục bộ tại. Apple chỉ cung cấp một bộ hạn chế về bản dịch. Nếu ngôn ngữ ưa thích là một ngôn ngữ mà Apple đã dịch ứng dụng của họ sang ngôn ngữ đó, thì đó cũng sẽ là ngôn ngữ thiết bị. Tuy nhiên, nếu người dùng thích ngôn ngữ mà Apple không cung cấp bản dịch thì thiết bị và ngôn ngữ ưa thích sẽ không phù hợp . Ngôn ngữ thiết bị sẽ không ở vị trí đầu tiên trong danh sách ngôn ngữ ưa thích.
Các chức năng sau đây sẽ đi qua danh sách ngôn ngữ ưa thích và kiểm tra xem có bản dịch nào trong các khung của Apple không. Ngôn ngữ đầu tiên có bản dịch là ngôn ngữ thiết bị. Hàm sẽ trả về mã ngôn ngữ của nó.
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
}
Điều này hoạt động nếu danh sách ngôn ngữ ưa thích là:
- Tiếng Nam Phi (iOS không được dịch sang tiếng Nam Phi)
- Tiếng Tây Ban Nha (Ngôn ngữ thiết bị)
Các danh sách ngôn ngữ ưa thích có thể chỉnh sửa trong : Settings.app -> General -> Language & Region -> Preferred Language thứ tự
Bạn có thể sử dụng mã ngôn ngữ thiết bị và dịch nó thành tên ngôn ngữ. Các dòng sau sẽ in ngôn ngữ thiết bị bằng ngôn ngữ thiết bị. Ví dụ: "Español" nếu thiết bị được đặt thành tiếng Tây Ban Nha.
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
. Xem câu trả lời của tôi.