2011-06-29 11 views
5

適切なメニューテキストとUIの他の側面を表示するために、現在のユーザーの国とキーボードの言語を取得しようとしています。
私はロケールを知っていますが(env変数を介して)、私はこれらの2つの情報を得る方法を見つけることができません。ユーザーの国とキーボードの言語の取得

このコードはMac OS XではC言語で書かれていますが、Cocoa APIを使用して取得することはできますが、Cから呼び出す必要があります。

ありがとうございました!

+3

言語の自動選択が吸う! Googleがポルトガル語に戻ったときに私はそれが嫌いです:私のブラウザは非常に高い優先順位で英語を受け入れるように設定されていますが、Googleは私のIPを国に合わせることによって私の好みを変えると主張しています!愚かなGoogle!あなたが設定ファイルでインターフェースを定義できるようにすることをお勧めします。 – pmg

+0

ありがとうございますが、私はできません – Jessica

+5

これは、ユーザーが実際に選択したものをシステムに照会しています。 –

答えて

7

使用CFLocaleCopyCurrentCFLocaleGetValueCFLocaleCopyPreferredLanguages(優先言語はロケールの言語と一致しない場合があることに注意)。 the documentationを参照してください。

編集:ok、ここにいくつかのサンプルコードがあります。

#include <CoreFoundation/CoreFoundation.h> 
#include <stdio.h> 

int main (int argc, char **argv) 
{ 
    CFLocaleRef loc = CFLocaleCopyCurrent(); 
    CFStringRef countryCode = CFLocaleGetValue (loc, kCFLocaleCountryCode); 
    CFStringRef countryName = CFLocaleCopyDisplayNameForPropertyValue (loc, kCFLocaleCountryCode, countryCode); 
    CFShow(countryCode); 
    CFShow(countryName); 
    CFArrayRef langs = CFLocaleCopyPreferredLanguages(); 
    CFStringRef langCode = CFArrayGetValueAtIndex (langs, 0); 
    CFStringRef langName = CFLocaleCopyDisplayNameForPropertyValue (loc, kCFLocaleLanguageCode, langCode); 
    CFShow(langCode); 
    CFShow(langName); 
} 
+0

ありがとうございますが、私はすでにロケールを持っています。私が探しているのは、国(米国、フランスなど)と言語(米国英語、フランス語など)です。これらのAPIはロケールIDまたは配列を返すようです。 – Jessica

+1

CFLocaleGetValue(locale、kCFLocaleCountryCode)は "US"、 "FR"などを返します。 CFLocaleCopyPreferredLanguagesによって返される配列の項目は、 "en"、 "fr"のような文字列です。 「フランス」や「フランス語」のような長い名前が必要な場合は、CFLocaleCopyDisplayNameForPropertyValueを使用します。 – LaC

+0

Cで動作させることはできません。万が一、スニペットを投稿できますか?ありがとう。 – Jessica

関連する問題