mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-14 17:24:01 +00:00
ICU-20536 Japanese era Reiwa support in ICU4C 58
This commit is contained in:
parent
7338625b67
commit
14a8ceb46a
29 changed files with 89 additions and 17 deletions
|
@ -1606,6 +1606,7 @@ ar{
|
|||
"تيشو",
|
||||
"شووا",
|
||||
"هيسي",
|
||||
"ريوا",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -991,6 +991,7 @@ bs_Cyrl{
|
|||
"Таишо",
|
||||
"Шова",
|
||||
"Хаисеи",
|
||||
"Реива",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1188,6 +1188,7 @@ de{
|
|||
"Taishō",
|
||||
"Shōwa",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1436,6 +1436,7 @@ he{
|
|||
"Taishō",
|
||||
"Shōwa",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1210,6 +1210,7 @@ hi{
|
|||
"ताईशो",
|
||||
"शोवा",
|
||||
"हेईसेई",
|
||||
"रेइवा",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1552,6 +1552,7 @@ hr{
|
|||
"Taishō",
|
||||
"Shōwa",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1907,6 +1907,7 @@ id{
|
|||
"Taishō",
|
||||
"Shōwa",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2381,6 +2381,7 @@ ja{
|
|||
"大正",
|
||||
"昭和",
|
||||
"平成",
|
||||
"令和",
|
||||
}
|
||||
narrow{
|
||||
"大化",
|
||||
|
@ -2619,6 +2620,7 @@ ja{
|
|||
"T",
|
||||
"S",
|
||||
"H",
|
||||
"R",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1846,6 +1846,7 @@ ko{
|
|||
"다이쇼",
|
||||
"쇼와",
|
||||
"헤이세이",
|
||||
"레이와",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1817,6 +1817,7 @@ lo{
|
|||
"ໄຕໂຊ",
|
||||
"ໂຊວາ",
|
||||
"ຮີຊີ",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2394,6 +2394,7 @@ lt{
|
|||
"Taišo",
|
||||
"Šova",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2018,6 +2018,7 @@ nb{
|
|||
"Taishō",
|
||||
"Shōwa",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
narrow{
|
||||
"Taika (645–650)",
|
||||
|
@ -2256,6 +2257,7 @@ nb{
|
|||
"T",
|
||||
"S",
|
||||
"H",
|
||||
"R",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2216,6 +2216,7 @@ nl{
|
|||
"Taishō",
|
||||
"Shōwa",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -1654,6 +1654,7 @@ ru{
|
|||
"Эпоха Тайсьо",
|
||||
"Сьова",
|
||||
"Эпоха Хэйсэй",
|
||||
"Рэйва",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1231,6 +1231,7 @@ sr{
|
|||
"Таишо",
|
||||
"Шова",
|
||||
"Хаисеи",
|
||||
"Реива",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1232,6 +1232,7 @@ sr_Latn{
|
|||
"Taišo",
|
||||
"Šova",
|
||||
"Haisei",
|
||||
"Reiva",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1563,6 +1563,7 @@ sv{
|
|||
"Taishō",
|
||||
"Shōwa",
|
||||
"Heisei",
|
||||
"Reiwa",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2308,6 +2308,7 @@ th{
|
|||
"ทะอิโช",
|
||||
"โชวะ",
|
||||
"เฮเซ",
|
||||
"เรวะ",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2371,6 +2371,7 @@ yue{
|
|||
"大正",
|
||||
"昭和",
|
||||
"平成",
|
||||
"令和",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2167,6 +2167,7 @@ zh{
|
|||
"大正",
|
||||
"昭和",
|
||||
"平成",
|
||||
"令和",
|
||||
}
|
||||
narrow{
|
||||
"大化(645–650)",
|
||||
|
@ -2405,6 +2406,7 @@ zh{
|
|||
"T",
|
||||
"S",
|
||||
"H",
|
||||
"R",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2370,6 +2370,7 @@ zh_Hant{
|
|||
"大正",
|
||||
"昭和",
|
||||
"平成",
|
||||
"令和",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -34,7 +34,8 @@ public:
|
|||
void TestJapanese(void);
|
||||
void TestJapaneseFormat(void);
|
||||
void TestJapanese3860(void);
|
||||
|
||||
void TestJapaneseHeiseiToReiwa(void);
|
||||
|
||||
void TestPersian(void);
|
||||
void TestPersianFormat(void);
|
||||
|
||||
|
|
10
icu4c/source/test/testdata/format.txt
vendored
10
icu4c/source/test/testdata/format.txt
vendored
|
@ -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"
|
||||
},
|
||||
|
||||
}
|
||||
|
|
3
icu4c/source/test/testdata/structLocale.txt
vendored
3
icu4c/source/test/testdata/structLocale.txt
vendored
|
@ -25360,6 +25360,7 @@ structLocale:table(nofallback){
|
|||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
wide{
|
||||
"",
|
||||
|
@ -25598,6 +25599,7 @@ structLocale:table(nofallback){
|
|||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
narrow{
|
||||
"",
|
||||
|
@ -25836,6 +25838,7 @@ structLocale:table(nofallback){
|
|||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
}
|
||||
}
|
||||
intervalFormats{
|
||||
|
|
Loading…
Add table
Reference in a new issue