web-dev-qa-db-ja.com

Swiftで現在の言語コードを取得する方法は?

Swiftで記述されたアプリでデバイスの言語コード(en、es ...)を取得したい。これをどうやって手に入れることができますか?

私はこれを試しています:

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

しかし、これはnilを返します。

ありがとう!

93
user3739367

Swift 3

let langStr = Locale.current.languageCode
149
Vadim Motorine

アプリの言語デバイスのロケール言語を区別することが重要です(以下のコードはSwiftにあります)

デバイス言語を返します:

let locale = NSLocale.current.languageCode

App言語を返します:

let pre = Locale.preferredLanguages[0]
64
raed

Swift 3:

NSLocale.current.languageCode
36
mazorati

アプリで使用されている現在の言語を取得するには(優先言語とは異なる)

NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!
35
Benknopf

In Swift 4:

Locale.current.languageCode
25

Swift 3&4&4.2&5

Locale.current.languageCodeは定期的にコンパイルされません。プロジェクトにローカライズを実装しなかったからです。

2つの可能な解決策があります

1)String(Locale.preferredLanguages[0].prefix(2))電話の言語を適切に返します。

タイプen-Enを取得する場合は、Locale.preferredLanguages[0]を使用できます

2)Project(MyApp)-> Project (not Target)->を選択し、+ボタンを押してLocalizationsに入れ、必要な言語を追加します。

16
codeByThey

Swift

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

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

以下のコードを使用すると、Swift 3で正常に動作します。

var preferredLanguage : String = Bundle.main.preferredLocalizations.first!
5
Amr Angry

Swiftでは、を使用してロケールを取得できます。

let locale = Locale.current.identifier
4
Yogesh Bharate

ユーザーがアプリを起動するたびに、設定アプリでユーザーが選択した言語を追跡します-これはまだローカライズされていません(アプリは英語のみです)。私はこのロジックを採用しました:

  1. 配列の言語を扱いやすくするためにenumを作成します

    enum Language: String {
    
    case none = ""
    case en = "English"
    case fr = "French"
    case it = "Italian"
    
    } // add as many languages you want
    
  2. いくつかのextensionから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.
    }
    
4
Miniapps