私が取り組んでいるアプリケーションは、英語、フランス語、ドイツ語の 3 つの言語をサポートしています。
現在のアプリケーション言語 (デバイスの言語ではない) を取得するにはどうすればよいですか?
問題は、サーバーにリクエストを送信するためにアプリケーションの現在の言語を取得する必要があり、応答が正しい言語である必要があることです。ユーザーがOS言語をイタリア語に切り替えると、アプリは英語で実行され、英語をサーバーに送信する必要があるため、デバイス言語は役に立ちません。
ありがとう
私が取り組んでいるアプリケーションは、英語、フランス語、ドイツ語の 3 つの言語をサポートしています。
現在のアプリケーション言語 (デバイスの言語ではない) を取得するにはどうすればよいですか?
問題は、サーバーにリクエストを送信するためにアプリケーションの現在の言語を取得する必要があり、応答が正しい言語である必要があることです。ユーザーがOS言語をイタリア語に切り替えると、アプリは英語で実行され、英語をサーバーに送信する必要があるため、デバイス言語は役に立ちません。
ありがとう
受け入れられた答えは回避策です。
デバイス自体の言語設定に関しては、
[NSLocale preferredLanguages]
これにより、システムの一般設定で定義された優先言語の順序付き配列が得られます。
Cocoa Touch フレームワークは、アプリのローカリゼーション リソースをロードするときに、この優先言語のリストを考慮し、バンドルで提供された翻訳に従ってフィルタリングします。
このローカライズされた言語のフィルター処理および順序付けされたリストは、次のコマンドで取得できます。
[[NSBundle mainBundle] preferredLocalizations]
サーバー リクエストは、この配列の最初の値と一致する必要があります。そうしないと、アプリとサーバー データの間で言語の不一致が発生します。
私がいつもしていること:
文字列エントリを Localizable.strings ファイルに追加します。私は常にキー"lang"="de";
(または"lang"="en"
など)を使用します。
次に、言語を追加することで、NSURLRequest で使用できます。NSLocalizedString(@"lang", @"")
この方法を使用すると、バックエンドに送信される内容を完全に制御できます。
NSBundle クラスの preferredLocalizations メソッドを使用できます。
NSString *currentLocalization = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
ユーザーがデバイスの言語を変更するとアプリの言語が変更され、アプリ内NSUserDefaults
の言語を変更するオプションがない限り、(必要に応じて方法を示します)から取得できます。現在使用されている言語を簡単に保存できます。言語を使用して、いつでもサーバーに送信できます。