現在のロケールを取得する必要があります。ユーザーロケールではなく、アプリケーションロケール。
アプリケーションに2つのローカリゼーション(プロジェクト設定)があるとします。英語(デフォルト)とフランス語です。ユーザーがiPhoneでフランス語を設定すると、アプリケーションにフランス語のインターフェースが表示されます。ユーザーがiPhoneでドイツ語を設定すると、アプリケーションは英語のインターフェースを表示します(英語がデフォルトであるため)。
では、現在表示されている現在のアプリケーションロケールを取得するにはどうすればよいですか?前もって感謝します。
選択された回答は現在のデバイス言語を返しますが、-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);
これよりも簡単な方法があるかもしれませんが(他の回答を参照)、これは最も堅牢であり、strings
- fileを使用してアプリをローカライズする一般的な原則が適用されない限り、廃止され、このメソッドは機能します。
一般に、アプリケーションのロケールを取得する必要はありません(ただし、読み続けても可能です!)ローカライズされたテキストが必要な場合は、NSLocalizedString()
を使用します。画像をローカライズする必要がある場合は、ローカライズされたリソースを使用します。ただし、「アプリケーションロケール」を呼び出すときに、「分析」(アプリが使用されている言語を知りたい)や、サーバーベースの通信を使用する場合のユーザーへの一貫した1言語インターフェース(たとえば、ユーザーがアプリ内で表示しているのと同じ言語でサーバーエラーメッセージをローカライズするため)
現在表示されているアプリのローカライズを取得したい場合は、サポートされているロケールごとに_Localizable.strings
_ファイルがあると思います。したがって、Englisch文字列ファイルで次の行を追加できます
_"lang" = "en";
_
フランス語の文字列ファイルに次の行を追加します
_"lang" = "fr";
_
その後、NSLocalizedString("lang")
(Swift)またはNSLocalizedString(@"lang")
(objective-C)を呼び出すことで、常にアプリケーションロケールを取得できます。そしてもちろん、新しいローカリゼーションをアプリに追加するときはいつでも、新しいローカリゼーション文字列ファイルに「lang」エントリを設定する必要があります。
Swift 3使用:
let language = Bundle.main.preferredLocalizations.first
このようにして、ロケールから国コードを取得できます。
NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode];
国コードを取得します。 es
(スペイン)、fr
(フランス)など.
このコードをインターフェース選択にマップできます。
これがお役に立てば幸いです。
次のコードを使用して選択した言語を取得できます。
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([language isEqualToString:@"fr"]){//French
[do your stuff]
}
else{//English
[do your stuff]
}
これがお役に立てば幸いです。
解決策は提案されたものよりもはるかに簡単です:
デバイスの言語
let deviceLanguage = NSLocale.preferredLanguages.first
実際のアプリの翻訳
let language = Bundle.main.preferredLocalizations.first
たとえば、iPhoneを英語-インド語に設定した場合、私のアプリには英語-インド語の翻訳がありませんが、英語-英国しかありません。
Printing description of language:
"en-GB"
Printing description of deviceLanguage:
"en-IN"