2

現在のアプリケーション言語を検出するにはどうすればよいですか? NSLocaleユーザーの好みについて話しているのではありません。

私のアプリでは、現在 2 つの言語がサポートされています。デフォルトの「en」と特定の「it」。

実際に使用されているものを知りたかっただけです。関連する場合、さらに説明すると、サポートされている 2 つの言語のみの Web サービスを通じてコン​​テンツを提供しています。サービスを呼び出すときは、言語パラメーターを渡す必要があります。現在、私はこれを行っていますが、うまくいきますが、私はそれを完全に嫌います:

NSString *preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];

if (![preferredLanguage isEqualToString:@"it"] && ![preferredLanguage isEqualToString:@"en"]) {
    return @"en";
}
return preferredLanguage;

NSLocale classとを調べましたUIApplicationが、役に立つものを見つけることができませんでした。

また、いくつかのローカライズ方法があることにも気付きましたNSBundleが、それらはどれが使用されているかについて特定されていないようです。

4

2 に答える 2

4

[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]アプリがサポートするローカリゼーションが常に返されるため、より良いでしょう。後で追加のチェックを行う必要はありません。

実際、コードにはバグがあります。ユーザー設定の最初の言語がアプリでサポートされている言語でない場合、iOSは、アプリでサポートされている言語が見つかるまでリストを下に移動します。したがって、ユーザーの設定がである場合"fr", "it", "en", ...、iOSはitリソースのバージョンをロードします。ただし、コードはにフォールバックしenます。

(これは、ユーザーが言語の順序を簡単に変更できるOS Xではおそらくより重要です。iOSではそれが可能であるように見えますが、どのように機能するかは明らかではありません。)

于 2012-12-20T07:52:21.830 に答える
2

私は通常、「HTTPAcceptLanguage」などのLocalizable.stringsに特別なキーを予約します。これは、「en」、「fr」などに設定します。これで、アプリケーションによって表示される言語をサーバーに伝えるのは、NSLocalizedString(@ "HTTPAcceptLanguage "、nil)。

于 2012-12-20T06:59:31.190 に答える