From 9baca700d04af084f52fe97355cc9e9bbfab6c90 Mon Sep 17 00:00:00 2001 From: andrew Date: Mon, 1 Jul 2019 20:26:04 +0100 Subject: [PATCH] 8219781: Localized names for Japanese era Reiwa in COMPAT provider Reviewed-by: naoto, aph, phh --- .../sun/text/resources/ar/FormatData_ar.java | 2 + .../ar/JavaTimeSupplementary_ar.java | 2 + .../hi/JavaTimeSupplementary_hi_IN.java | 2 + .../sun/text/resources/ko/FormatData_ko.java | 1 + .../ko/JavaTimeSupplementary_ko.java | 2 + .../ru/JavaTimeSupplementary_ru.java | 2 + .../sr/JavaTimeSupplementary_sr.java | 2 + .../sun/text/resources/th/FormatData_th.java | 2 + .../th/JavaTimeSupplementary_th.java | 2 + .../sun/text/resources/zh/FormatData_zh.java | 1 + .../zh/JavaTimeSupplementary_zh.java | 2 + .../zh/JavaTimeSupplementary_zh_TW.java | 2 + .../util/Calendar/JapanEraNameCompatTest.java | 144 ++++++++++++++++++ 13 files changed, 166 insertions(+) create mode 100644 test/java/util/Calendar/JapanEraNameCompatTest.java diff --git a/src/share/classes/sun/text/resources/ar/FormatData_ar.java b/src/share/classes/sun/text/resources/ar/FormatData_ar.java index acb5cb9c4..38ca52207 100644 --- a/src/share/classes/sun/text/resources/ar/FormatData_ar.java +++ b/src/share/classes/sun/text/resources/ar/FormatData_ar.java @@ -212,6 +212,7 @@ public class FormatData_ar extends ParallelListResourceBundle { "\u062a\u064a\u0634\u0648", "\u0634\u0648\u0648\u0627", "\u0647\u064a\u0633\u064a", + "\u0631\u064a\u0648\u0627", } }, { "japanese.short.Eras", @@ -221,6 +222,7 @@ public class FormatData_ar extends ParallelListResourceBundle { "\u062a\u064a\u0634\u0648", "\u0634\u0648\u0648\u0627", "\u0647\u064a\u0633\u064a", + "\u0631\u064a\u0648\u0627", } }, { "buddhist.Eras", diff --git a/src/share/classes/sun/text/resources/ar/JavaTimeSupplementary_ar.java b/src/share/classes/sun/text/resources/ar/JavaTimeSupplementary_ar.java index 9f261e6e1..c335acfe7 100644 --- a/src/share/classes/sun/text/resources/ar/JavaTimeSupplementary_ar.java +++ b/src/share/classes/sun/text/resources/ar/JavaTimeSupplementary_ar.java @@ -229,6 +229,7 @@ public class JavaTimeSupplementary_ar extends OpenListResourceBundle { "\u062a\u064a\u0634\u0648", "\u0634\u0648\u0648\u0627", "\u0647\u064a\u0633\u064a", + "\u0631\u064a\u0648\u0627", } }, { "java.time.japanese.short.Eras", @@ -238,6 +239,7 @@ public class JavaTimeSupplementary_ar extends OpenListResourceBundle { "\u062a\u064a\u0634\u0648", "\u0634\u0648\u0648\u0627", "\u0647\u064a\u0633\u064a", + "\u0631\u064a\u0648\u0627", } }, { "java.time.long.Eras", diff --git a/src/share/classes/sun/text/resources/hi/JavaTimeSupplementary_hi_IN.java b/src/share/classes/sun/text/resources/hi/JavaTimeSupplementary_hi_IN.java index e59acabd3..e2bf2aee6 100644 --- a/src/share/classes/sun/text/resources/hi/JavaTimeSupplementary_hi_IN.java +++ b/src/share/classes/sun/text/resources/hi/JavaTimeSupplementary_hi_IN.java @@ -145,6 +145,7 @@ public class JavaTimeSupplementary_hi_IN extends OpenListResourceBundle { "\u0924\u093e\u0908\u0936\u094b", "\u0936\u094b\u0935\u093e", "\u0939\u0947\u0908\u0938\u0947\u0908", + "\u0930\u0947\u0907\u0935\u093e", } }, { "java.time.japanese.short.Eras", @@ -154,6 +155,7 @@ public class JavaTimeSupplementary_hi_IN extends OpenListResourceBundle { "\u0924\u093e\u0908\u0936\u094b", "\u0936\u094b\u0935\u093e", "\u0939\u0947\u0908\u0938\u0947\u0908", + "\u0930\u0947\u0907\u0935\u093e", } }, { "java.time.short.Eras", diff --git a/src/share/classes/sun/text/resources/ko/FormatData_ko.java b/src/share/classes/sun/text/resources/ko/FormatData_ko.java index 4483ad2e9..9eb1b4260 100644 --- a/src/share/classes/sun/text/resources/ko/FormatData_ko.java +++ b/src/share/classes/sun/text/resources/ko/FormatData_ko.java @@ -192,6 +192,7 @@ public class FormatData_ko extends ParallelListResourceBundle { "\ub2e4\uc774\uc1fc", "\uc1fc\uc640", "\ud5e4\uc774\uc138\uc774", + "\ub808\uc774\uc640", } }, { "AmPmMarkers", diff --git a/src/share/classes/sun/text/resources/ko/JavaTimeSupplementary_ko.java b/src/share/classes/sun/text/resources/ko/JavaTimeSupplementary_ko.java index 7435b6d72..87a08683a 100644 --- a/src/share/classes/sun/text/resources/ko/JavaTimeSupplementary_ko.java +++ b/src/share/classes/sun/text/resources/ko/JavaTimeSupplementary_ko.java @@ -158,6 +158,7 @@ public class JavaTimeSupplementary_ko extends OpenListResourceBundle { "\ub2e4\uc774\uc1fc", "\uc1fc\uc640", "\ud5e4\uc774\uc138\uc774", + "\ub808\uc774\uc640", } }, { "java.time.japanese.short.Eras", @@ -167,6 +168,7 @@ public class JavaTimeSupplementary_ko extends OpenListResourceBundle { "\ub2e4\uc774\uc1fc", "\uc1fc\uc640", "\ud5e4\uc774\uc138\uc774", + "\ub808\uc774\uc640", } }, { "java.time.long.Eras", diff --git a/src/share/classes/sun/text/resources/ru/JavaTimeSupplementary_ru.java b/src/share/classes/sun/text/resources/ru/JavaTimeSupplementary_ru.java index 54b74f0f0..4c017787b 100644 --- a/src/share/classes/sun/text/resources/ru/JavaTimeSupplementary_ru.java +++ b/src/share/classes/sun/text/resources/ru/JavaTimeSupplementary_ru.java @@ -219,6 +219,7 @@ public class JavaTimeSupplementary_ru extends OpenListResourceBundle { "\u042d\u043f\u043e\u0445\u0430 \u0422\u0430\u0439\u0441\u044c\u043e", "\u0421\u044c\u043e\u0432\u0430", "\u042d\u043f\u043e\u0445\u0430 \u0425\u044d\u0439\u0441\u044d\u0439", + "\u0420\u044d\u0439\u0432\u0430", } }, { "java.time.japanese.short.Eras", @@ -228,6 +229,7 @@ public class JavaTimeSupplementary_ru extends OpenListResourceBundle { "\u042d\u043f\u043e\u0445\u0430 \u0422\u0430\u0439\u0441\u044c\u043e", "\u0421\u044c\u043e\u0432\u0430", "\u042d\u043f\u043e\u0445\u0430 \u0425\u044d\u0439\u0441\u044d\u0439", + "\u0420\u044d\u0439\u0432\u0430", } }, { "java.time.long.Eras", diff --git a/src/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr.java b/src/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr.java index c25a26bab..1b6fe9247 100644 --- a/src/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr.java +++ b/src/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr.java @@ -179,6 +179,7 @@ public class JavaTimeSupplementary_sr extends OpenListResourceBundle { "\u0422\u0430\u0438\u0448\u043e", "\u0428\u043e\u0432\u0430", "\u0425\u0430\u0438\u0441\u0435\u0438", + "\u0420\u0435\u0438\u0432\u0430", } }, { "java.time.japanese.short.Eras", @@ -188,6 +189,7 @@ public class JavaTimeSupplementary_sr extends OpenListResourceBundle { "\u0422\u0430\u0438\u0448\u043e", "\u0428\u043e\u0432\u0430", "\u0425\u0430\u0438\u0441\u0435\u0438", + "\u0420\u0435\u0438\u0432\u0430", } }, { "java.time.long.Eras", diff --git a/src/share/classes/sun/text/resources/th/FormatData_th.java b/src/share/classes/sun/text/resources/th/FormatData_th.java index 15c679a0d..5ef88b58c 100644 --- a/src/share/classes/sun/text/resources/th/FormatData_th.java +++ b/src/share/classes/sun/text/resources/th/FormatData_th.java @@ -245,6 +245,7 @@ public class FormatData_th extends ParallelListResourceBundle { "\u0e17\u0e30\u0e2d\u0e34\u0e42\u0e0a", "\u0e42\u0e0a\u0e27\u0e30", "\u0e40\u0e2e\u0e40\u0e0b", + "\u0e40\u0e23\u0e27\u0e30", } }, { "japanese.short.Eras", @@ -254,6 +255,7 @@ public class FormatData_th extends ParallelListResourceBundle { "\u0e17", "\u0e0a", "\u0e2e", + "R", } }, { "buddhist.TimePatterns", diff --git a/src/share/classes/sun/text/resources/th/JavaTimeSupplementary_th.java b/src/share/classes/sun/text/resources/th/JavaTimeSupplementary_th.java index b0f4bbcae..71b3b5ffa 100644 --- a/src/share/classes/sun/text/resources/th/JavaTimeSupplementary_th.java +++ b/src/share/classes/sun/text/resources/th/JavaTimeSupplementary_th.java @@ -199,6 +199,7 @@ public class JavaTimeSupplementary_th extends OpenListResourceBundle { "\u0e17\u0e30\u0e2d\u0e34\u0e42\u0e0a", "\u0e42\u0e0a\u0e27\u0e30", "\u0e40\u0e2e\u0e40\u0e0b", + "\u0e40\u0e23\u0e27\u0e30", } }, { "java.time.japanese.short.Eras", @@ -208,6 +209,7 @@ public class JavaTimeSupplementary_th extends OpenListResourceBundle { "\u0e17\u0e30\u0e2d\u0e34\u0e42\u0e0a", "\u0e42\u0e0a\u0e27\u0e30", "\u0e40\u0e2e\u0e40\u0e0b", + "\u0e40\u0e23\u0e27\u0e30", } }, { "java.time.long.Eras", diff --git a/src/share/classes/sun/text/resources/zh/FormatData_zh.java b/src/share/classes/sun/text/resources/zh/FormatData_zh.java index 1f8f7cb31..ef43c449e 100644 --- a/src/share/classes/sun/text/resources/zh/FormatData_zh.java +++ b/src/share/classes/sun/text/resources/zh/FormatData_zh.java @@ -282,6 +282,7 @@ public class FormatData_zh extends ParallelListResourceBundle { "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "TimePatterns", diff --git a/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh.java b/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh.java index e5f44fd71..00cb127a3 100644 --- a/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh.java +++ b/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh.java @@ -186,6 +186,7 @@ public class JavaTimeSupplementary_zh extends OpenListResourceBundle { "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.japanese.short.Eras", @@ -195,6 +196,7 @@ public class JavaTimeSupplementary_zh extends OpenListResourceBundle { "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.roc.DatePatterns", diff --git a/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh_TW.java b/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh_TW.java index 7359b8eea..6e61ca71d 100644 --- a/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh_TW.java +++ b/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh_TW.java @@ -175,6 +175,7 @@ public class JavaTimeSupplementary_zh_TW extends OpenListResourceBundle { "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.japanese.short.Eras", @@ -184,6 +185,7 @@ public class JavaTimeSupplementary_zh_TW extends OpenListResourceBundle { "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.roc.DatePatterns", diff --git a/test/java/util/Calendar/JapanEraNameCompatTest.java b/test/java/util/Calendar/JapanEraNameCompatTest.java new file mode 100644 index 000000000..8efed7d22 --- /dev/null +++ b/test/java/util/Calendar/JapanEraNameCompatTest.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * 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. + */ + +/* + * @test + * @bug 8218781 + * @summary Test the localized names of Japanese era Reiwa from COMPAT provider. + * @modules jdk.localedata + * @run testng/othervm -Djava.locale.providers=COMPAT JapanEraNameCompatTest + */ + +import static java.util.Calendar.*; +import static java.util.Locale.*; + +import java.time.LocalDate; +import java.time.chrono.JapaneseChronology; +import java.time.chrono.JapaneseEra; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.time.format.TextStyle; +import java.util.Calendar; +import java.util.Locale; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import static org.testng.Assert.assertEquals; + +@Test +public class JapanEraNameCompatTest { + static final Calendar c = new Calendar.Builder() + .setCalendarType("japanese") + .setFields(ERA, 5, YEAR, 1, MONTH, MAY, DAY_OF_MONTH, 1) + .build(); + static final String EngName = "Reiwa"; + static final String CJName = "\u4ee4\u548c"; + static final String KoreanName = "\ub808\uc774\uc640"; + static final String ArabicName = "\u0631\u064a\u0648\u0627"; + static final String ThaiName = "\u0e40\u0e23\u0e27\u0e30"; + static final String HindiName = "\u0930\u0947\u0907\u0935\u093e"; + static final String RussianName = "\u0420\u044d\u0439\u0432\u0430"; + static final String SerbianName = "\u0420\u0435\u0438\u0432\u0430"; + static final String SerbLatinName = "Reiva"; + + @DataProvider(name="UtilCalendar") + Object[][] dataUtilCalendar() { + return new Object[][] { + //locale, long, short + { JAPAN, CJName, "R" }, + { KOREAN, KoreanName, "R" }, + { CHINA, CJName, "R" }, + { TAIWAN, CJName, "R" }, // fallback to zh + { new Locale("ar"), ArabicName, ArabicName }, + { new Locale("th"), ThaiName, "R" }, + // hi_IN fallback to root + { new Locale("hi", "IN"), EngName, "R" } + }; + } + + @Test(dataProvider="UtilCalendar") + public void testCalendarEraDisplayName(Locale locale, + String longName, String shortName) { + assertEquals(c.getDisplayName(ERA, LONG, locale), longName); + assertEquals(c.getDisplayName(ERA, SHORT, locale), shortName); + } + + @DataProvider(name="JavaTime") + Object[][] dataJavaTime() { + return new Object[][] { + // locale, full, short + { JAPAN, CJName, CJName }, + { KOREAN, KoreanName, KoreanName }, + { CHINA, CJName, CJName }, + { TAIWAN, CJName, CJName }, + { new Locale("ar"), ArabicName, ArabicName }, + { new Locale("th"), ThaiName, ThaiName }, + { new Locale("hi", "IN"), HindiName, HindiName }, + { new Locale("ru"), RussianName, RussianName }, + { new Locale("sr"), SerbianName, SerbianName }, + { Locale.forLanguageTag("sr-Latn"), SerbLatinName, SerbLatinName }, + { new Locale("hr"), EngName, EngName }, + { new Locale("in"), EngName, EngName }, + { new Locale("lt"), EngName, EngName }, + { new Locale("nl"), EngName, EngName }, + { new Locale("no"), EngName, "R" }, + { new Locale("sv"), EngName, EngName }, + // el fallback to root + { new Locale("el"), EngName, EngName } + }; + } + + @Test(dataProvider="JavaTime") + public void testChronoJapanEraDisplayName(Locale locale, + String fullName, String shortName) { + + JapaneseEra era = JapaneseEra.valueOf("Reiwa"); + assertEquals(era.getDisplayName(TextStyle.FULL, locale), fullName); + assertEquals(era.getDisplayName(TextStyle.SHORT, locale), shortName); + assertEquals(era.getDisplayName(TextStyle.NARROW, locale), "R"); + } + + @Test + public void testFormatParseEraName() { + LocalDate date = LocalDate.of(2019, 5, 1); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd GGGG"); + formatter = formatter.withChronology(JapaneseChronology.INSTANCE); + + int num = 0; + for (Locale locale : Calendar.getAvailableLocales()) { + formatter = formatter.withLocale(locale); + try { + LocalDate.parse(date.format(formatter), formatter); + } catch (DateTimeParseException e) { + // If an array is defined for Japanese eras in java.time resource, + // but an era entry is missing, format fallback to English name + // while parse throw DateTimeParseException. + num++; + System.out.println("Missing java.time resource data for locale: " + locale); + } + } + if (num > 0) { + throw new RuntimeException("Missing java.time data for " + num + " locales"); + } + } +} -- GitLab