Как получить текущий код языка с помощью Swift?
Я хочу получить код языка устройства (en, es...) в моем приложении, написанном с помощью Swift. Как это можно получить?
Я пытаюсь это сделать:
var preferredLanguages : NSLocale!
let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)
Но это возвращает ноль.
Спасибо!
Ответы
Ответ 1
Я думаю, вы этого хотите:
let pre = NSLocale.preferredLanguages()[0]
Swift 3
let pre = Locale.preferredLanguages[0]
Ваш подход возвращал нуль, потому что вы отправляли сообщение на объект nil:
var preferredLanguages : NSLocale! // <- Here you never initialize it to anything
let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)
// ^^^ ... and so you send something to nil, which returns nil
Ответ 2
В Swift 3
let langStr = Locale.current.languageCode
Ответ 3
Важно различать Язык приложения и язык языка языка (ниже приведен код ниже Swift 3) p >
Вернет язык Устройство:
let locale = NSLocale.current.languageCode
Вернет язык App:
let pre = Locale.preferredLanguages[0]
Ответ 4
В Swift 3:
NSLocale.current.languageCode
Ответ 5
Чтобы получить текущий язык, используемый в вашем приложении (отличается от предпочитаемых языков)
NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!
Ответ 6
В Swift 5.1:
Locale.current.languageCode
Ответ 7
Свифт 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
, затем добавьте нужный язык.
Ответ 8
Свифт 3
let preferredLanguage = Locale.preferredLanguages[0] as String
print (preferredLanguage) //en-US
let arr = preferredLanguage.components(separatedBy: "-")
let deviceLanguage = arr.first
print (deviceLanguage) //en
Ответ 9
вы можете использовать приведенный ниже код, он отлично работает с быстрым 3
var preferredLanguage : String = Bundle.main.preferredLocalizations.first!
Ответ 10
Я хочу отслеживать язык, выбранный пользователем в приложении "Настройки" каждый раз, когда пользователь запускает мое приложение - оно еще не локализовано (мое приложение только на английском языке). Я принял эту логику:
-
создать перечисление, чтобы упростить обработку языков в массиве
enum Language: String {
case none = ""
case en = "English"
case fr = "French"
case it = "Italian"
} // add as many languages you want
-
создать пару расширений для 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
}
}
-
Когда вам нужно, вы можете просто использовать расширение
if let currentLanguage = Locale.currentLanguage {
print(currentLanguage.rawValue)
// Your code here.
}
Ответ 11
В Swift вы можете получить локаль, используя.
let locale = Locale.current.identifier