2

次のステートメントを使用して、(システム言語とは無関係に) アプリケーション言語を変更します。

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", nil] forKey:@"AppleLanguages"];

別の状況では、システム言語を取得したいと考えています。私が使うとき

[[NSLocale preferredLanguages] objectAtIndex:0]

結果は常に"de" です。アプリが再起動され、2 番目のステートメントが最初に実行された場合でも。これは、上記のコード行で構成したものであるため、私には完全に理にかなっています。ただし、システム全体で構成された実際のシステム言語を取得したいと思います。

理由: アプリケーションには、英語、ドイツ語、システム言語の 3 つの言語設定が必要です。システムの残りの部分がドイツ語で実行されている間、ユーザーはアプリを英語で実行できる必要があります。または、標準のシステム言語設定を使用することもできます。

ここで助けていただければ幸いです:)よろしく、ジョナサン


私はついに簡単で堅牢な解決策を見つけました。当初の問題は、

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", nil] forKey:@"AppleLanguages"];

以前に構成した値を返します。しかし、それは私が持ちたいものではありません。「グローバルに」構成された言語が必要です(アプリケーションとは無関係/メニューなどで使用されます)。これは、NSUserDefaults では達成できないようです。ただし、CFPreferences はトリックを行います。

CFPropertyListRef propertyList = CFPreferencesCopyValue(CFSTR("AppleLanguages"),
    kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
NSArray *appleLanguages = (__bridge_transfer NSArray*)propertyList;

appleLanguages には、ユーザー用に最初に定義された言語のリストが含まれるようになりました。そして、appleLanguages[0]はまさに私が欲しかったものです:)

4

1 に答える 1

0

deここで index:0 のオブジェクトとして言語を設定しています: [NSArrray arrayWithObjects: @"de", @"en", nil]。ここで優先言語を確認する場合、最初の言語 (インデックス 0 の言語) のみを確認しますが、他のインデックスにも言語があります (「en」をインデックス 1 に設定します) [[NSLocale preferredLanguages]objectAtIndex:0];。優先言語を配列に格納するとします。あなたはこれを行うことができます:

NSArray *arrayOfLanguages = [NSArray arrayWithArray:[NSUserDefaults arrayForKey:@"AppleLanguages"]];

お役に立てれば!

于 2012-06-20T12:38:52.130 に答える