Set the system default language and codepages.
CORE-10075

svn path=/trunk/; revision=69207
This commit is contained in:
Eric Kohl 2015-09-12 20:24:10 +00:00
parent a7e5f0c49e
commit 8a0491589a
2 changed files with 59 additions and 59 deletions

View file

@ -213,7 +213,7 @@ InitLanguagesList(HWND hwndDlg)
EnumSystemLocales(LocalesEnumProc, LCID_SUPPORTED);
/* Select current locale */
GetLocaleInfo(GetUserDefaultLCID(), LOCALE_SLANGUAGE, langSel, sizeof(langSel)/sizeof(TCHAR));
GetLocaleInfo(GetSystemDefaultLCID(), LOCALE_SLANGUAGE, langSel, sizeof(langSel)/sizeof(TCHAR));
SendMessage(hLangList, CB_SELECTSTRING, -1, (LPARAM)langSel);
}
@ -282,6 +282,63 @@ SetNonUnicodeLang(HWND hwnd, LCID lcid)
SetupCloseInfFile(hFontInf);
}
static
VOID
SaveSystemSettings(
LCID lcid)
{
TCHAR ACPPage[9];
TCHAR OEMPage[9];
HKEY langKey;
DWORD ret;
WCHAR value[5];
DWORD valuesize;
ret = GetLocaleInfo(MAKELCID(lcid, SORT_DEFAULT), LOCALE_IDEFAULTCODEPAGE, OEMPage, sizeof(OEMPage)/sizeof(TCHAR));
if (ret == 0)
{
PrintErrorMsgBox(IDS_ERROR_OEM_CODE_PAGE);
return;
}
ret = GetLocaleInfo(MAKELCID(lcid, SORT_DEFAULT), LOCALE_IDEFAULTANSICODEPAGE, ACPPage, sizeof(ACPPage)/sizeof(TCHAR));
if (ret == 0)
{
PrintErrorMsgBox(IDS_ERROR_ANSI_CODE_PAGE);
return;
}
/* Set codepages */
ret = RegOpenKey(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage"), &langKey);
if (ret != ERROR_SUCCESS)
{
PrintErrorMsgBox(IDS_ERROR_NLS_CODE_REG);
return;
}
RegSetValueEx(langKey, _T("OEMCP"), 0, REG_SZ, (BYTE *)OEMPage, (_tcslen(OEMPage) +1 ) * sizeof(TCHAR));
RegSetValueEx(langKey, _T("ACP"), 0, REG_SZ, (BYTE *)ACPPage, (_tcslen(ACPPage) +1 ) * sizeof(TCHAR));
RegCloseKey(langKey);
wsprintf(value, _T("%04hX"), LANGIDFROMLCID(lcid));
valuesize = (_tcslen(value) + 1) * sizeof(TCHAR);
/* Set language */
ret = RegOpenKey(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\NLS\\Language"), &langKey);
if (ret != ERROR_SUCCESS)
{
PrintErrorMsgBox(IDS_ERROR_NLS_KEY_REG);
return;
}
RegSetValueEx(langKey, _T("Default"), 0, REG_SZ, (BYTE *)value, valuesize);
RegCloseKey(langKey);
}
/* Property page dialog callback */
INT_PTR CALLBACK
AdvancedPageProc(HWND hwndDlg,
@ -332,6 +389,7 @@ AdvancedPageProc(HWND hwndDlg,
break;
SetNonUnicodeLang(hwndDlg, lcid);
SaveSystemSettings(lcid);
}
}
break;

View file

@ -353,22 +353,6 @@ SaveCurrentLocale(
DWORD valuesize;
DWORD i;
#if 0
ret = GetLocaleInfo(MAKELCID(lcid, SORT_DEFAULT), LOCALE_IDEFAULTCODEPAGE, OEMPage, sizeof(OEMPage)/sizeof(TCHAR));
if (ret == 0)
{
PrintErrorMsgBox(IDS_ERROR_OEM_CODE_PAGE);
return;
}
ret = GetLocaleInfo(MAKELCID(lcid, SORT_DEFAULT), LOCALE_IDEFAULTANSICODEPAGE, ACPPage, sizeof(ACPPage)/sizeof(TCHAR));
if (ret == 0)
{
PrintErrorMsgBox(IDS_ERROR_ANSI_CODE_PAGE);
return;
}
#endif
ret = RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\International",
0, KEY_READ | KEY_WRITE, &localeKey);
if (ret != ERROR_SUCCESS)
@ -405,47 +389,6 @@ SaveCurrentLocale(
/* Set the new locale for the current process */
NtSetDefaultLocale(TRUE, pGlobalData->lcid);
#if 0
ret = RegOpenKey(HKEY_USERS, _T(".DEFAULT\\Control Panel\\International"), &localeKey);
if (ret != ERROR_SUCCESS)
{
PrintErrorMsgBox(IDS_ERROR_DEF_INT_KEY_REG);
return;
}
wsprintf(value, _T("%08X"), (DWORD)lcid);
valuesize = (_tcslen(value) + 1) * sizeof(TCHAR);
RegSetValueEx(localeKey, _T("Locale"), 0, REG_SZ, (BYTE *)value, valuesize);
RegCloseKey(localeKey);
// Set language
ret = RegOpenKey(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\NLS\\Language"), &langKey);
if (ret != ERROR_SUCCESS)
{
PrintErrorMsgBox(IDS_ERROR_NLS_KEY_REG);
return;
}
RegSetValueEx(langKey, _T("Default"), 0, REG_SZ, (BYTE *)value, valuesize );
RegSetValueEx(langKey, _T("InstallLanguage"), 0, REG_SZ, (BYTE *)value, valuesize );
RegCloseKey(langKey);
/* Set language */
ret = RegOpenKey(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage"), &langKey);
if (ret != ERROR_SUCCESS)
{
PrintErrorMsgBox(IDS_ERROR_NLS_CODE_REG);
return;
}
RegSetValueExW(langKey, _T("OEMCP"), 0, REG_SZ, (BYTE *)OEMPage, (_tcslen(OEMPage) +1 ) * sizeof(TCHAR));
RegSetValueExW(langKey, _T("ACP"), 0, REG_SZ, (BYTE *)ACPPage, (_tcslen(ACPPage) +1 ) * sizeof(TCHAR));
RegCloseKey(langKey);
#endif
}
/* Location enumerate procedure */
@ -660,7 +603,6 @@ GeneralPageProc(HWND hwndDlg,
}
AddNewKbLayoutsByLcid(pGlobalData->lcid);
SetNonUnicodeLang(hwndDlg, pGlobalData->lcid);
}
}
break;