Author: ekohl
Date: Thu Sep 3 20:37:17 2015
New Revision: 68966
URL:
http://svn.reactos.org/svn/reactos?rev=68966&view=rev
Log:
[INTL]
- Update all values in "HKCU\Control Panel\International" when a new language is
selected.
- Update the language examples after a language change.
- Disable all settings that should not be affected by a language change.
Missing:
- Top-level windows do not get notification yet.
- Language settings customization should not work yet.
CORE-10074
Modified:
trunk/reactos/dll/cpl/intl/generalp.c
trunk/reactos/dll/cpl/intl/intl.h
Modified: trunk/reactos/dll/cpl/intl/generalp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/intl/generalp.c?re…
==============================================================================
--- trunk/reactos/dll/cpl/intl/generalp.c [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/intl/generalp.c [iso-8859-1] Thu Sep 3 20:37:17 2015
@@ -135,12 +135,40 @@
/* or should it be System and not user? */
GetLocaleInfo(GetUserDefaultLCID(), LOCALE_SLANGUAGE, langSel,
sizeof(langSel)/sizeof(TCHAR));
+ DPRINT("LCID: %08lx\n", GetUserDefaultLCID());
+ DPRINT("Language: %S\n", langSel);
+
SendMessage(hList,
CB_SELECTSTRING,
-1,
(LPARAM)langSel);
}
+
+static
+VOID
+SetLocaleString(HKEY hKey,
+ LCID lcId,
+ LCTYPE lcType,
+ PWSTR pszValueName)
+{
+ WCHAR szBuffer[256];
+
+ if (GetLocaleInfo(lcId,
+ lcType | LOCALE_NOUSEROVERRIDE,
+ szBuffer,
+ 256))
+ {
+ RegSetValueExW(hKey,
+ pszValueName,
+ 0,
+ REG_SZ,
+ (PBYTE)szBuffer,
+ (wcslen(szBuffer) + 1) * sizeof(WCHAR));
+ }
+}
+
+
/* Sets new locale */
VOID
SetNewLocale(LCID lcid)
@@ -151,13 +179,14 @@
// Set locale
HKEY localeKey;
- HKEY langKey;
+// HKEY langKey;
DWORD ret;
- TCHAR value[9];
+ WCHAR value[9];
DWORD valuesize;
- TCHAR ACPPage[9];
- TCHAR OEMPage[9];
-
+// TCHAR ACPPage[9];
+// TCHAR OEMPage[9];
+
+#if 0
ret = GetLocaleInfo(MAKELCID(lcid, SORT_DEFAULT), LOCALE_IDEFAULTCODEPAGE, OEMPage,
sizeof(OEMPage)/sizeof(TCHAR));
if (ret == 0)
{
@@ -171,20 +200,72 @@
PrintErrorMsgBox(IDS_ERROR_ANSI_CODE_PAGE);
return;
}
-
- ret = RegOpenKey(HKEY_CURRENT_USER, _T("Control Panel\\International"),
&localeKey);
+#endif
+
+ ret = RegOpenKeyExW(HKEY_CURRENT_USER, L"Control Panel\\International",
+ 0, KEY_READ | KEY_WRITE, &localeKey);
if (ret != ERROR_SUCCESS)
{
PrintErrorMsgBox(IDS_ERROR_INT_KEY_REG);
return;
}
- wsprintf(value, _T("%04X"), (DWORD)lcid);
- valuesize = (_tcslen(value) + 1) * sizeof(TCHAR);
-
- RegSetValueEx(localeKey, _T("Locale"), 0, REG_SZ, (LPBYTE)value,
valuesize);
+ wsprintf(value, L"%08x", (DWORD)lcid);
+ valuesize = (wcslen(value) + 1) * sizeof(WCHAR);
+
+ ret = RegSetValueExW(localeKey, L"Locale", 0, REG_SZ, (PBYTE)value,
valuesize);
+ if (ret != ERROR_SUCCESS)
+ {
+ RegCloseKey(localeKey);
+ PrintErrorMsgBox(IDS_ERROR_INT_KEY_REG);
+ return;
+ }
+
+ SetLocaleString(localeKey, lcid, LOCALE_ICALENDARTYPE, L"iCalendarType");
+ SetLocaleString(localeKey, lcid, LOCALE_ICOUNTRY, L"iCountry");
+ SetLocaleString(localeKey, lcid, LOCALE_ICURRDIGITS, L"iCurrDigits");
+ SetLocaleString(localeKey, lcid, LOCALE_ICURRENCY, L"iCurrency");
+ SetLocaleString(localeKey, lcid, LOCALE_IDATE, L"iDate");
+ SetLocaleString(localeKey, lcid, LOCALE_IDIGITS, L"iDigits");
+ SetLocaleString(localeKey, lcid, LOCALE_IFIRSTDAYOFWEEK,
L"iFirstDayOfWeek");
+ SetLocaleString(localeKey, lcid, LOCALE_IFIRSTWEEKOFYEAR,
L"iFirstWeekOfYear");
+ SetLocaleString(localeKey, lcid, LOCALE_ILZERO, L"iLZero");
+ SetLocaleString(localeKey, lcid, LOCALE_IMEASURE, L"iMeasure");
+ SetLocaleString(localeKey, lcid, LOCALE_INEGCURR, L"iNegCurr");
+ SetLocaleString(localeKey, lcid, LOCALE_INEGNUMBER, L"iNegNumber");
+ SetLocaleString(localeKey, lcid, LOCALE_ITIME, L"iTime");
+ SetLocaleString(localeKey, lcid, LOCALE_ITIMEMARKPOSN, L"iTimePrefix");
+ SetLocaleString(localeKey, lcid, LOCALE_ITLZERO, L"iTLZero");
+ SetLocaleString(localeKey, lcid, LOCALE_IDIGITSUBSTITUTION, L"NumShape");
+ SetLocaleString(localeKey, lcid, LOCALE_S1159, L"s1159");
+ SetLocaleString(localeKey, lcid, LOCALE_S2359, L"s2359");
+ SetLocaleString(localeKey, lcid, LOCALE_SCOUNTRY, L"sCountry");
+ SetLocaleString(localeKey, lcid, LOCALE_SCURRENCY, L"sCurrency");
+ SetLocaleString(localeKey, lcid, LOCALE_SDATE, L"sDate");
+ SetLocaleString(localeKey, lcid, LOCALE_SDECIMAL, L"sDecimal");
+ SetLocaleString(localeKey, lcid, LOCALE_SGROUPING, L"sGrouping");
+ SetLocaleString(localeKey, lcid, LOCALE_SABBREVLANGNAME, L"sLanguage");
+ SetLocaleString(localeKey, lcid, LOCALE_SLIST, L"sList");
+ SetLocaleString(localeKey, lcid, LOCALE_SLONGDATE, L"sLongDate");
+ SetLocaleString(localeKey, lcid, LOCALE_SMONDECIMALSEP,
L"sMonDecimalSep");
+ SetLocaleString(localeKey, lcid, LOCALE_SMONGROUPING, L"sMonGrouping");
+ SetLocaleString(localeKey, lcid, LOCALE_SMONTHOUSANDSEP,
L"sMonThousandSep");
+ SetLocaleString(localeKey, lcid, LOCALE_SNATIVEDIGITS, L"sNativeDigits");
+ SetLocaleString(localeKey, lcid, LOCALE_SNEGATIVESIGN, L"sNegativeSign");
+ SetLocaleString(localeKey, lcid, LOCALE_SPOSITIVESIGN, L"sPositiveSign");
+ SetLocaleString(localeKey, lcid, LOCALE_SSHORTDATE, L"sShortDate");
+ SetLocaleString(localeKey, lcid, LOCALE_STHOUSAND, L"sThousand");
+ SetLocaleString(localeKey, lcid, LOCALE_STIME, L"sTime");
+ SetLocaleString(localeKey, lcid, LOCALE_STIMEFORMAT, L"sTimeFormat");
+
+ /* Flush and close the locale key */
+ RegFlushKey(localeKey);
RegCloseKey(localeKey);
+ /* Set the new locale for the current process */
+ NtSetDefaultLocale(TRUE, lcid);
+
+#if 0
ret = RegOpenKey(HKEY_USERS, _T(".DEFAULT\\Control Panel\\International"),
&localeKey);
if (ret != ERROR_SUCCESS)
{
@@ -192,7 +273,7 @@
return;
}
- wsprintf(value, _T("%04X"), (DWORD)lcid);
+ wsprintf(value, _T("%08X"), (DWORD)lcid);
valuesize = (_tcslen(value) + 1) * sizeof(TCHAR);
RegSetValueEx(localeKey, _T("Locale"), 0, REG_SZ, (BYTE *)value,
valuesize);
@@ -224,6 +305,7 @@
RegSetValueExW(langKey, _T("ACP"), 0, REG_SZ, (BYTE *)ACPPage,
(_tcslen(ACPPage) +1 ) * sizeof(TCHAR));
RegCloseKey(langKey);
+#endif
}
/* Location enumerate procedure */
@@ -318,7 +400,7 @@
{
case WM_INITDIALOG:
CreateLanguagesList(GetDlgItem(hwndDlg, IDC_LANGUAGELIST));
- UpdateLocaleSample(hwndDlg, LOCALE_USER_DEFAULT);
+ UpdateLocaleSample(hwndDlg, GetUserDefaultLCID());
CreateLocationsList(GetDlgItem(hwndDlg, IDC_LOCATION_COMBO));
if (IsUnattendedSetupEnabled)
{
Modified: trunk/reactos/dll/cpl/intl/intl.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/intl/intl.h?rev=68…
==============================================================================
--- trunk/reactos/dll/cpl/intl/intl.h [iso-8859-1] (original)
+++ trunk/reactos/dll/cpl/intl/intl.h [iso-8859-1] Thu Sep 3 20:37:17 2015
@@ -13,6 +13,7 @@
#include <setupapi.h>
#include <tchar.h>
#include <malloc.h>
+#include <ndk/exfuncs.h>
#include "resource.h"