iOSアプリをローカライズしていますが、シミュレーターでは、選択した言語で毎回正しく実行されます。
私のiPhone5でテストすると、アプリが最初に実行されたときにのみ言語が正しく検出されます。デバイスでアプリを再コンパイルして実行するたびに、スペイン語( "es")を選択してテストしているにもかかわらず、言語として"en"が検出されます。
私は以下を使用して言語を検出します:
[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]
私も使用しました:
[[NSLocale preferredLanguages] objectAtIndex:0]
同じ結果。
最初の実行後にアプリを強制終了し、デバイスで再起動すると、言語が正しく検出され続けます。
しかし、アプリを強制終了し、最初の実行後にXcodeを介して再コンパイル/再起動すると、代わりに「en」(英語)が検出されてロードされます。
その後、アプリを完全に削除して、Xcodeを介してアプリを再コンパイル/再インストール/実行しない限り、アプリを強制終了して再起動すると、英語として継続的に検出されます。その後、このサイクルが繰り返されます...最初にデバイスからアプリを削除せずに、その後の再構築/再起動を行うと、誤検出が発生します。
デバイス上の他のすべてのアプリは、常にスペイン語で表示されます。UI全体がスペイン語で表示されます。
更新: iOS 6を実行しているiPad(第3世代)でテストしましたが、同じ動作が発生しています。
更新2:
didFinishLaunchingWithOptionsには、言語を検出するための次のコードがあります:(言語はNSString *です):
language = [[NSLocale preferredLanguages] objectAtIndex:0];
このデバッグステートメントの後に、取得している値と、デバッグのためだけにそれを検出するわずかに異なる方法を比較します。
NSLog(@"Detected language: %@ / %@", language, [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]);
アプリがスペイン語モードで正常に動作する場合、出力は「検出された言語:es / es」と表示され、動作しない場合は「検出された言語:en/en」と表示されます。なぜそれが時々英語としてロードすることを決定するのかまだわかりません...
更新4:皆さんの回答に感謝し、さまざまな提案を試しました。残念ながら、どの提案も問題を解決していないようだったため、 +100の報奨金を授与することができませんでした。誰かが私に役立つ解決策を最終的に見つけた場合、その時点でさらに+50の報奨金を授与します。
更新5: Xcode 4.5から4.5.2に更新しましたが、これと同じ問題が発生しています。
更新6:新しいテストプロジェクトを最初から作成しましたが、完全に正常に機能します。明らかに、私のプロジェクトのレイアウト方法、またはおそらくデータファイルの1つに何か問題があるはずです。次の旅は、プロジェクトを最初から作り直して、ファイルデータを1つずつコピーすることだと思います...
更新7(数か月後):残念ながら、プロジェクトを丹念に再作成することで一時的に(一見)問題を解決した後、この問題に再び直面しています。最初のロードでは言語は正しくレンダリングされますが、その後のロードでは英語に戻ります。
解決済み以下の私の最終的な解決策を参照してください。みんな助けてくれてありがとう。とにかく無駄になるので、私は賞金の一部を使い果たすかもしれません。