<i18n dev> Get UI language ID on Windows
Yasumasa Suenaga
suenaga at oss.nttdata.com
Wed Jan 29 07:51:10 UTC 2020
Hi all,
I checked how JDK detects default language on Windows, but I cannot understand the code
in below:
src/java.base/windows/native/libjava/java_props_md.c:
```
LCID userDefaultUILang = GetUserDefaultUILanguage();
```
According to MSDN [1], GetUserDefaultUILanguage() returns LANGID.
`userDefaultUILang` is used later as LCID. I think it is wrong.
I think we should be fix it as below.
If it is correct, I will file it to JBS and will send webrev.
```
diff --git a/src/java.base/windows/native/libjava/java_props_md.c b/src/java.base/windows/native/libjava/java_props_md.cindex 231f44ce2b..9068595dcf 100644
--- a/src/java.base/windows/native/libjava/java_props_md.c
+++ b/src/java.base/windows/native/libjava/java_props_md.c
@@ -641,7 +641,7 @@ GetJavaProperties(JNIEnv* env)
*/
LCID userDefaultLCID = GetUserDefaultLCID();
LCID systemDefaultLCID = GetSystemDefaultLCID();
- LCID userDefaultUILang = GetUserDefaultUILanguage();
+ LANGID userDefaultUILang = GetUserDefaultUILanguage();
{
char * display_encoding;
@@ -655,8 +655,8 @@ GetJavaProperties(JNIEnv* env)
// for the UI Language, if the "language" portion of those
// two locales are the same.
if (PRIMARYLANGID(LANGIDFROMLCID(userDefaultLCID)) ==
- PRIMARYLANGID(LANGIDFROMLCID(userDefaultUILang))) {
- userDefaultUILang = userDefaultLCID;
+ PRIMARYLANGID(userDefaultUILang)) {
+ userDefaultUILang = LANGIDFROMLCID(userDefaultLCID);
}
SetupI18nProps(userDefaultLCID,
@@ -665,7 +665,7 @@ GetJavaProperties(JNIEnv* env)
&sprops.format_country,
&sprops.format_variant,
&sprops.encoding);
- SetupI18nProps(userDefaultUILang,
+ SetupI18nProps(MAKELCID(userDefaultUILang, SORT_DEFAULT),
&sprops.display_language,
&sprops.display_script,
&sprops.display_country,
```
Do you have any comments / suggestions?
Thanks,
Yasumasa
[1] https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getuserdefaultuilanguage
More information about the i18n-dev
mailing list