我想在我用Swift编写的应用程序中获取设备的语言代码(en,es ...)。怎么能得到这个?
我正在尝试这个:
var preferredLanguages : NSLocale!
let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)
但这会返回零。
谢谢!
在Swift 3中
let langStr = Locale.current.languageCode
在Swift中,您可以使用以下语言环境。
let locale = Locale.current.identifier
在App语言和设备语言环境之间做出区别非常重要(下面的代码在Swift 3中)
将返回设备语言:
let locale = NSLocale.current.languageCode
将返回App语言:
let pre = Locale.preferredLanguages[0]
获取应用中使用的当前语言(不同于首选语言)
NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!
在Swift 3中:
NSLocale.current.languageCode
在Swift 5.1中:
Locale.current.languageCode
Swift 3&4&4.2&5
Locale.current.languageCode
不定期编译。因为您没有为项目实施本地化。
您有两种可能的解决方案
1)String(Locale.preferredLanguages[0].prefix(2))
它正确地返回电话。
如果你想获得en-En
类型,你可以使用Locale.preferredLanguages[0]
2)选择Project(MyApp)
-> Project (not Target)
->按+按钮进入Localizations
,然后添加你想要的语言。
迅捷3
let preferredLanguage = Locale.preferredLanguages[0] as String
print (preferredLanguage) //en-US
let arr = preferredLanguage.components(separatedBy: "-")
let deviceLanguage = arr.first
print (deviceLanguage) //en
你可以使用下面的代码,它可以很好地使用swift 3
var preferredLanguage : String = Bundle.main.preferredLocalizations.first!
我希望每次用户启动我的应用时都会在“设置”应用中跟踪用户选择的语言 - 尚未本地化(我的应用仅提供英文版本)。我采用了这个逻辑:
enum Language: String {
case none = ""
case en = "English"
case fr = "French"
case it = "Italian"
} // add as many languages you want
extension Locale {
static var enLocale: Locale {
return Locale(identifier: "en-EN")
} // to use in **currentLanguage** to get the localizedString in English
static var currentLanguage: Language? {
guard let code = preferredLanguages.first?.components(separatedBy: "-").last else {
print("could not detect language code")
return nil
}
guard let rawValue = enLocale.localizedString(forLanguageCode: code) else {
print("could not localize language code")
return nil
}
guard let language = Language(rawValue: rawValue) else {
print("could not init language from raw value")
return nil
}
print("language: \(code)-\(rawValue)")
return language
}
}
if let currentLanguage = Locale.currentLanguage {
print(currentLanguage.rawValue)
// Your code here.
}