web-dev-qa-db-ja.com

現在のアプリケーションロケールを取得するにはどうすればよいですか?

現在のロケールを取得する必要があります。ユーザーロケールではなく、アプリケーションロケール。

アプリケーションに2つのローカリゼーション(プロジェクト設定)があるとします。英語(デフォルト)とフランス語です。ユーザーがiPhoneでフランス語を設定すると、アプリケーションにフランス語のインターフェースが表示されます。ユーザーがiPhoneでドイツ語を設定すると、アプリケーションは英語のインターフェースを表示します(英語がデフォルトであるため)。

では、現在表示されている現在のアプリケーションロケールを取得するにはどうすればよいですか?前もって感謝します。

13
Alexandr

選択された回答は現在のデバイス言語を返しますが、-notアプリで使用される実際の言語です。アプリで優先言語のローカリゼーションを提供しない場合:

NSString *language = NSBundle.mainBundle.preferredLocalizations.firstObject;

NSLocale *locale = NSLocale.currentLocale;
NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *country = [usLocale displayNameForKey:NSLocaleCountryCode 
                                          value:countryCode];

NSLog(@"country: %@", country);
22
Vijay yadav

これよりも簡単な方法があるかもしれませんが(他の回答を参照)、これは最も堅牢であり、strings- fileを使用してアプリをローカライズする一般的な原則が適用されない限り、廃止され、このメソッドは機能します。

一般に、アプリケーションのロケールを取得する必要はありません(ただし、読み続けても可能です!)ローカライズされたテキストが必要な場合は、NSLocalizedString()を使用します。画像をローカライズする必要がある場合は、ローカライズされたリソースを使用します。ただし、「アプリケーションロケール」を呼び出すときに、「分析」(アプリが使用されている言語を知りたい)や、サーバーベースの通信を使用する場合のユーザーへの一貫した1言語インターフェース(たとえば、ユーザーがアプリ内で表示しているのと同じ言語でサーバーエラーメッセージをローカライズするため)

現在表示されているアプリのローカライズを取得したい場合は、サポートされているロケールごとに_Localizable.strings_ファイルがあると思います。したがって、Englisch文字列ファイルで次の行を追加できます

_"lang" = "en";
_

フランス語の文字列ファイルに次の行を追加します

_"lang" = "fr";
_

その後、NSLocalizedString("lang")(Swift)またはNSLocalizedString(@"lang")(objective-C)を呼び出すことで、常にアプリケーションロケールを取得できます。そしてもちろん、新しいローカリゼーションをアプリに追加するときはいつでも、新しいローカリゼーション文字列ファイルに「lang」エントリを設定する必要があります。

31
Michael

Swift 3使用:

let language = Bundle.main.preferredLocalizations.first

12

このようにして、ロケールから国コードを取得できます。

NSLocale *currentLocale = [NSLocale currentLocale];  // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode];

国コードを取得します。 es(スペイン)、fr(フランス)など.

このコードをインターフェース選択にマップできます。

これがお役に立てば幸いです。

3
Viral Savaj

次のコードを使用して選択した言語を取得できます。

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];

if ([language isEqualToString:@"fr"]){//French
    [do  your stuff]
}
else{//English

   [do  your stuff]
}

List_of_ISO_639-1_codes

これがお役に立てば幸いです。

1

解決策は提案されたものよりもはるかに簡単です:

デバイスの言語

let deviceLanguage = NSLocale.preferredLanguages.first

実際のアプリの翻訳

let language = Bundle.main.preferredLocalizations.first

たとえば、iPhoneを英語-インド語に設定した場合、私のアプリには英語-インド語の翻訳がありませんが、英語-英国しかありません。

Printing description of language:
"en-GB"
Printing description of deviceLanguage:
"en-IN"
0
Kappe