<i18n dev> Get UI language ID on Windows

naoto.sato at oracle.com naoto.sato at oracle.com
Wed Jan 29 18:15:40 UTC 2020


Hi Suenaga-san,

I think your fix looks reasonable. Although currently sort id is not 
being used, I'd replace 'SORT_DEFAULT' with 
'SORTIDFROMLCID(userDefaultLCID)', which is more of a correct usage.

Naoto

On 1/28/20 11:51 PM, Yasumasa Suenaga wrote:
> 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