1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-11-16 22:59:19 +00:00

Corrected locale detection on OSX.

(For me, it's de_en, which is kinda weird. But it seems to work.)
This commit is contained in:
fgenesis 2012-06-02 21:02:01 +01:00
parent 1f3e472551
commit 57c06eeba3

View file

@ -40,7 +40,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#endif #endif
#ifdef BBGE_BUILD_MACOSX #ifdef BBGE_BUILD_MACOSX
#include <CFLocale.h> #include <Carbon/Carbon.h>
#include <CoreFoundation/CFLocale.h>
#include <CoreFoundation/CFString.h>
// veeery clunky.
static std::string _CFToStdString(CFStringRef cs)
{
char buf[1024];
CFStringGetCString(cs, &buf[0], 2048, kCFStringEncodingUTF8);
return &buf[0];
}
#endif #endif
void UserSettings::save() void UserSettings::save()
@ -647,30 +658,24 @@ void UserSettings::getSystemLocale()
} }
#elif BBGE_BUILD_MACOSX #elif BBGE_BUILD_MACOSX
CFLocaleRef locale = CFLocaleCopyCurrent(); CFLocaleRef locale = CFLocaleCopyCurrent();
CFTypeRef type; CFArrayRef langs = CFLocaleCopyPreferredLanguages();
CFStringRef buf; CFStringRef buf;
type = CFLocaleGetValue(locale, kCFLocaleLanguageCode); if ((buf = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleLanguageCode)) != NULL)
if ((buf = CFLocaleCopyDisplayNameForPropertyValue(locale, kCFLocaleLanguageCode, type)) != NULL)
{ {
system.locale = buf; system.locale = _CFToStdString(buf);
CFRelease(buf); CFRelease(buf);
CFRelease(type);
type = CFLocaleGetValue(locale, kCFLocaleCountryCode); if ((buf = (CFStringRef)CFArrayGetValueAtIndex(langs, 0)) != NULL)
if ((buf = CFLocaleCopyDisplayNameForPropertyValue(locale, kCFLocaleCountryCode, type)) != NULL)
{ {
system.locale += "_"; system.locale += "_";
system.locale += buf; system.locale += _CFToStdString(buf);
CFRelease(buf); CFRelease(buf);
} }
CFRelease(type);
} }
CFRelease(locale); CFRelease(locale);
CFRelease(langs);
#else #else
const char *lang = (const char *)getenv("LANG"); const char *lang = (const char *)getenv("LANG");