2011-06-29 16 views
5

Aby przedstawić prawidłowy tekst menu i niektóre inne aspekty interfejsu użytkownika, próbuję uzyskać język kraju i klawiatury bieżącego użytkownika.
Znam ustawienia regionalne (przez zmienną env.), Ale nie mogę znaleźć sposobu na uzyskanie tych dwóch informacji.Uzyskiwanie języka i języka użytkownika użytkownika

Kod jest w języku C dla systemu Mac OS X. Mogę użyć interfejsu API Cocoa, aby je pobrać, ale musi on być wywołany z C. Jakieś pomysły?

Dziękujemy!

+3

Automatyczny dobór języka do ssania! Nienawidzę tego, gdy google powraca do portugalskiego: moja przeglądarka jest skonfigurowana tak, aby akceptować angielski z bardzo wysokim priorytetem, ale Google nalega na zmianę moich preferencji na to, co znajdzie, dopasowując mój adres IP do kraju !!! Głupie Google! Przepraszam za rant ... Proponuję użytkownikom zdefiniować ich interfejs w pliku konfiguracyjnym. – pmg

+0

Dzięki, ale nie mogę – Jessica

+5

To nie jest "automatyczny wybór języka" - to jest zapytanie do systemu o to, co faktycznie wybrał użytkownik . –

Odpowiedz

7

Użyj CFLocaleCopyCurrent, CFLocaleGetValue i CFLocaleCopyPreferredLanguages (należy pamiętać, że preferowany język może nie być zgodny z językiem ustawień regionalnych). Zobacz the documentation.

Edycja: ok, oto przykładowy kod.

#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

Dziękuję, ale już mam lokalizację. To, czego szukam, to kraj (jak w Stanach Zjednoczonych, Francji itp.) I język (jak w angielskim, francuskim itp.). Te wspomniane API wydają się zwracać identyfikatory regionalne lub tablicę z nimi: – Jessica

+1

CFLocaleGetValue (locale, kCFLocaleCountryCode) daje "US", "FR", itp .; elementy tablicy zwrócone przez CFLocaleCopyPreferredLanguages ​​są łańcuchami takimi jak "en", "fr". Użyj opcji CFLocaleCopyDisplayNameForPropertyValue, jeśli chcesz mieć długą nazwę, np. "France" lub "French". – LaC

+0

Nie mogę sprawić, żeby działało na C. Czy masz szansę opublikować opis? Dzięki. – Jessica