deflocale.c revision 3261
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*
*
* A simple tool to output all the installed locales on a Windows machine, and
* corresponding Java default locale/file.encoding using PrintDefaultLocale
*
* WARNING: This tool directly modifies the locale info in the Windows registry.
* It may not work with the Windows versions after Windows XP SP2. Also,
* if the test did not complete or was manually killed, you will need to reset
* the user default locale in the Control Panel manually. This executable has
* to be run with the "Administrator" privilege.
*
* Usage: "deflocale.exe <java launcher> PrintDefaultLocale
*
* How to compile: "cl -DUNICODE -D_UNICODE deflocale.c user32.lib advapi32.lib"
*/
#include <windows.h>
#include <stdio.h>
#include <memory.h>
int numLCIDs = 0;
// for Windows 7
int numLocaleNames = 0;
int numUILangNames = 0;
void launchAndWait() {
}
}
// ignore language only locale.
return;
}
wprintf(L"\n");
}
fflush(0);
if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\International", 0, KEY_READ | KEY_WRITE, &hk) == ERROR_SUCCESS) {
if (isWin7orUp) {
pKeyName = L"LocaleName";
} else {
pKeyName = L"Locale";
}
}
}
wprintf(L"\n");
fflush(0);
if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_READ | KEY_WRITE, &hk) == ERROR_SUCCESS) {
pKeyName = L"PreferredUILanguages";
}
}
numLCIDs ++;
return TRUE;
}
numLocaleNames ++;
return TRUE;
}
numUILangNames ++;
return TRUE;
}
return 1;
}
}
int i;
GetVersionEx(&osvi);
wprintf(L"# OSVersionInfo\n");
wprintf(L"\n");
fflush(0);
while (*launcher == L' ') {
launcher++;
}
if (!isWin7orUp) {
// Enumerate locales
// Sort LCIDs
} else {
// For Windows 7, use "LocaleName" registry key for the user locale
// as they seem to switch from "Locale".
*(FARPROC*)&pfnEnumUILanguages =
*(FARPROC*)&pfnLocaleNameToLCID =
*(FARPROC*)&pfnLCIDToLocaleName =
if (pfnEnumSystemLocalesEx != NULL &&
pfnEnumUILanguages != NULL &&
pfnLocaleNameToLCID != NULL &&
pfnLCIDToLocaleName != NULL) {
// Enumerate locales
1, // LOCALE_WINDOWS
// Enumerate UI Languages.
0x8, // MUI_LANGUAGE_NAME
} else {
wprintf(L"Could not get needed entry points. quitting.\n");
exit(-1);
}
// Sort LocaleNames
sizeof(wchar_t*), (void *)sortLocaleNames);
sizeof(wchar_t*), (void *)sortLocaleNames);
}
// Execute enumeration of Java default locales
if (isWin7orUp) {
for (i = 0; i < numLocaleNames; i ++) {
LocaleNamesArray[i]);
}
for (i = 0; i < numUILangNames; i ++) {
}
} else {
for (i = 0; i < numLCIDs; i ++) {
}
}
}