Use the LOCAL_SISO* constants to determine the language name on Windows to support systems older than Vista.
This commit is contained in:
parent
6260b472a6
commit
31eef89118
@ -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,36 +134,37 @@ 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
|
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__)
|
#elif defined(__linux__) || defined(__APPLE__)
|
||||||
char *tmplocale;
|
|
||||||
tmplocale = setlocale(LC_CTYPE, "");
|
const char* locale = setlocale(LC_CTYPE, "");
|
||||||
setlocale(LC_NUMERIC, "C"); // to set decimal point to "."
|
setlocale(LC_NUMERIC, "C"); // to set decimal point to "."
|
||||||
|
|
||||||
if(tmplocale) {
|
if (locale) {
|
||||||
langName = TranslateRFC2Language(tmplocale);
|
langName = TranslateRFC2Language (locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
return langName;
|
return langName;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user