Все, что я вижу о локализации 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