ICU-20536 Japanese Era Reiwa support in ICU4C 51

This commit is contained in:
yumaoka 2019-04-04 17:54:20 -04:00 committed by Yoshito Umaoka
parent dd05b79340
commit eba80da873
22 changed files with 74 additions and 16 deletions

View file

@ -1204,6 +1204,7 @@ ar{
"تيشو",
"شووا",
"هيسي",
"ريوا",
}
}
}

View file

@ -1010,6 +1010,7 @@ bs_Cyrl{
"Таишо",
"Шова",
"Хаисеи",
"Реива",
}
}
}

View file

@ -418,6 +418,7 @@ en_HK{
"Taishō",
"Shōwa",
"Heisei",
"Reiwa",
}
}
}

View file

@ -1144,6 +1144,7 @@ he{
"Taishō",
"Shōwa",
"Heisei",
"Reiwa",
}
}
}

View file

@ -866,6 +866,7 @@ hi{
"ताईशो",
"शोवा",
"हेईसेई",
"रेइवा",
}
}
}

View file

@ -1562,6 +1562,7 @@ id{
"Taishō",
"Shōwa",
"Heisei",
"Reiwa",
}
}
}

View file

@ -1812,6 +1812,7 @@ ja{
"大正",
"昭和",
"平成",
"令和",
}
narrow{
"大化",
@ -2050,6 +2051,7 @@ ja{
"大",
"昭",
"平",
"令",
}
}
}

View file

@ -979,6 +979,7 @@ ko{
"다이쇼",
"쇼와",
"헤이세이",
"레이와",
}
}
}

View file

@ -1679,6 +1679,7 @@ lo{
"ໄຕໂຊ",
"ໂຊວາ",
"ຮີຊີ",
"Reiwa",
}
}
}

View file

@ -1488,6 +1488,7 @@ root{
"Taishō",
"Shōwa",
"Heisei",
"Reiwa",
}
narrow{
"Taika (645-650)",
@ -1726,6 +1727,7 @@ root{
"T",
"S",
"H",
"R",
}
wide:alias{"/LOCALE/calendar/japanese/eras/abbreviated"}
}

View file

@ -1471,6 +1471,7 @@ ru{
"Эпоха Тайсьо",
"Сьова",
"Эпоха Хэйсэй",
"Рэйва",
}
}
}

View file

@ -1087,6 +1087,7 @@ sr{
"Таишо",
"Шова",
"Хаисеи",
"Реива",
}
}
}

View file

@ -1088,6 +1088,7 @@ sr_Latn{
"Taišo",
"Šova",
"Haisei",
"Reiva",
}
}
}

View file

@ -1225,6 +1225,7 @@ sv{
"Taishō",
"Shōwa",
"Heisei",
"Reiwa",
}
}
}

View file

@ -1769,6 +1769,7 @@ th{
"ทะอิโช",
"โชวะ",
"เฮเซ",
"เรวะ",
}
}
}

View file

@ -1800,6 +1800,7 @@ zh{
"大正",
"昭和",
"平成",
"令和",
}
}
}

View file

@ -1690,6 +1690,7 @@ zh_Hant{
"大正",
"昭和",
"平成",
"令和",
}
}
}

View file

@ -273,7 +273,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 (sizeof(kEraInfo)/sizeof(kEraInfo[0]))

View file

@ -78,6 +78,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;
}
}
@ -627,23 +628,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);
@ -654,7 +655,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);
@ -667,7 +668,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);
@ -679,7 +680,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");
@ -692,7 +693,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 +")");
@ -701,14 +702,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;
}
/**

View file

@ -32,6 +32,7 @@ public:
void TestJapanese(void);
void TestJapaneseFormat(void);
void TestJapanese3860(void);
void TestJapaneseHeiseiToReiwa(void);
void TestPersian(void);
void TestPersianFormat(void);

View file

@ -492,35 +492,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"
},
}

View file

@ -15783,6 +15783,7 @@ structLocale:table(nofallback){
"",
"",
"",
"",
}
wide{
"",
@ -16021,6 +16022,7 @@ structLocale:table(nofallback){
"",
"",
"",
"",
}
narrow{
"",
@ -16259,6 +16261,7 @@ structLocale:table(nofallback){
"",
"",
"",
"",
}
}
}