From 750b4876ce2978921c3b9e0cad686050d073f73d Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Wed, 17 Aug 2011 11:09:06 -0700 Subject: [PATCH 1/2] 7073906: Locale.getDefault() returns wrong Locale for Java SE 7 Reviewed-by: okutsu --- jdk/src/windows/native/java/lang/java_props_md.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/jdk/src/windows/native/java/lang/java_props_md.c b/jdk/src/windows/native/java/lang/java_props_md.c index c66efbaf2fb..e27d1ea0b5b 100644 --- a/jdk/src/windows/native/java/lang/java_props_md.c +++ b/jdk/src/windows/native/java/lang/java_props_md.c @@ -563,6 +563,18 @@ GetJavaProperties(JNIEnv* env) { char * display_encoding; + // Windows UI Language selection list only cares "language" + // information of the UI Language. For example, the list + // just lists "English" but it actually means "en_US", and + // the user cannot select "en_GB" (if exists) in the list. + // So, this hack is to use the user LCID region information + // for the UI Language, if the "language" portion of those + // two locales are the same. + if (PRIMARYLANGID(LANGIDFROMLCID(userDefaultLCID)) == + PRIMARYLANGID(LANGIDFROMLCID(userDefaultUILang))) { + userDefaultUILang = userDefaultLCID; + } + SetupI18nProps(userDefaultUILang, &sprops.language, &sprops.script, From 9cc89c7e8c216a2d8babfdd42c3e5d932c589186 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Wed, 17 Aug 2011 11:09:20 -0700 Subject: [PATCH 2/2] 7079486: Locale.getDisplayScript() (no args) does not honor default DISPLAY locale Reviewed-by: okutsu --- jdk/src/share/classes/java/util/Locale.java | 2 +- jdk/test/java/util/Locale/LocaleCategory.java | 20 +++++++++++++++++++ jdk/test/java/util/Locale/LocaleCategory.sh | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/jdk/src/share/classes/java/util/Locale.java b/jdk/src/share/classes/java/util/Locale.java index 363d28585d5..895d2d37f69 100644 --- a/jdk/src/share/classes/java/util/Locale.java +++ b/jdk/src/share/classes/java/util/Locale.java @@ -1589,7 +1589,7 @@ public final class Locale implements Cloneable, Serializable { * @since 1.7 */ public String getDisplayScript() { - return getDisplayScript(getDefault()); + return getDisplayScript(getDefault(Category.DISPLAY)); } /** diff --git a/jdk/test/java/util/Locale/LocaleCategory.java b/jdk/test/java/util/Locale/LocaleCategory.java index 39f942e8b9b..95cf30967ea 100644 --- a/jdk/test/java/util/Locale/LocaleCategory.java +++ b/jdk/test/java/util/Locale/LocaleCategory.java @@ -56,6 +56,7 @@ public class LocaleCategory { Locale.getDefault().getVariant())).build(); checkDefault(); testGetSetDefault(); + testBug7079486(); } finally { // restore the reserved locale Locale.setDefault(reservedLocale); @@ -82,5 +83,24 @@ public class LocaleCategory { throw new RuntimeException("setDefault() should set all default locales for all categories"); } } + + static void testBug7079486() { + Locale zh_Hans_CN = Locale.forLanguageTag("zh-Hans-CN"); + + // make sure JRE has zh_Hans_CN localized string + if (zh_Hans_CN.getDisplayScript(Locale.US).equals(zh_Hans_CN.getDisplayScript(zh_Hans_CN))) { + return; + } + + Locale.setDefault(Locale.US); + String en_script = zh_Hans_CN.getDisplayScript(); + + Locale.setDefault(Locale.Category.DISPLAY, zh_Hans_CN); + String zh_script = zh_Hans_CN.getDisplayScript(); + + if (en_script.equals(zh_script)) { + throw new RuntimeException("Locale.getDisplayScript() (no args) does not honor default DISPLAY locale"); + } + } } diff --git a/jdk/test/java/util/Locale/LocaleCategory.sh b/jdk/test/java/util/Locale/LocaleCategory.sh index bbe32ff82c4..ecc6e948ded 100644 --- a/jdk/test/java/util/Locale/LocaleCategory.sh +++ b/jdk/test/java/util/Locale/LocaleCategory.sh @@ -1,7 +1,7 @@ #!/bin/sh # # @test -# @bug 4700857 6997928 +# @bug 4700857 6997928 7079486 # @summary tests for Locale.getDefault(Locale.Category) and # Locale.setDefault(Locale.Category, Locale) # @build LocaleCategory