Как получить локаль на iPhone в C ++? - PullRequest
1 голос
/ 27 января 2011

Все, что я вижу о локализации iPhone, неудивительно, что в Objective-C.Проект, над которым я работаю, уже написан и работает на iPhone с использованием почти полностью C ++, и у нас уже есть несколько полных переводов.Все, что нам нужно сейчас, это способ узнать код языка / локали.На компьютере это делается с помощью getenv, с проверкой «LANG» или если не установлено «LC_ALL».Похоже, что это не работает на iPhone (ни на что не установлено), поэтому мне нужен какой-то другой метод.

Насколько я могу судить, лучший способ сделать это с Objective-C:

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

Но тогда мне придется конвертировать из NSString* в char* / std::string (что может быть сделано, но обычно это раздражает / запутывает).Поэтому мне интересно, есть ли более простой способ получить локаль непосредственно из C ++?

Вот что я в итоге сделал:

#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
        #include <CoreFoundation/CoreFoundation.h>
#endif
/* ... */
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
        CFArrayRef localeIDs = CFLocaleCopyPreferredLanguages();
        if (localeIDs)
        {
            CFStringRef localeID = (CFStringRef)CFArrayGetValueAtIndex(localeIDs, 0);
            char tmp[16];
            if (CFStringGetCString(localeID, tmp, 16, kCFStringEncodingUTF8))
                locale = std::string(tmp); //this is the std::string
            CFRelease(localeIDs);
        }
#endif

1 Ответ

1 голос
/ 27 января 2011

Возможно, вы хотите использовать CFLocaleGetValue ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...