Mercurial > hg > openjdk > jdk8u > jdk
changeset 13593:0bb89d93d4d7 jdk8u222-b08
8219781: Localized names for Japanese era Reiwa in COMPAT provider
Reviewed-by: naoto, aph, phh
line wrap: on
line diff
--- a/src/share/classes/sun/text/resources/ar/FormatData_ar.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/ar/FormatData_ar.java Mon Jul 01 20:26:04 2019 +0100 @@ -212,6 +212,7 @@ "\u062a\u064a\u0634\u0648", "\u0634\u0648\u0648\u0627", "\u0647\u064a\u0633\u064a", + "\u0631\u064a\u0648\u0627", } }, { "japanese.short.Eras", @@ -221,6 +222,7 @@ "\u062a\u064a\u0634\u0648", "\u0634\u0648\u0648\u0627", "\u0647\u064a\u0633\u064a", + "\u0631\u064a\u0648\u0627", } }, { "buddhist.Eras",
--- a/src/share/classes/sun/text/resources/ar/JavaTimeSupplementary_ar.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/ar/JavaTimeSupplementary_ar.java Mon Jul 01 20:26:04 2019 +0100 @@ -229,6 +229,7 @@ "\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 @@ "\u062a\u064a\u0634\u0648", "\u0634\u0648\u0648\u0627", "\u0647\u064a\u0633\u064a", + "\u0631\u064a\u0648\u0627", } }, { "java.time.long.Eras",
--- a/src/share/classes/sun/text/resources/hi/JavaTimeSupplementary_hi_IN.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/hi/JavaTimeSupplementary_hi_IN.java Mon Jul 01 20:26:04 2019 +0100 @@ -145,6 +145,7 @@ "\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 @@ "\u0924\u093e\u0908\u0936\u094b", "\u0936\u094b\u0935\u093e", "\u0939\u0947\u0908\u0938\u0947\u0908", + "\u0930\u0947\u0907\u0935\u093e", } }, { "java.time.short.Eras",
--- a/src/share/classes/sun/text/resources/ko/FormatData_ko.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/ko/FormatData_ko.java Mon Jul 01 20:26:04 2019 +0100 @@ -192,6 +192,7 @@ "\ub2e4\uc774\uc1fc", "\uc1fc\uc640", "\ud5e4\uc774\uc138\uc774", + "\ub808\uc774\uc640", } }, { "AmPmMarkers",
--- a/src/share/classes/sun/text/resources/ko/JavaTimeSupplementary_ko.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/ko/JavaTimeSupplementary_ko.java Mon Jul 01 20:26:04 2019 +0100 @@ -158,6 +158,7 @@ "\ub2e4\uc774\uc1fc", "\uc1fc\uc640", "\ud5e4\uc774\uc138\uc774", + "\ub808\uc774\uc640", } }, { "java.time.japanese.short.Eras", @@ -167,6 +168,7 @@ "\ub2e4\uc774\uc1fc", "\uc1fc\uc640", "\ud5e4\uc774\uc138\uc774", + "\ub808\uc774\uc640", } }, { "java.time.long.Eras",
--- a/src/share/classes/sun/text/resources/ru/JavaTimeSupplementary_ru.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/ru/JavaTimeSupplementary_ru.java Mon Jul 01 20:26:04 2019 +0100 @@ -219,6 +219,7 @@ "\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 @@ "\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",
--- a/src/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/sr/JavaTimeSupplementary_sr.java Mon Jul 01 20:26:04 2019 +0100 @@ -179,6 +179,7 @@ "\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 @@ "\u0422\u0430\u0438\u0448\u043e", "\u0428\u043e\u0432\u0430", "\u0425\u0430\u0438\u0441\u0435\u0438", + "\u0420\u0435\u0438\u0432\u0430", } }, { "java.time.long.Eras",
--- a/src/share/classes/sun/text/resources/th/FormatData_th.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/th/FormatData_th.java Mon Jul 01 20:26:04 2019 +0100 @@ -245,6 +245,7 @@ "\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 @@ "\u0e17", "\u0e0a", "\u0e2e", + "R", } }, { "buddhist.TimePatterns",
--- a/src/share/classes/sun/text/resources/th/JavaTimeSupplementary_th.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/th/JavaTimeSupplementary_th.java Mon Jul 01 20:26:04 2019 +0100 @@ -199,6 +199,7 @@ "\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 @@ "\u0e17\u0e30\u0e2d\u0e34\u0e42\u0e0a", "\u0e42\u0e0a\u0e27\u0e30", "\u0e40\u0e2e\u0e40\u0e0b", + "\u0e40\u0e23\u0e27\u0e30", } }, { "java.time.long.Eras",
--- a/src/share/classes/sun/text/resources/zh/FormatData_zh.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/zh/FormatData_zh.java Mon Jul 01 20:26:04 2019 +0100 @@ -282,6 +282,7 @@ "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "TimePatterns",
--- a/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh.java Mon Jul 01 20:26:04 2019 +0100 @@ -186,6 +186,7 @@ "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.japanese.short.Eras", @@ -195,6 +196,7 @@ "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.roc.DatePatterns",
--- a/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh_TW.java Thu Jan 31 13:05:24 2019 +0530 +++ b/src/share/classes/sun/text/resources/zh/JavaTimeSupplementary_zh_TW.java Mon Jul 01 20:26:04 2019 +0100 @@ -175,6 +175,7 @@ "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.japanese.short.Eras", @@ -184,6 +185,7 @@ "\u5927\u6b63", "\u662d\u548c", "\u5e73\u6210", + "\u4ee4\u548c", } }, { "java.time.roc.DatePatterns",
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/JapanEraNameCompatTest.java Mon Jul 01 20:26:04 2019 +0100 @@ -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"); + } + } +}