std::string* Locale::GetSystemLocale () { #if defined(HX_WINDOWS) char locale[8]; int length = GetLocaleInfo (GetSystemDefaultUILanguage (), LOCALE_SISO639LANGNAME, locale, sizeof (locale)); std::string* result = new std::string (locale); return result; #elif defined(HX_LINUX) const char* locale = getenv ("LANG"); if (!locale) { locale = setlocale (LC_ALL, ""); } if (locale) { std::string* result = new std::string (locale); return result; } return 0; #else return 0; #endif }
// ************************************************************************** // Function Name: Install_Exit // // Purpose: processes the push message. // // Arguments: // IN HWND hwndParent handle to the parent window // IN LPCTSTR pszInstallDir name of the user-selected install directory of the application // // Return Values: // codeINSTALL_EXIT // returns install status // // Description: // Register query client with the PushRouter as part of installation. // Only the first two parameters really count. // ************************************************************************** SETUP_API codeINSTALL_EXIT Install_Exit( HWND hwndParent, LPCTSTR pszInstallDir, // final install directory WORD cFailedDirs, WORD cFailedFiles, WORD cFailedRegKeys, WORD cFailedRegVals, WORD cFailedShortcuts ) { //WCHAR szStartupFile[] = L"\\Windows\\Startup\\FingerMenu.lnk"; //if (MessageBox(hwndParent, L"Autostart FingerMenu on boot?", L"Autostart", MB_ICONINFORMATION | MB_YESNO) == IDNO) //{ // DeleteFile(szStartupFile); //} g_hwndParent = hwndParent; DWORD nSystemDPI = CheckRealDPI(hwndParent); // delete useless pngs WCHAR szProgramFiles[MAX_PATH]; SHGetSpecialFolderPath(hwndParent, szProgramFiles, CSIDL_PROGRAM_FILES, FALSE); DeletePngs(nSystemDPI, szProgramFiles, L"FingerMenu"); DeletePngs(nSystemDPI, szProgramFiles, L"FingerMsgbox"); // delete useless languages LANGID lLang = GetSystemDefaultUILanguage(); DeleteMUIs(lLang, szProgramFiles, L"FingerMenu"); DeleteMUIs(lLang, szProgramFiles, L"FingerMsgbox"); // TODO set locales return codeINSTALL_EXIT_DONE; }
language_c::language_c(char * setupLang, SystemDefault_c * SystemDefault) : collection_c() { current = -1; langDir = new char[MAX_PATH]; strcpy(langDir,SystemDefault->PrgPath); strcat(langDir,"lang\\"); char * SerPath = new char[MAX_PATH]; strcpy(SerPath,langDir); strcat(SerPath,"*.xml"); WIN32_FIND_DATA FindFileData; HANDLE hFind; hFind = FindFirstFile(SerPath, &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { LoadLanguageFile(FindFileData.cFileName); while (FindNextFile(hFind,&FindFileData )) { LoadLanguageFile(FindFileData.cFileName); } FindClose(hFind); } delete[] SerPath; ////////////////////////////// // Detect Systemdefault ////////////////////////////// // setup = aSetup; int ConfigLang = hexToInt(setupLang); current = getLangID(ConfigLang); if (current == -1) { int UserLang = GetUserDefaultUILanguage(); if (current == -1) {current = getLangID(UserLang);} if (current == -1) {current = getLangIDMain(PRIMARYLANGID(UserLang));} int SysLang = GetSystemDefaultUILanguage(); if (current == -1) {current = getLangID(SysLang);} if (current == -1) {current = getLangIDMain(PRIMARYLANGID(SysLang));} } }
static WORD pdhservice_get_system_primary_lang_id(void) { LANGID lang_id = GetSystemDefaultUILanguage(); WORD prim_lang_id = PRIMARYLANGID(lang_id); return prim_lang_id; }
char *iupwinGetSystemLanguage(void) { LANGID id = GetSystemDefaultUILanguage(); char *lang = NULL; switch(id) { case 0x0000: lang = "Language Neutral"; break; case 0x007f: lang = "Locale Invariant"; break; case 0x0400: lang = "User Default Language"; break; case 0x0800: lang = "System Default Language"; break; case 0x0436: lang = "Afrikaans"; break; case 0x041c: lang = "Albanian"; break; case 0x0401: lang = "Arabic (Saudi Arabia)"; break; case 0x0801: lang = "Arabic (Iraq)"; break; case 0x0c01: lang = "Arabic (Egypt)"; break; case 0x1001: lang = "Arabic (Libya)"; break; case 0x1401: lang = "Arabic (Algeria)"; break; case 0x1801: lang = "Arabic (Morocco)"; break; case 0x1c01: lang = "Arabic (Tunisia)"; break; case 0x2001: lang = "Arabic (Oman)"; break; case 0x2401: lang = "Arabic (Yemen)"; break; case 0x2801: lang = "Arabic (Syria)"; break; case 0x2c01: lang = "Arabic (Jordan)"; break; case 0x3001: lang = "Arabic (Lebanon)"; break; case 0x3401: lang = "Arabic (Kuwait)"; break; case 0x3801: lang = "Arabic (U.A.E.)"; break; case 0x3c01: lang = "Arabic (Bahrain)"; break; case 0x4001: lang = "Arabic (Qatar)"; break; case 0x042b: lang = "Armenian"; break; case 0x042c: lang = "Azeri (Latin)"; break; case 0x082c: lang = "Azeri (Cyrillic)"; break; case 0x042d: lang = "Basque"; break; case 0x0423: lang = "Belarusian"; break; case 0x0402: lang = "Bulgarian"; break; case 0x0455: lang = "Burmese"; break; case 0x0403: lang = "Catalan"; break; case 0x0404: lang = "Chinese (Taiwan)"; break; case 0x0804: lang = "Chinese"; break; case 0x0c04: lang = "Chinese (Hong Kong)"; break; case 0x1004: lang = "Chinese (Singapore)"; break; case 0x1404: lang = "Chinese (Macau)"; break; case 0x041a: lang = "Croatian"; break; case 0x0405: lang = "Czech"; break; case 0x0406: lang = "Danish"; break; case 0x0465: lang = "Divehi"; break; case 0x0413: lang = "Dutch (Netherlands)"; break; case 0x0813: lang = "Dutch (Belgium)"; break; case 0x0409: lang = "English (United States)"; break; case 0x0809: lang = "English (United Kingdom)"; break; case 0x0c09: lang = "English (Australian)"; break; case 0x1009: lang = "English (Canadian)"; break; case 0x1409: lang = "English (New Zealand)"; break; case 0x1809: lang = "English (Ireland)"; break; case 0x1c09: lang = "English (South Africa)"; break; case 0x2009: lang = "English (Jamaica)"; break; case 0x2409: lang = "English (Caribbean)"; break; case 0x2809: lang = "English (Belize)"; break; case 0x2c09: lang = "English (Trinidad)"; break; case 0x3009: lang = "English (Zimbabwe)"; break; case 0x3409: lang = "English (Philippines)"; break; case 0x0425: lang = "Estonian"; break; case 0x0438: lang = "Faeroese"; break; case 0x0429: lang = "Farsi"; break; case 0x040b: lang = "Finnish"; break; case 0x040c: lang = "French (Standard)"; break; case 0x080c: lang = "French (Belgian)"; break; case 0x0c0c: lang = "French (Canadian)"; break; case 0x100c: lang = "French (Switzerland)"; break; case 0x140c: lang = "French (Luxembourg)"; break; case 0x180c: lang = "French (Monaco)"; break; case 0x0456: lang = "Galician"; break; case 0x0437: lang = "Georgian"; break; case 0x0407: lang = "German (Standard)"; break; case 0x0807: lang = "German (Switzerland)"; break; case 0x0c07: lang = "German (Austria)"; break; case 0x1007: lang = "German (Luxembourg)"; break; case 0x1407: lang = "German (Liechtenstein)"; break; case 0x0408: lang = "Greek"; break; case 0x0447: lang = "Gujarati"; break; case 0x040d: lang = "Hebrew"; break; case 0x0439: lang = "Hindi"; break; case 0x040e: lang = "Hungarian"; break; case 0x040f: lang = "Icelandic"; break; case 0x0421: lang = "Indonesian"; break; case 0x0410: lang = "Italian (Standard)"; break; case 0x0810: lang = "Italian (Switzerland)"; break; case 0x0411: lang = "Japanese"; break; case 0x044b: lang = "Kannada"; break; case 0x0457: lang = "Konkani"; break; case 0x0412: lang = "Korean"; break; case 0x0812: lang = "Korean (Johab)"; break; case 0x0440: lang = "Kyrgyz"; break; case 0x0426: lang = "Latvian"; break; case 0x0427: lang = "Lithuanian"; break; case 0x0827: lang = "Lithuanian (Classic)"; break; case 0x042f: lang = "Macedonian"; break; case 0x043e: lang = "Malay (Malaysian)"; break; case 0x083e: lang = "Malay (Brunei Darussalam)"; break; case 0x044e: lang = "Marathi"; break; case 0x0450: lang = "Mongolian"; break; case 0x0414: lang = "Norwegian (Bokmal)"; break; case 0x0814: lang = "Norwegian (Nynorsk)"; break; case 0x0415: lang = "Polish"; break; case 0x0416: lang = "Portuguese (Brazil)"; break; case 0x0816: lang = "Portuguese (Portugal)"; break; case 0x0446: lang = "Punjabi"; break; case 0x0418: lang = "Romanian"; break; case 0x0419: lang = "Russian"; break; case 0x044f: lang = "Sanskrit"; break; case 0x0c1a: lang = "Serbian (Cyrillic)"; break; case 0x081a: lang = "Serbian (Latin)"; break; case 0x041b: lang = "Slovak"; break; case 0x0424: lang = "Slovenian"; break; case 0x040a: lang = "Spanish (Spain, Traditional Sort)"; break; case 0x080a: lang = "Spanish (Mexican)"; break; case 0x0c0a: lang = "Spanish (Spain, International Sort)"; break; case 0x100a: lang = "Spanish (Guatemala)"; break; case 0x140a: lang = "Spanish (Costa Rica)"; break; case 0x180a: lang = "Spanish (Panama)"; break; case 0x1c0a: lang = "Spanish (Dominican Republic)"; break; case 0x200a: lang = "Spanish (Venezuela)"; break; case 0x240a: lang = "Spanish (Colombia)"; break; case 0x280a: lang = "Spanish (Peru)"; break; case 0x2c0a: lang = "Spanish (Argentina)"; break; case 0x300a: lang = "Spanish (Ecuador)"; break; case 0x340a: lang = "Spanish (Chile)"; break; case 0x380a: lang = "Spanish (Uruguay)"; break; case 0x3c0a: lang = "Spanish (Paraguay)"; break; case 0x400a: lang = "Spanish (Bolivia)"; break; case 0x440a: lang = "Spanish (El Salvador)"; break; case 0x480a: lang = "Spanish (Honduras)"; break; case 0x4c0a: lang = "Spanish (Nicaragua)"; break; case 0x500a: lang = "Spanish (Puerto Rico)"; break; case 0x0430: lang = "Sutu"; break; case 0x0441: lang = "Swahili (Kenya)"; break; case 0x041d: lang = "Swedish"; break; case 0x081d: lang = "Swedish (Finland)"; break; case 0x045a: lang = "Syriac"; break; case 0x0449: lang = "Tamil"; break; case 0x0444: lang = "Tatar (Tatarstan)"; break; case 0x044a: lang = "Telugu"; break; case 0x041e: lang = "Thai"; break; case 0x041f: lang = "Turkish"; break; case 0x0422: lang = "Ukrainian"; break; case 0x0420: lang = "Urdu (Pakistan)"; break; case 0x0820: lang = "Urdu (India)"; break; case 0x0443: lang = "Uzbek (Latin)"; break; case 0x0843: lang = "Uzbek (Cyrillic)"; break; case 0x042a: lang = "Vietnamese"; break; } return lang; }
HINSTANCE AFXAPI AfxLoadLangResourceDLL(LPCTSTR pszFormat, LPCTSTR pszPath) { // load language specific DLL LANGID langid = 0; int nPrimaryLang = 0; int nSubLang = 0; LCID lcid = 0; LCID alcidSearch[nMaxExpectedPreferredLangs + 5]; int nLocales; nLocales = 0; // First, get the thread preferred UI languages (if supported) HMODULE hKernel = NULL; // AfxCtxLoadLibrary(_T("KERNEL32.DLL")); if (hKernel != NULL) { PFNGETPREFERREDUILANGS pfnGetThreadPreferredUILanguages = (PFNGETPREFERREDUILANGS)GetProcAddress(hKernel, "GetThreadPreferredUILanguages"); if (pfnGetThreadPreferredUILanguages != NULL) { BOOL bGotPreferredLangs = FALSE; ULONG nLanguages = 0; WCHAR wszLanguages[(5 * nMaxExpectedPreferredLangs) + 1] = {0}; // each lang has four chars plus NULL, plus terminating NULL ULONG cchLanguagesBuffer = _countof(wszLanguages); // bGotPreferredLangs = pfnGetThreadPreferredUILanguages(MUI_LANGUAGE_ID | MUI_UI_FALLBACK, &nLanguages, wszLanguages, &cchLanguagesBuffer); if (bGotPreferredLangs) { WCHAR *pwz = wszLanguages; while ((*pwz != 0) && (nLocales < nMaxExpectedPreferredLangs)) { ULONG ulLangID = wcstoul(pwz, NULL, 16); if ((ulLangID != 0) && (errno != ERANGE)) { alcidSearch[nLocales] = (LCID)ulLangID; nLocales++; } pwz += wcslen(pwz) + 1; // move to next ID in list } } } } // Next, try the user's UI language langid = GetUserDefaultUILanguage(); nPrimaryLang = PRIMARYLANGID(langid); nSubLang = SUBLANGID(langid); lcid = MAKELCID(MAKELANGID(nPrimaryLang, nSubLang), SORT_DEFAULT); alcidSearch[nLocales] = ::ConvertDefaultLocale(lcid); nLocales++; lcid = MAKELCID(MAKELANGID(nPrimaryLang, SUBLANG_NEUTRAL), SORT_DEFAULT); alcidSearch[nLocales] = ::ConvertDefaultLocale(lcid); nLocales++; // Then, try the system's default UI language langid = GetSystemDefaultUILanguage(); nPrimaryLang = PRIMARYLANGID(langid); nSubLang = SUBLANGID(langid); lcid = MAKELCID(MAKELANGID(nPrimaryLang, nSubLang), SORT_DEFAULT); alcidSearch[nLocales] = ::ConvertDefaultLocale(lcid); nLocales++; lcid = MAKELCID(MAKELANGID(nPrimaryLang, SUBLANG_NEUTRAL), SORT_DEFAULT); alcidSearch[nLocales] = ::ConvertDefaultLocale(lcid); nLocales++; alcidSearch[nLocales] = LOCALE_SYSTEM_DEFAULT; nLocales++; // get path for our module TCHAR rgchFullModulePath[MAX_PATH + 2]; rgchFullModulePath[_countof(rgchFullModulePath) - 1] = 0; rgchFullModulePath[_countof(rgchFullModulePath) - 2] = 0; DWORD dw = GetModuleFileName(reinterpret_cast<HMODULE>(&__ImageBase), rgchFullModulePath, _countof(rgchFullModulePath)-1); if (dw == 0) { return NULL; } for(int iLocale = 0; iLocale < nLocales; iLocale++) { HINSTANCE hLangDLL; hLangDLL = _AfxLoadLangDLL(pszFormat, pszPath, alcidSearch[iLocale]); if(hLangDLL != NULL) return hLangDLL; } return NULL; }
std::string CapabilitiesGetLanguage() { char locale[8]; int lang_len = GetLocaleInfo(GetSystemDefaultUILanguage(), LOCALE_SISO639LANGNAME, locale, sizeof(locale)); return std::string(locale, lang_len); }