How to get current language code with Swift?

前端 未结 13 2037
难免孤独
难免孤独 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: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.
      }
      

提交回复
热议问题