2012-04-06 22 views
18

私が取り組んでいるアプリケーションは、英語、フランス語、ドイツ語の3言語をサポートしています。iOS:現在のアプリケーション言語を取得する方法

現在のアプリケーション言語(デバイス言語ではありません)をどのように取得できますか?

問題は、アプリケーションに現在の言語を取得してサーバーに要求を送信する必要があり、応答が正しい言語であることです。ユーザーがOS言語をイタリア語に切り替えると、アプリは英語で実行されており、英語をサーバーに送信する必要があるため、デバイス言語は無意味です。

はのLocalizable.stringsファイルに文字列エントリを追加します。私はいつも何

おかげ

+0

ユーザーはどのようにアプリの言語を選択しますか? –

+0

独自の設定で、サポートする言語のリストを追加します。 – Elsammak

答えて

34

。 私は常に"lang"="de";(または"lang"="en"など)というキーを使用します。

次に、あなたがバックエンドユーザーに送信されるように何が起こっているか絶対的な制御を持っている方法でNSLocalizedString(@"lang", @"")

の上に言語を追加して、NSURLRequestでそれを使用することができます。

+0

そう、単純な解決策:)ありがとう。 – gpopov

+1

[[NSBundle mainBundle] preferredLocalizations]が信頼できないため、私はこれを使用します。 – zeiteisen

0

ユーザーがデバイスの言語を変更するとアプリの言語が変更され、NSUserDefaultsからアプリの言語を変更することができます(アプリ内で言語を変更するオプションがない限り現在使用されている言語を簡単に保存し、必要なときにサーバーに送信します。

12

あなたはNSBundleクラスのpreferredLocalizationsメソッドを使用することがあります。

NSString *currentLocalization = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]; 
+4

これは本当に機能しますか?私は英語(en)とスウェーデン語(sv)をサポートするアプリケーションを持っており、ドイツ語を使用するようにシミュレータを設定すると、上記の値は "de"になります。 –

26

受け入れ答えが回避策です。

デバイス自体での言語設定については、システムの一般設定で定義されているあなたの優先言語の規則的な配列を与える

[NSLocale preferredLanguages] 

を持っています。

Cocoa Touchフレームワークは、アプリケーションのローカリゼーションリソースをロードする際にこの優先言語のリストを考慮に入れ、バンドルで提供する翻訳に従ってフィルタリングします。ローカライズされた言語の

これを濾過し、順序付きリストは、この配列の最初の値と一致する必要があります

[[NSBundle mainBundle] preferredLocalizations] 

サーバーに要求して取得することができます。また、アプリとサーバーのデータ間の言語の不一致があります。

+3

これは間違いなくそれを行う正しい方法のようです..受け入れられた答えになるはずです! – Accatyyc

+0

良い仕事@mgcm defninitely正しい道のり – Mikael

関連する問題