Подтвердить что ты не робот

Как получить текущий код языка с помощью Swift?

Я хочу получить код языка устройства (en, es...) в моем приложении, написанном с помощью Swift. Как это можно получить?

Я пытаюсь это сделать:

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

Но это возвращает ноль.

Спасибо!

4b9b3361

Ответ 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

Я хочу отслеживать язык, выбранный пользователем в приложении "Настройки" каждый раз, когда пользователь запускает мое приложение - оно еще не локализовано (мое приложение только на английском языке). Я принял эту логику:

  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.
    }
    

Ответ 11

В Swift вы можете получить локаль, используя.

let locale = Locale.current.identifier