1. ホーム
  2. iphone

[解決済み] NSLocale currentLocaleは常にユーザーの現在の言語ではなく "en_US "を返す

2023-05-21 08:47:55

質問

私は iPhone アプリを国際化しているところです。ユーザーの現在のロケールに基づいて、特定のビューにプログラム上の変更を加える必要があります。 iPhone シミュレーターまたは実際のハードウェアの言語設定に関係なく、私は気が狂いそうです。 locale は常に "en_US" と評価されるためです。

NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);

おかしなことに、アプリケーションの残りの部分は期待通りに動作しています。 正しい文字列が Localization.strings ファイルから選択され、インターフェイスで使用され、選択されたロケールのための正しい .xib ファイルが使用されるのです。

私はまた、次のことを試しましたが、無駄であり、同じ結果でした。

NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);

私が見逃している何か簡単なものがありますか? プリファレンスかインポートでしょうか?

私が以前していたこと。

Darrenの回答が示すように、私が探しているプリファレンスは NSLocale にあるのではなく、ここにあるのです。

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);

Peterの回答がより良い解決策のように思えます。

NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);

どのように解決するのですか?

文書化されていないキーを使ってデフォルトを直接問い合わせるのではなく は NSLocale に問い合わせます。 クラス 優先言語の配列のために .