diff --git a/icu4c/source/data/locales/ar.txt b/icu4c/source/data/locales/ar.txt index 033f9966ec2..371dd8af7d1 100644 --- a/icu4c/source/data/locales/ar.txt +++ b/icu4c/source/data/locales/ar.txt @@ -1606,6 +1606,7 @@ ar{ "تيشو", "شووا", "هيسي", + "ريوا", } } } diff --git a/icu4c/source/data/locales/ast.txt b/icu4c/source/data/locales/ast.txt index 38f3adfb546..516ba1ed677 100644 --- a/icu4c/source/data/locales/ast.txt +++ b/icu4c/source/data/locales/ast.txt @@ -2288,6 +2288,7 @@ ast{ "Taishō", "e. Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika", @@ -2526,6 +2527,7 @@ ast{ "T", "S", "H", + "R", } wide{ "Taika (645–650)", @@ -2764,6 +2766,7 @@ ast{ "Taishō", "era Shōwa", "Heisei", + "Reiwa", } } intervalFormats{ diff --git a/icu4c/source/data/locales/bs_Cyrl.txt b/icu4c/source/data/locales/bs_Cyrl.txt index 03b685def47..c862bd97dc6 100644 --- a/icu4c/source/data/locales/bs_Cyrl.txt +++ b/icu4c/source/data/locales/bs_Cyrl.txt @@ -991,6 +991,7 @@ bs_Cyrl{ "Таишо", "Шова", "Хаисеи", + "Реива", } } } diff --git a/icu4c/source/data/locales/cs.txt b/icu4c/source/data/locales/cs.txt index 59826af1d7c..f1dce42e8e4 100644 --- a/icu4c/source/data/locales/cs.txt +++ b/icu4c/source/data/locales/cs.txt @@ -2259,6 +2259,7 @@ cs{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -2497,6 +2498,7 @@ cs{ "T", "S", "H", + "R", } wide{ "Taika (645–650)", @@ -2735,6 +2737,7 @@ cs{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/de.txt b/icu4c/source/data/locales/de.txt index b1f43a2af28..a3cf96e6484 100644 --- a/icu4c/source/data/locales/de.txt +++ b/icu4c/source/data/locales/de.txt @@ -1188,6 +1188,7 @@ de{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/he.txt b/icu4c/source/data/locales/he.txt index 3d0eb880547..e230619954c 100644 --- a/icu4c/source/data/locales/he.txt +++ b/icu4c/source/data/locales/he.txt @@ -1436,6 +1436,7 @@ he{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/hi.txt b/icu4c/source/data/locales/hi.txt index da547a044bc..ec81eded805 100644 --- a/icu4c/source/data/locales/hi.txt +++ b/icu4c/source/data/locales/hi.txt @@ -1210,6 +1210,7 @@ hi{ "ताईशो", "शोवा", "हेईसेई", + "रेइवा", } } } diff --git a/icu4c/source/data/locales/hr.txt b/icu4c/source/data/locales/hr.txt index caa27d6f750..26c49b391d8 100644 --- a/icu4c/source/data/locales/hr.txt +++ b/icu4c/source/data/locales/hr.txt @@ -1552,6 +1552,7 @@ hr{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/id.txt b/icu4c/source/data/locales/id.txt index c3c4da457d8..c015c5e34cb 100644 --- a/icu4c/source/data/locales/id.txt +++ b/icu4c/source/data/locales/id.txt @@ -1907,6 +1907,7 @@ id{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/ja.txt b/icu4c/source/data/locales/ja.txt index 8ab1a591b67..92a12cb14a3 100644 --- a/icu4c/source/data/locales/ja.txt +++ b/icu4c/source/data/locales/ja.txt @@ -2381,6 +2381,7 @@ ja{ "大正", "昭和", "平成", + "令和", } narrow{ "大化", @@ -2619,6 +2620,7 @@ ja{ "T", "S", "H", + "R", } } } diff --git a/icu4c/source/data/locales/ko.txt b/icu4c/source/data/locales/ko.txt index 8619a8ee6d5..f53cf1d8894 100644 --- a/icu4c/source/data/locales/ko.txt +++ b/icu4c/source/data/locales/ko.txt @@ -1846,6 +1846,7 @@ ko{ "다이쇼", "쇼와", "헤이세이", + "레이와", } } } diff --git a/icu4c/source/data/locales/lo.txt b/icu4c/source/data/locales/lo.txt index 705eb4eb281..0429e77b095 100644 --- a/icu4c/source/data/locales/lo.txt +++ b/icu4c/source/data/locales/lo.txt @@ -1817,6 +1817,7 @@ lo{ "ໄຕໂຊ", "ໂຊວາ", "ຮີຊີ", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/lt.txt b/icu4c/source/data/locales/lt.txt index 60a9bf67814..1323393934d 100644 --- a/icu4c/source/data/locales/lt.txt +++ b/icu4c/source/data/locales/lt.txt @@ -2394,6 +2394,7 @@ lt{ "Taišo", "Šova", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/nb.txt b/icu4c/source/data/locales/nb.txt index f245579f8bc..d253896c0e7 100644 --- a/icu4c/source/data/locales/nb.txt +++ b/icu4c/source/data/locales/nb.txt @@ -2018,6 +2018,7 @@ nb{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -2256,6 +2257,7 @@ nb{ "T", "S", "H", + "R", } } } diff --git a/icu4c/source/data/locales/nl.txt b/icu4c/source/data/locales/nl.txt index 771fcea1ad7..16f993b278c 100644 --- a/icu4c/source/data/locales/nl.txt +++ b/icu4c/source/data/locales/nl.txt @@ -2216,6 +2216,7 @@ nl{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/root.txt b/icu4c/source/data/locales/root.txt index 849a56b9c2a..29637ea9df3 100644 --- a/icu4c/source/data/locales/root.txt +++ b/icu4c/source/data/locales/root.txt @@ -1689,6 +1689,7 @@ root{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } narrow{ "Taika (645–650)", @@ -1927,6 +1928,7 @@ root{ "T", "S", "H", + "R", } wide:alias{"/LOCALE/calendar/japanese/eras/abbreviated"} } diff --git a/icu4c/source/data/locales/ru.txt b/icu4c/source/data/locales/ru.txt index 03fd4d96260..16f9ad47031 100644 --- a/icu4c/source/data/locales/ru.txt +++ b/icu4c/source/data/locales/ru.txt @@ -1654,6 +1654,7 @@ ru{ "Эпоха Тайсьо", "Сьова", "Эпоха Хэйсэй", + "Рэйва", } } } diff --git a/icu4c/source/data/locales/sr.txt b/icu4c/source/data/locales/sr.txt index 65511f4710d..a4d1e2f0214 100644 --- a/icu4c/source/data/locales/sr.txt +++ b/icu4c/source/data/locales/sr.txt @@ -1231,6 +1231,7 @@ sr{ "Таишо", "Шова", "Хаисеи", + "Реива", } } } diff --git a/icu4c/source/data/locales/sr_Latn.txt b/icu4c/source/data/locales/sr_Latn.txt index c879c41e54e..ec9792026e7 100644 --- a/icu4c/source/data/locales/sr_Latn.txt +++ b/icu4c/source/data/locales/sr_Latn.txt @@ -1232,6 +1232,7 @@ sr_Latn{ "Taišo", "Šova", "Haisei", + "Reiva", } } } diff --git a/icu4c/source/data/locales/sv.txt b/icu4c/source/data/locales/sv.txt index de009d78fab..8631c832d91 100644 --- a/icu4c/source/data/locales/sv.txt +++ b/icu4c/source/data/locales/sv.txt @@ -1563,6 +1563,7 @@ sv{ "Taishō", "Shōwa", "Heisei", + "Reiwa", } } } diff --git a/icu4c/source/data/locales/th.txt b/icu4c/source/data/locales/th.txt index 4ffeb0a6dee..363ab8b2db1 100644 --- a/icu4c/source/data/locales/th.txt +++ b/icu4c/source/data/locales/th.txt @@ -2308,6 +2308,7 @@ th{ "ทะอิโช", "โชวะ", "เฮเซ", + "เรวะ", } } } diff --git a/icu4c/source/data/locales/yue.txt b/icu4c/source/data/locales/yue.txt index 56d6a72a365..1eb16824e91 100644 --- a/icu4c/source/data/locales/yue.txt +++ b/icu4c/source/data/locales/yue.txt @@ -2371,6 +2371,7 @@ yue{ "大正", "昭和", "平成", + "令和", } } } diff --git a/icu4c/source/data/locales/zh.txt b/icu4c/source/data/locales/zh.txt index ee48ec188c0..189e227b5cc 100644 --- a/icu4c/source/data/locales/zh.txt +++ b/icu4c/source/data/locales/zh.txt @@ -2167,6 +2167,7 @@ zh{ "大正", "昭和", "平成", + "令和", } narrow{ "大化(645–650)", @@ -2405,6 +2406,7 @@ zh{ "T", "S", "H", + "R", } } } diff --git a/icu4c/source/data/locales/zh_Hant.txt b/icu4c/source/data/locales/zh_Hant.txt index dc2400daae8..ae4096bd32b 100644 --- a/icu4c/source/data/locales/zh_Hant.txt +++ b/icu4c/source/data/locales/zh_Hant.txt @@ -2370,6 +2370,7 @@ zh_Hant{ "大正", "昭和", "平成", + "令和", } } } diff --git a/icu4c/source/i18n/japancal.cpp b/icu4c/source/i18n/japancal.cpp index 93ab8008b1a..e49e20b9419 100644 --- a/icu4c/source/i18n/japancal.cpp +++ b/icu4c/source/i18n/japancal.cpp @@ -276,7 +276,8 @@ static const struct { { 1868, 9, 8 }, // Meiji 232 { 1912, 7, 30 }, // Taisho 233 { 1926, 12, 25 }, // Showa 234 - { 1989, 1, 8 } // Heisei 235 + { 1989, 1, 8 }, // Heisei 235 + { 2019, 5, 1 } // Reiwa 236 }; #define kEraCount UPRV_LENGTHOF(kEraInfo) diff --git a/icu4c/source/test/intltest/incaltst.cpp b/icu4c/source/test/intltest/incaltst.cpp index 8a418489747..3b1e8b3ac6c 100644 --- a/icu4c/source/test/intltest/incaltst.cpp +++ b/icu4c/source/test/intltest/incaltst.cpp @@ -77,6 +77,7 @@ void IntlCalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &n CASE(7,TestPersian); CASE(8,TestPersianFormat); CASE(9,TestTaiwan); + CASE(10,TestJapaneseHeiseiToReiwa); default: name = ""; break; } } @@ -626,23 +627,23 @@ void IntlCalendarTest::TestJapanese3860() // Test simple parse/format with adopt UDate aDate = 0; - // Test parse with missing era (should default to current era, heisei) + // Test parse with missing era (should default to current era) // Test parse with incomplete information logln("Testing parse w/ missing era..."); - SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y.M.d"), Locale("ja_JP@calendar=japanese"), status); + SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y/M/d"), Locale("ja_JP@calendar=japanese"), status); CHECK(status, "creating date format instance"); if(!fmt) { errln("Coudln't create en_US instance"); } else { UErrorCode s2 = U_ZERO_ERROR; cal2->clear(); - UnicodeString samplestr("1.1.9"); + UnicodeString samplestr("1/5/9"); logln(UnicodeString() + "Test Year: " + samplestr); aDate = fmt->parse(samplestr, s2); ParsePosition pp=0; fmt->parse(samplestr, *cal2, pp); - CHECK(s2, "parsing the 1.1.9 string"); - logln("*cal2 after 119 parse:"); + CHECK(s2, "parsing the 1/5/9 string"); + logln("*cal2 after 159 parse:"); str.remove(); fmt2->format(aDate, str); logln(UnicodeString() + "as Gregorian Calendar: " + str); @@ -653,7 +654,7 @@ void IntlCalendarTest::TestJapanese3860() int32_t expectYear = 1; int32_t expectEra = JapaneseCalendar::getCurrentEra(); if((gotYear!=1) || (gotEra != expectEra)) { - errln(UnicodeString("parse "+samplestr+" of 'y.m.d' as Japanese Calendar, expected year ") + expectYear + + errln(UnicodeString("parse "+samplestr+" of 'y/m/d' as Japanese Calendar, expected year ") + expectYear + UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); } else { logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra); @@ -666,7 +667,7 @@ void IntlCalendarTest::TestJapanese3860() // Test simple parse/format with adopt UDate aDate = 0; - // Test parse with missing era (should default to current era, heisei) + // Test parse with missing era (should default to current era) // Test parse with incomplete information logln("Testing parse w/ just year..."); SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y"), Locale("ja_JP@calendar=japanese"), status); @@ -678,7 +679,7 @@ void IntlCalendarTest::TestJapanese3860() cal2->clear(); UnicodeString samplestr("1"); logln(UnicodeString() + "Test Year: " + samplestr); - aDate = fmt->parse(samplestr, s2); + aDate = fmt->parse(samplestr, s2); // Should be parsed as the first day of the current era ParsePosition pp=0; fmt->parse(samplestr, *cal2, pp); CHECK(s2, "parsing the 1 string"); @@ -691,7 +692,7 @@ void IntlCalendarTest::TestJapanese3860() int32_t gotYear = cal2->get(UCAL_YEAR, s2); int32_t gotEra = cal2->get(UCAL_ERA, s2); int32_t expectYear = 1; - int32_t expectEra = 235; //JapaneseCalendar::kCurrentEra; + int32_t expectEra = JapaneseCalendar::getCurrentEra(); if((gotYear!=1) || (gotEra != expectEra)) { errln(UnicodeString("parse "+samplestr+" of 'y' as Japanese Calendar, expected year ") + expectYear + UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); @@ -700,13 +701,47 @@ void IntlCalendarTest::TestJapanese3860() } delete fmt; } - } + } delete cal2; delete cal; delete fmt2; } +void IntlCalendarTest::TestJapaneseHeiseiToReiwa() { + Calendar *cal; + UErrorCode status = U_ZERO_ERROR; + cal = Calendar::createInstance(status); + CHECK(status, UnicodeString("Creating default Gregorian Calendar")); + cal->set(2019, UCAL_APRIL, 29); + + DateFormat *jfmt = DateFormat::createDateInstance(DateFormat::LONG, "ja@calendar=japanese"); + CHECK(status, UnicodeString("Creating date format ja@calendar=japanese")) + + const char* EXPECTED_FORMAT[4] = { + "\\u5E73\\u621031\\u5E744\\u670829\\u65E5", // Heisei 31 April 29 + "\\u5E73\\u621031\\u5E744\\u670830\\u65E5", // Heisei 31 April 30 + "\\u4EE4\\u548c1\\u5E745\\u67081\\u65E5", // Reiwa 1 May 1 + "\\u4EE4\\u548c1\\u5E745\\u67082\\u65E5" // Reiwa 1 May 2 + }; + + for (int32_t i = 0; i < 4; i++) { + UnicodeString dateStr; + UDate d = cal->getTime(status); + CHECK(status, UnicodeString("Get test date")); + jfmt->format(d, dateStr); + UnicodeString expected(UnicodeString(EXPECTED_FORMAT[i], -1, US_INV).unescape()); + if (expected.compare(dateStr) != 0) { + errln(UnicodeString("Formatting year:") + cal->get(UCAL_YEAR, status) + " month:" + + cal->get(UCAL_MONTH, status) + " day:" + (cal->get(UCAL_DATE, status) + 1) + + " - expected: " + expected + " / actual: " + dateStr); + } + cal->add(UCAL_DATE, 1, status); + CHECK(status, UnicodeString("Add 1 day")); + } + delete jfmt; + delete cal; +} diff --git a/icu4c/source/test/intltest/incaltst.h b/icu4c/source/test/intltest/incaltst.h index 0292366348d..e867e2266f2 100644 --- a/icu4c/source/test/intltest/incaltst.h +++ b/icu4c/source/test/intltest/incaltst.h @@ -34,7 +34,8 @@ public: void TestJapanese(void); void TestJapaneseFormat(void); void TestJapanese3860(void); - + void TestJapaneseHeiseiToReiwa(void); + void TestPersian(void); void TestPersianFormat(void); diff --git a/icu4c/source/test/testdata/format.txt b/icu4c/source/test/testdata/format.txt index c0364e2c1b0..c598ade6a47 100644 --- a/icu4c/source/test/testdata/format.txt +++ b/icu4c/source/test/testdata/format.txt @@ -494,35 +494,35 @@ format:table(nofallback) { "", "PATTERN=G y", "YEAR=8", - "Heisei 8" + "Reiwa 8" }, { "en_US@calendar=japanese", "", "PATTERN=G yy", "YEAR=8", - "Heisei 08" + "Reiwa 08" }, { "en_US@calendar=japanese", "", "PATTERN=G yyy", "YEAR=8", - "Heisei 008" + "Reiwa 008" }, { "en_US@calendar=japanese", "", "PATTERN=G yyyy", "YEAR=8", - "Heisei 0008" + "Reiwa 0008" }, { "en_US@calendar=japanese", "", "PATTERN=G yyyyy", "YEAR=8", - "Heisei 00008" + "Reiwa 00008" }, } diff --git a/icu4c/source/test/testdata/structLocale.txt b/icu4c/source/test/testdata/structLocale.txt index f0de36c7c12..0bed0582ddb 100644 --- a/icu4c/source/test/testdata/structLocale.txt +++ b/icu4c/source/test/testdata/structLocale.txt @@ -25360,6 +25360,7 @@ structLocale:table(nofallback){ "", "", "", + "", } wide{ "", @@ -25598,6 +25599,7 @@ structLocale:table(nofallback){ "", "", "", + "", } narrow{ "", @@ -25836,6 +25838,7 @@ structLocale:table(nofallback){ "", "", "", + "", } } intervalFormats{