IOS / Mac OSX : ============= #include CFArrayRef localeIDs = CFLocaleCopyPreferredLanguages(); char tmp[16]; if (localeIDs) { CFStringRef localeID = (CFStringRef)CFArrayGetValueAtIndex(localeIDs, 0); if (CFStringGetCString(localeID, tmp, 16, kCFStringEncodingUTF8)) { str = tmp; // Get the locale in the variable "tmp". } CFRelease(localeIDs); } WinRT / Windows 8 / Window Phone ================================ using namespace Windows::Graphics::Display; # include char _buffer[128] = ""; char _buffer2[128] = ""; int ret = 0; # if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP ret = GetLocaleInfoEx(LOCALE_NAME_SYSTEM_DEFAULT, LOCALE_SNAME, (LPWSTR)_buffer, 32); # else ret = GetSystemDefaultLocaleName((LPWSTR)_buffer, 32); # endif if (ret > 0) { // Need to conver LPWSTR to LPSTR, that is wide char to char. str = _buffer2; memset(_buffer2, 0, sizeof(_buffer2)); if (ret > 32) { ret = 32; } for (int i = 0; i < ret; i++) { _buffer2[i] = _buffer[2 * i]; } } Android ======== // Java : public static String str_language = ""; ... in the constructor : try { String lang = new String(Locale.getDefault().getLanguage()); if (Locale.getDefault().getCountry().length() > 0) { lang = lang + "_" + Locale.getDefault().getCountry(); } str_language = lang; } catch (Exception e) { } try { System.out.println("libSDL: setting envvar LANGUAGE to '" + str_language + "'"); } catch (Exception e) { } ... // a function to access from Native Code public static String getLANG() { return str_language; } + Native code to get the language string (to be re-written) : JNI_FIND_CLASS(MainActivity_class, TOSTRING(SL_PACKAGE) "/MainActivity"); JNI_FIND_METHOD_STATIC(methodId, MainActivity_class, "getLANG", "()Ljava/lang/String;"); jstring jstr = (jstring) JavaEnv()->CallStaticObjectMethod(MainActivity_class, methodId); check_exception(); if (jstr == 0) { // Clean JavaEnv()->DeleteLocalRef(MainActivity_class); return -1; } // Get Native String const char *tmp_str = JavaEnv()->GetStringUTFChars(jstr, 0); if (tmp_str == NULL) { // Clean JavaEnv()->DeleteLocalRef(jstr); JavaEnv()->DeleteLocalRef(MainActivity_class); return -1; } // Length truncate int tmp_len = strlen(tmp_str); if (tmp_len > len) { tmp_len = len; } // Copy memset(buf, 0, len); memcpy(buf, tmp_str, tmp_len); // Clean JavaEnv()->ReleaseStringUTFChars(jstr, tmp_str); JavaEnv()->DeleteLocalRef(jstr); JavaEnv()->DeleteLocalRef(MainActivity_class); Else (linux, nacl): ======= str = getenv("LANG");