How to get current language code with Swift?

前端 未结 13 2032
难免孤独
难免孤独 2020-12-07 11:06

I want get the language code of the device (en, es...) in my app written with Swift. How can get this?

I\'m trying this:

var preferredLanguages : NSL         


        
相关标签:
13条回答
  • 2020-12-07 11:25

    In Swift, You can get the locale using.

    let locale = Locale.current.identifier
    
    0 讨论(0)
  • 2020-12-07 11:28

    To get current language used in your app (different than preferred languages)

    NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!
    
    0 讨论(0)
  • 2020-12-07 11:28

    swift 3

    let preferredLanguage = Locale.preferredLanguages[0] as String
    print (preferredLanguage) //en-US
    
    let arr = preferredLanguage.components(separatedBy: "-")
    let deviceLanguage = arr.first
    print (deviceLanguage) //en
    
    0 讨论(0)
  • 2020-12-07 11:30

    This is what I use in Swift 5 Xcode 11:

    Inside the class variables:

    let languagePrefix = Bundle.main.preferredLocalizations.first?.prefix(2)
    

    This comes as a string. It returns 2 characters, i.e. "en", "es", "de"...

    From this I can easily determine what language to display:

     if languagePrefix == "es" { self.flipCard.setTitle("última carta", for: .normal) }
     if languagePrefix == "en" { self.flipCard.setTitle("Last Card", for: .normal) }
    

    If you want the full information of the language, then remove ?.prefex(2)

    0 讨论(0)
  • 2020-12-07 11:32

    I want to track the language chosen by the user in Settings app every time the user launches my app - that is not yet localized (my app is in English only). I adopted this logic:

    1. create an enum to to make it easier to handle the languages in array

      enum Language: String {
      
      case none = ""
      case en = "English"
      case fr = "French"
      case it = "Italian"
      
      } // add as many languages you want
      
    2. create a couple of extension to 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. When you need, you can simply use the extension

      if let currentLanguage = Locale.currentLanguage {
          print(currentLanguage.rawValue)
          // Your code here.
      }
      
    0 讨论(0)
  • 2020-12-07 11:34

    Swift 4 & 5:

    Locale.current.languageCode
    
    0 讨论(0)
提交回复
热议问题