6

システムのデフォルト言語とシステム ロケールを取得したいと考えています。

システムの現在のロケールを次のように取得するために、次のコードスニペットを試しました

NSLocale *locale;
locale = [NSLocale systemLocale];

NSString * localLanguage = [locale objectForKey:NSLocaleIdentifier];
NSLog (@"Language : %@", localLanguage); 

NSLog(@"System locale Identifier %@",[locale localeIdentifier]);

しかし、システム ロケール識別子には何も表示されません。それが現在のロケールである場合、正しい結果が得られます。システム ロケールが値を与えない理由と、ユーザーが優先する言語ではなくシステムの既定の言語を取得する方法を教えてください。

4

2 に答える 2

10

以下を簡単に使用できます。 NSString* language = [[NSLocale preferredLanguages] objectAtIndex:0];

于 2012-11-26T11:32:28.387 に答える
5

デフォルトでは、現在の選択がないことをNSLocaleIdentifier意図的に示しています。@""Apple によると、systemLocaleはユーザーが選択したロケール ( ) で実装されていないキーの単なるフォールバックでcurrentLocaleあり、それは常に設定され、常にユーザーの制御下にあるため、理にかなっています。

ユーザーの優先言語のリストをたどりたい場合は、 を使用します+ preferredLanguages。これは、ユーザーが優先する言語のリストを、ユーザーが優先する順序で返します。これは OSX と iOS の両方で機能し、言語を選択するときにシステムに適切なフォールバックを提供するのに役立ちます。

-AppleLanguagesテストのために、カンマ区切りの括弧で囲まれた配列 (例: ) の値でコマンドライン スイッチを使用できます(DE,FR,EN)。Xcode は、それがユーザーの優先言語リストであることをシミュレートします。

ユーザーが (少なくとも OSX では) 優先言語を設定するため、オペレーティング システムは、ユーザー向けにローカライズされたデータを選択するときにリストに従います。一般に、マクロを使用する以上のことを行うことは、この事実のために不要であると見なされます。ただし、ローカライズする必要があるリソース以外の情報がある場合は、値を手動で確認できます。

于 2012-06-08T11:27:21.510 に答える