programing tip

Swift로 현재 언어 코드를 얻는 방법은 무엇입니까?

itbloger 2020. 8. 17. 08:21
반응형

Swift로 현재 언어 코드를 얻는 방법은 무엇입니까?


Swift로 작성된 앱에서 장치의 언어 코드 (en, es ...)를 얻고 싶습니다. 어떻게 얻을 수 있습니까?

나는 이것을 시도하고있다 :

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

그러나 이것은 nil을 반환합니다.

감사!


Swift 3에서

let langStr = Locale.current.languageCode

앱 언어기기 로케일 언어 의 차이를 만드는 것이 중요합니다 (아래 코드는 Swift 3에 있습니다 ).

장치 언어를 반환합니다 .

let locale = NSLocale.current.languageCode

언어를 반환합니다 .

let pre = Locale.preferredLanguages[0]

Swift 3 :

NSLocale.current.languageCode

앱에서 현재 사용되는 언어를 얻으려면 (선호하는 언어와 다름)

NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!

Swift 5.1에서 :

Locale.current.languageCode

스위프트 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누른 다음 원하는 언어를 추가합니다.


스위프트 3

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

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

아래 코드를 사용할 수 있습니다.

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

사용자가 내 앱을 실행할 때마다 설정 앱에서 사용자가 선택한 언어를 추적하고 싶습니다. 아직 현지화되지 않았습니다 (내 앱은 영어로만 제공됨). 나는이 논리를 채택했다 :

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

Swift에서는 로케일을 사용할 수 있습니다.

let locale = Locale.current.identifier

참고 URL : https://stackoverflow.com/questions/24591167/how-to-get-current-language-code-with-swift

반응형