如何使用Swift获取当前语言代码?

问题描述 投票:93回答:10

我想在我用Swift编写的应用程序中获取设备的语言代码(en,es ...)。怎么能得到这个?

我正在尝试这个:

  var preferredLanguages : NSLocale!
  let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)

但这会返回零。

谢谢!

swift nslocale
10个回答
152
投票

在Swift 3中

let langStr = Locale.current.languageCode

4
投票

在Swift中,您可以使用以下语言环境。

let locale = Locale.current.identifier

66
投票

在App语言和设备语言环境之间做出区别非常重要(下面的代码在Swift 3中)

将返回设备语言:

let locale = NSLocale.current.languageCode

将返回App语言:

let pre = Locale.preferredLanguages[0]

36
投票

获取应用中使用的当前语言(不同于首选语言)

NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!

36
投票

在Swift 3中:

NSLocale.current.languageCode

28
投票

在Swift 5.1中:

Locale.current.languageCode

17
投票

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,然后添加你想要的语言。


10
投票

迅捷3

let preferredLanguage = Locale.preferredLanguages[0] as String
print (preferredLanguage) //en-US

let arr = preferredLanguage.components(separatedBy: "-")
let deviceLanguage = arr.first
print (deviceLanguage) //en

5
投票

你可以使用下面的代码,它可以很好地使用swift 3

var preferredLanguage : String = Bundle.main.preferredLocalizations.first!

5
投票

我希望每次用户启动我的应用时都会在“设置”应用中跟踪用户选择的语言 - 尚未本地化(我的应用仅提供英文版本)。我采用了这个逻辑:

  1. 创建一个枚举,以便更容易处理数组中的语言 enum Language: String { case none = "" case en = "English" case fr = "French" case it = "Italian" } // add as many languages you want
  2. 为Locale创建一些扩展 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 } }
  3. 如果需要,您只需使用扩展程序即可 if let currentLanguage = Locale.currentLanguage { print(currentLanguage.rawValue) // Your code here. }
© www.soinside.com 2019 - 2024. All rights reserved.