Use the LOCAL_SISO* constants to determine the language name on Windows to support systems older than Vista.

This commit is contained in:
Adam Reichold 2015-12-28 18:05:46 +01:00
parent 6260b472a6
commit 31eef89118

View File

@ -123,14 +123,7 @@ bool MultiLangMgr::save (Glib::ustring fname)
bool MultiLangMgr::isOSLanguageDetectSupported() bool MultiLangMgr::isOSLanguageDetectSupported()
{ {
#ifdef WIN32 #if defined(WIN32) || defined(__linux__) || defined(__APPLE__)
#ifdef __MINGW64_VERSION_MAJOR
// Only on Vista or above
return LOBYTE(LOWORD(GetVersion())) >= 6;
#else
return false;
#endif
#elif defined(__linux__) || defined(__APPLE__)
return true; return true;
#else #else
return false; return false;
@ -141,37 +134,38 @@ bool MultiLangMgr::isOSLanguageDetectSupported()
// returns Language name mapped from the currently selected OS language // returns Language name mapped from the currently selected OS language
Glib::ustring MultiLangMgr::getOSUserLanguage() Glib::ustring MultiLangMgr::getOSUserLanguage()
{ {
Glib::ustring langName = Glib::ustring("default"); Glib::ustring langName ("default");
if (isOSLanguageDetectSupported()) { #if defined(WIN32)
#ifdef WIN32 const LCID localeID = GetUserDefaultLCID ();
// When using old versions of MINGW this is not defined TCHAR localeName[18];
#ifdef __MINGW64_VERSION_MAJOR
WCHAR langRFCU[64] = {0};
if (GetUserDefaultLocaleName(langRFCU, 64) != 0 && lstrlenW(langRFCU) >= 2) { const int langLen = GetLocaleInfo (localeID, LOCALE_SISO639LANGNAME, localeName, 9);
// convert UNICODE16 to GTK if (langLen <= 0) {
char langRFC[64]; return langName;
WideCharToMultiByte(CP_UTF8, 0, langRFCU, -1, langRFC, 64, 0, 0);
Glib::ustring localRFC = Glib::ustring(langRFC);
langName = TranslateRFC2Language(localRFC);
}
#endif
#elif defined(__linux__) || defined(__APPLE__)
char *tmplocale;
tmplocale = setlocale(LC_CTYPE, "");
setlocale(LC_NUMERIC, "C"); // to set decimal point to "."
if(tmplocale) {
langName = TranslateRFC2Language(tmplocale);
}
#endif
} }
localeName[langLen - 1] = '-';
const int countryLen = GetLocaleInfo (localeID, LOCALE_SISO3166CTRYNAME, localeName + langLen, 9);
if (countryLen <= 0) {
return langName;
}
langName = TranslateRFC2Language (localeName);
#elif defined(__linux__) || defined(__APPLE__)
const char* locale = setlocale(LC_CTYPE, "");
setlocale(LC_NUMERIC, "C"); // to set decimal point to "."
if (locale) {
langName = TranslateRFC2Language (locale);
}
#endif
return langName; return langName;
} }