diff --git a/icu4c/source/data/brkitr/LOCALE_DEPS.json b/icu4c/source/data/brkitr/LOCALE_DEPS.json index 8b33eb08060..d3d8df56213 100644 --- a/icu4c/source/data/brkitr/LOCALE_DEPS.json +++ b/icu4c/source/data/brkitr/LOCALE_DEPS.json @@ -3,5 +3,5 @@ // Generated using tools/cldr/cldr-to-icu/build-icu-data.xml { - "cldrVersion": "39" + "cldrVersion": "40" } diff --git a/icu4c/source/data/brkitr/root.txt b/icu4c/source/data/brkitr/root.txt index 114c5e780a0..59b708bbb50 100644 --- a/icu4c/source/data/brkitr/root.txt +++ b/icu4c/source/data/brkitr/root.txt @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html // Generated using tools/cldr/cldr-to-icu/build-icu-data.xml root{ - Version{"39"} + Version{"40"} boundaries{ grapheme:process(dependency){"char.brk"} line:process(dependency){"line.brk"} diff --git a/icu4c/source/data/coll/LOCALE_DEPS.json b/icu4c/source/data/coll/LOCALE_DEPS.json index ce2e4768f04..80aa96e2f3c 100644 --- a/icu4c/source/data/coll/LOCALE_DEPS.json +++ b/icu4c/source/data/coll/LOCALE_DEPS.json @@ -3,7 +3,7 @@ // Generated using tools/cldr/cldr-to-icu/build-icu-data.xml { - "cldrVersion": "39", + "cldrVersion": "40", "aliases": { "ars": "ar_SA", "in": "id", diff --git a/icu4c/source/data/coll/af.txt b/icu4c/source/data/coll/af.txt index 32b62e44a3f..987116312d1 100644 --- a/icu4c/source/data/coll/af.txt +++ b/icu4c/source/data/coll/af.txt @@ -5,7 +5,7 @@ af{ collations{ standard{ Sequence{"&N<<<ʼn"} - Version{"39"} + Version{"40"} } } } diff --git a/icu4c/source/data/coll/am.txt b/icu4c/source/data/coll/am.txt index bfc5fba3789..33a738fdb9c 100644 --- a/icu4c/source/data/coll/am.txt +++ b/icu4c/source/data/coll/am.txt @@ -5,7 +5,7 @@ am{ collations{ standard{ Sequence{"[reorder Ethi]"} - Version{"39"} + Version{"40"} } } } diff --git a/icu4c/source/data/coll/ar.txt b/icu4c/source/data/coll/ar.txt index efe8a4dbf62..300f70c8689 100644 --- a/icu4c/source/data/coll/ar.txt +++ b/icu4c/source/data/coll/ar.txt @@ -9,7 +9,7 @@ ar{ "&ت<<ة<<<ﺔ<<<ﺓ" "&ي<<ى<<<ﯨ<<<ﯩ<<<ﻰ<<<ﻯ<<<ﲐ<<<ﱝ" } - Version{"39"} + Version{"40"} } standard{ Sequence{ @@ -397,7 +397,7 @@ ar{ "‎&ۓ‎=ﮰ‎=ﮱ" "‎&ۀ‎=ﮤ‎=ﮥ" } - Version{"39"} + Version{"40"} } } } diff --git a/icu4c/source/data/coll/as.txt b/icu4c/source/data/coll/as.txt index bd3970ee622..149131da669 100644 --- a/icu4c/source/data/coll/as.txt +++ b/icu4c/source/data/coll/as.txt @@ -11,7 +11,7 @@ as{ "&[before 1]ত<ৎ=ত্\u200D" "&হ<ক্ষ" } - Version{"39"} + Version{"40"} } } } diff --git a/icu4c/source/data/coll/az.txt b/icu4c/source/data/coll/az.txt index 01723f81334..59e8254b329 100644 --- a/icu4c/source/data/coll/az.txt +++ b/icu4c/source/data/coll/az.txt @@ -9,7 +9,7 @@ az{ "[import az-u-co-standard]" "[reorder others]" } - Version{"39"} + Version{"40"} } standard{ Sequence{ @@ -26,7 +26,7 @@ az{ "&Hexpected != actual) { - log_err("ERROR dtpgen locale %s udatpg_getDefaultHourCycle expecte to get %d but get %d\n", + log_err("ERROR dtpgen locale %s udatpg_getDefaultHourCycle expected to get %d but get %d\n", testDataPtr->locale, testDataPtr->expected, actual); } udatpg_close(dtpgen); diff --git a/icu4c/source/test/intltest/dtifmtts.cpp b/icu4c/source/test/intltest/dtifmtts.cpp index 5b2d8127bd6..f499e503441 100644 --- a/icu4c/source/test/intltest/dtifmtts.cpp +++ b/icu4c/source/test/intltest/dtifmtts.cpp @@ -1154,8 +1154,8 @@ void DateIntervalFormatTest::testHourMetacharacters() { "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "\\u4E0A\\u534812\\u6642\\u81F31\\u6642", "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "\\u4E0A\\u534810\\u6642 \\u2013 \\u4E0B\\u53481\\u6642", "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "\\u51CC\\u666812\\u20131\\u6642", - "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "\\u4E0A\\u534810\\u6642 \\u2013 \\u4E0B\\u53481\\u6642", - "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "\\u51CC\\u666812\\u20131\\u6642", + "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "\\u4E0A\\u534810\\u6642\\u81F3\\u4E0B\\u53481\\u6642", + "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "\\u4E0A\\u534812\\u6642\\u81F31\\u6642", "hi_IN", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jj", "10 am \\u2013 1 pm", "hi_IN", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "12\\u20131 am", "hi_IN", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "\\u0938\\u0941\\u092C\\u0939 10 \\u2013 \\u0926\\u094B\\u092A\\u0939\\u0930 1", @@ -2216,7 +2216,7 @@ void DateIntervalFormatTest::testTicket21222GregorianEraDiff() { formatted = g->formatToValue(BCtoAD, status); assertEquals("Gregorian - BC to AD", - u"4 5, 123 BC, 6 AM \u2013 4 5, 124 AD, 6 AM", + u"4/5/123 B, 6 AM \u2013 4/5/124 A, 6 AM", formatted.toString(status)); } @@ -2264,20 +2264,20 @@ void DateIntervalFormatTest::testTicket21222ROCEraDiff() { formatted = roc->formatToValue(bothAfterMG, status); assertEquals("roc calendar - both dates in MG Era", - u"民國1/1/2 6 上午 – 民國2/1/2 6 上午", + u"民國1/1/2 上午6時 – 民國2/1/2 上午6時", formatted.toString(status)); getCategoryAndField(formatted, expectedCategory, expectedField, status); formatted = roc->formatToValue(beforeAfterMG, status); assertEquals("roc calendar - prior MG Era and in MG Era", - u"民國前1年1月2日 6 上午 – 民國2年1月2日 6 上午", + u"民國前1年1月2日 上午6時 – 民國2年1月2日 上午6時", formatted.toString(status)); verifyCategoryAndField(formatted, expectedCategory, expectedField, status); formatted = roc->formatToValue(bothBeforeMG, status); assertEquals("roc calendar - both dates prior MG Era", - u"民國前2/1/2 6 上午 – 民國前1/1/2 6 上午", + u"民國前2/1/2 上午6時 – 民國前1/1/2 上午6時", formatted.toString(status)); verifyCategoryAndField(formatted, expectedCategory, expectedField, status); } @@ -2340,7 +2340,7 @@ void DateIntervalFormatTest::testTicket21222JapaneseEraDiff() { formatted = japanese->formatToValue(beforeAfterReiwa, status); assertEquals("japanese calendar - date before and in Reiwa", - u"平成31年3月2日 午前6時~令和元年5月4日 午前6時", + u"H31/3/2 午前6時~R1/5/4 午前6時", formatted.toString(status)); verifyCategoryAndField(formatted, expectedCategory, expectedField, status); } diff --git a/icu4c/source/test/intltest/dtptngts.cpp b/icu4c/source/test/intltest/dtptngts.cpp index faa850aa838..9104aa7035b 100644 --- a/icu4c/source/test/intltest/dtptngts.cpp +++ b/icu4c/source/test/intltest/dtptngts.cpp @@ -252,13 +252,13 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/) CharsToUnicodeString("1999\\u5E74\\u7B2C1\\u5B63\\u5EA6"), // 07: yQQQ CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm UnicodeString("23:58"), // 09: HHmm - CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm + CharsToUnicodeString("23:58"), // 10: jjmm UnicodeString("58:59"), // 11: mmss CharsToUnicodeString("1999\\u5E741\\u6708"), // 12: yyyyMMMM -> yyyy\u5E74MMM CharsToUnicodeString("1\\u670813\\u65E5\\u5468\\u4E09"), // 13: MMMEd -> MMMd\u65E5EEE CharsToUnicodeString("13\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE - CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS" - UnicodeString("11:58"), // 16: JJmm + CharsToUnicodeString("23:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS" + UnicodeString("23:58"), // 16: JJmm }; UnicodeString patternResults_zh_TW_roc[] = { @@ -315,13 +315,13 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/) CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u7b2c\\u56db\\u5B63\\u5EA6"), // 07: yQQQ CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm UnicodeString("23:58"), // 09: HHmm - CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm + CharsToUnicodeString("23:58"), // 10: jjmm UnicodeString("58:59"), // 11: mmss CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u5341\\u4E00\\u6708"), // 12: yyyyMMMM CharsToUnicodeString("\\u5341\\u4E00\\u670826\\u65E5\\u5468\\u4E09"), // 13: MMMEd CharsToUnicodeString("26\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE - CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSS - UnicodeString("11:58"), // 16: JJmm + CharsToUnicodeString("23:58:59.123"), // 15: jmmssSS + UnicodeString("23:58"), // 16: JJmm }; UnicodeString patternResults_ja_jp_traditional[] = { @@ -949,8 +949,8 @@ void IntlTestDateTimePatternGeneratorAPI::testOptions(/*char *par*/) { "en@calendar=chinese", "Gy", "r(U)", UDATPG_MATCH_NO_OPTIONS }, { "en@calendar=chinese", "GU", "r(U)", UDATPG_MATCH_NO_OPTIONS }, { "en@calendar=chinese", "ULLL", "MMM U", UDATPG_MATCH_NO_OPTIONS }, - { "en@calendar=chinese", "yMMM", "MMM r(U)", UDATPG_MATCH_NO_OPTIONS }, - { "en@calendar=chinese", "GUMMM", "MMM r(U)", UDATPG_MATCH_NO_OPTIONS }, + { "en@calendar=chinese", "yMMM", "MMM r", UDATPG_MATCH_NO_OPTIONS }, + { "en@calendar=chinese", "GUMMM", "MMM r", UDATPG_MATCH_NO_OPTIONS }, { "zh@calendar=chinese", "yyyy", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS }, { "zh@calendar=chinese", "YYYY", "YY\\u5E74", UDATPG_MATCH_NO_OPTIONS }, // not a good result, may want r(Y) or r(U) { "zh@calendar=chinese", "U", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS }, @@ -1159,12 +1159,12 @@ void IntlTestDateTimePatternGeneratorAPI::testStaticGetSkeleton(/*char *par*/) void IntlTestDateTimePatternGeneratorAPI::testC() { const char* tests[][3] = { // These may change with actual data for Bhmm/bhmm skeletons - {"zh", "Cm", "Bh:mm"}, - {"zh", "CCm", "Bhh:mm"}, - {"zh", "CCCm", "BBBBh:mm"}, - {"zh", "CCCCm", "BBBBhh:mm"}, - {"zh", "CCCCCm", "BBBBBh:mm"}, - {"zh", "CCCCCCm", "BBBBBhh:mm"}, + {"zh-TW", "Cm", "Bh:mm"}, + {"zh-TW", "CCm", "Bhh:mm"}, + {"zh-TW", "CCCm", "BBBBh:mm"}, + {"zh-TW", "CCCCm", "BBBBhh:mm"}, + {"zh-TW", "CCCCCm", "BBBBBh:mm"}, + {"zh-TW", "CCCCCCm", "BBBBBhh:mm"}, {"de", "Cm", "HH:mm"}, {"de", "CCm", "HH:mm"}, {"de", "CCCm", "HH:mm"}, diff --git a/icu4c/source/test/intltest/measfmttest.cpp b/icu4c/source/test/intltest/measfmttest.cpp index 900cc136514..b60a341090a 100644 --- a/icu4c/source/test/intltest/measfmttest.cpp +++ b/icu4c/source/test/intltest/measfmttest.cpp @@ -58,6 +58,7 @@ private: void TestCompatible65(); void TestCompatible68(); void TestCompatible69(); + void TestCompatible70(); void TestGetAvailable(); void TestExamplesInDocs(); void TestFormatPeriodEn(); @@ -191,6 +192,7 @@ void MeasureFormatTest::runIndexedTest( TESTCASE_AUTO(TestCompatible65); TESTCASE_AUTO(TestCompatible68); TESTCASE_AUTO(TestCompatible69); + TESTCASE_AUTO(TestCompatible70); TESTCASE_AUTO(TestGetAvailable); TESTCASE_AUTO(TestExamplesInDocs); TESTCASE_AUTO(TestFormatPeriodEn); @@ -2681,6 +2683,387 @@ void MeasureFormatTest::TestCompatible69() { assertSuccess("", status); } +void MeasureFormatTest::TestCompatible70() { + UErrorCode status = U_ZERO_ERROR; + LocalPointer measureUnit; + MeasureUnit measureUnitValue; + measureUnit.adoptInstead(MeasureUnit::createGForce(status)); + measureUnitValue = MeasureUnit::getGForce(); + measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status)); + measureUnitValue = MeasureUnit::getMeterPerSecondSquared(); + measureUnit.adoptInstead(MeasureUnit::createArcMinute(status)); + measureUnitValue = MeasureUnit::getArcMinute(); + measureUnit.adoptInstead(MeasureUnit::createArcSecond(status)); + measureUnitValue = MeasureUnit::getArcSecond(); + measureUnit.adoptInstead(MeasureUnit::createDegree(status)); + measureUnitValue = MeasureUnit::getDegree(); + measureUnit.adoptInstead(MeasureUnit::createRadian(status)); + measureUnitValue = MeasureUnit::getRadian(); + measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status)); + measureUnitValue = MeasureUnit::getRevolutionAngle(); + measureUnit.adoptInstead(MeasureUnit::createAcre(status)); + measureUnitValue = MeasureUnit::getAcre(); + measureUnit.adoptInstead(MeasureUnit::createDunam(status)); + measureUnitValue = MeasureUnit::getDunam(); + measureUnit.adoptInstead(MeasureUnit::createHectare(status)); + measureUnitValue = MeasureUnit::getHectare(); + measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status)); + measureUnitValue = MeasureUnit::getSquareCentimeter(); + measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status)); + measureUnitValue = MeasureUnit::getSquareFoot(); + measureUnit.adoptInstead(MeasureUnit::createSquareInch(status)); + measureUnitValue = MeasureUnit::getSquareInch(); + measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status)); + measureUnitValue = MeasureUnit::getSquareKilometer(); + measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status)); + measureUnitValue = MeasureUnit::getSquareMeter(); + measureUnit.adoptInstead(MeasureUnit::createSquareMile(status)); + measureUnitValue = MeasureUnit::getSquareMile(); + measureUnit.adoptInstead(MeasureUnit::createSquareYard(status)); + measureUnitValue = MeasureUnit::getSquareYard(); + measureUnit.adoptInstead(MeasureUnit::createItem(status)); + measureUnitValue = MeasureUnit::getItem(); + measureUnit.adoptInstead(MeasureUnit::createKarat(status)); + measureUnitValue = MeasureUnit::getKarat(); + measureUnit.adoptInstead(MeasureUnit::createMilligramOfglucosePerDeciliter(status)); + measureUnitValue = MeasureUnit::getMilligramOfglucosePerDeciliter(); + measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status)); + measureUnitValue = MeasureUnit::getMilligramPerDeciliter(); + measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status)); + measureUnitValue = MeasureUnit::getMillimolePerLiter(); + measureUnit.adoptInstead(MeasureUnit::createMole(status)); + measureUnitValue = MeasureUnit::getMole(); + measureUnit.adoptInstead(MeasureUnit::createPercent(status)); + measureUnitValue = MeasureUnit::getPercent(); + measureUnit.adoptInstead(MeasureUnit::createPermille(status)); + measureUnitValue = MeasureUnit::getPermille(); + measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status)); + measureUnitValue = MeasureUnit::getPartPerMillion(); + measureUnit.adoptInstead(MeasureUnit::createPermyriad(status)); + measureUnitValue = MeasureUnit::getPermyriad(); + measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status)); + measureUnitValue = MeasureUnit::getLiterPer100Kilometers(); + measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status)); + measureUnitValue = MeasureUnit::getLiterPerKilometer(); + measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status)); + measureUnitValue = MeasureUnit::getMilePerGallon(); + measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status)); + measureUnitValue = MeasureUnit::getMilePerGallonImperial(); + measureUnit.adoptInstead(MeasureUnit::createBit(status)); + measureUnitValue = MeasureUnit::getBit(); + measureUnit.adoptInstead(MeasureUnit::createByte(status)); + measureUnitValue = MeasureUnit::getByte(); + measureUnit.adoptInstead(MeasureUnit::createGigabit(status)); + measureUnitValue = MeasureUnit::getGigabit(); + measureUnit.adoptInstead(MeasureUnit::createGigabyte(status)); + measureUnitValue = MeasureUnit::getGigabyte(); + measureUnit.adoptInstead(MeasureUnit::createKilobit(status)); + measureUnitValue = MeasureUnit::getKilobit(); + measureUnit.adoptInstead(MeasureUnit::createKilobyte(status)); + measureUnitValue = MeasureUnit::getKilobyte(); + measureUnit.adoptInstead(MeasureUnit::createMegabit(status)); + measureUnitValue = MeasureUnit::getMegabit(); + measureUnit.adoptInstead(MeasureUnit::createMegabyte(status)); + measureUnitValue = MeasureUnit::getMegabyte(); + measureUnit.adoptInstead(MeasureUnit::createPetabyte(status)); + measureUnitValue = MeasureUnit::getPetabyte(); + measureUnit.adoptInstead(MeasureUnit::createTerabit(status)); + measureUnitValue = MeasureUnit::getTerabit(); + measureUnit.adoptInstead(MeasureUnit::createTerabyte(status)); + measureUnitValue = MeasureUnit::getTerabyte(); + measureUnit.adoptInstead(MeasureUnit::createCentury(status)); + measureUnitValue = MeasureUnit::getCentury(); + measureUnit.adoptInstead(MeasureUnit::createDay(status)); + measureUnitValue = MeasureUnit::getDay(); + measureUnit.adoptInstead(MeasureUnit::createDayPerson(status)); + measureUnitValue = MeasureUnit::getDayPerson(); + measureUnit.adoptInstead(MeasureUnit::createDecade(status)); + measureUnitValue = MeasureUnit::getDecade(); + measureUnit.adoptInstead(MeasureUnit::createHour(status)); + measureUnitValue = MeasureUnit::getHour(); + measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status)); + measureUnitValue = MeasureUnit::getMicrosecond(); + measureUnit.adoptInstead(MeasureUnit::createMillisecond(status)); + measureUnitValue = MeasureUnit::getMillisecond(); + measureUnit.adoptInstead(MeasureUnit::createMinute(status)); + measureUnitValue = MeasureUnit::getMinute(); + measureUnit.adoptInstead(MeasureUnit::createMonth(status)); + measureUnitValue = MeasureUnit::getMonth(); + measureUnit.adoptInstead(MeasureUnit::createMonthPerson(status)); + measureUnitValue = MeasureUnit::getMonthPerson(); + measureUnit.adoptInstead(MeasureUnit::createNanosecond(status)); + measureUnitValue = MeasureUnit::getNanosecond(); + measureUnit.adoptInstead(MeasureUnit::createSecond(status)); + measureUnitValue = MeasureUnit::getSecond(); + measureUnit.adoptInstead(MeasureUnit::createWeek(status)); + measureUnitValue = MeasureUnit::getWeek(); + measureUnit.adoptInstead(MeasureUnit::createWeekPerson(status)); + measureUnitValue = MeasureUnit::getWeekPerson(); + measureUnit.adoptInstead(MeasureUnit::createYear(status)); + measureUnitValue = MeasureUnit::getYear(); + measureUnit.adoptInstead(MeasureUnit::createYearPerson(status)); + measureUnitValue = MeasureUnit::getYearPerson(); + measureUnit.adoptInstead(MeasureUnit::createAmpere(status)); + measureUnitValue = MeasureUnit::getAmpere(); + measureUnit.adoptInstead(MeasureUnit::createMilliampere(status)); + measureUnitValue = MeasureUnit::getMilliampere(); + measureUnit.adoptInstead(MeasureUnit::createOhm(status)); + measureUnitValue = MeasureUnit::getOhm(); + measureUnit.adoptInstead(MeasureUnit::createVolt(status)); + measureUnitValue = MeasureUnit::getVolt(); + measureUnit.adoptInstead(MeasureUnit::createBritishThermalUnit(status)); + measureUnitValue = MeasureUnit::getBritishThermalUnit(); + measureUnit.adoptInstead(MeasureUnit::createCalorie(status)); + measureUnitValue = MeasureUnit::getCalorie(); + measureUnit.adoptInstead(MeasureUnit::createElectronvolt(status)); + measureUnitValue = MeasureUnit::getElectronvolt(); + measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status)); + measureUnitValue = MeasureUnit::getFoodcalorie(); + measureUnit.adoptInstead(MeasureUnit::createJoule(status)); + measureUnitValue = MeasureUnit::getJoule(); + measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status)); + measureUnitValue = MeasureUnit::getKilocalorie(); + measureUnit.adoptInstead(MeasureUnit::createKilojoule(status)); + measureUnitValue = MeasureUnit::getKilojoule(); + measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status)); + measureUnitValue = MeasureUnit::getKilowattHour(); + measureUnit.adoptInstead(MeasureUnit::createThermUs(status)); + measureUnitValue = MeasureUnit::getThermUs(); + measureUnit.adoptInstead(MeasureUnit::createKilowattHourPer100Kilometer(status)); + measureUnitValue = MeasureUnit::getKilowattHourPer100Kilometer(); + measureUnit.adoptInstead(MeasureUnit::createNewton(status)); + measureUnitValue = MeasureUnit::getNewton(); + measureUnit.adoptInstead(MeasureUnit::createPoundForce(status)); + measureUnitValue = MeasureUnit::getPoundForce(); + measureUnit.adoptInstead(MeasureUnit::createGigahertz(status)); + measureUnitValue = MeasureUnit::getGigahertz(); + measureUnit.adoptInstead(MeasureUnit::createHertz(status)); + measureUnitValue = MeasureUnit::getHertz(); + measureUnit.adoptInstead(MeasureUnit::createKilohertz(status)); + measureUnitValue = MeasureUnit::getKilohertz(); + measureUnit.adoptInstead(MeasureUnit::createMegahertz(status)); + measureUnitValue = MeasureUnit::getMegahertz(); + measureUnit.adoptInstead(MeasureUnit::createDot(status)); + measureUnitValue = MeasureUnit::getDot(); + measureUnit.adoptInstead(MeasureUnit::createDotPerCentimeter(status)); + measureUnitValue = MeasureUnit::getDotPerCentimeter(); + measureUnit.adoptInstead(MeasureUnit::createDotPerInch(status)); + measureUnitValue = MeasureUnit::getDotPerInch(); + measureUnit.adoptInstead(MeasureUnit::createEm(status)); + measureUnitValue = MeasureUnit::getEm(); + measureUnit.adoptInstead(MeasureUnit::createMegapixel(status)); + measureUnitValue = MeasureUnit::getMegapixel(); + measureUnit.adoptInstead(MeasureUnit::createPixel(status)); + measureUnitValue = MeasureUnit::getPixel(); + measureUnit.adoptInstead(MeasureUnit::createPixelPerCentimeter(status)); + measureUnitValue = MeasureUnit::getPixelPerCentimeter(); + measureUnit.adoptInstead(MeasureUnit::createPixelPerInch(status)); + measureUnitValue = MeasureUnit::getPixelPerInch(); + measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status)); + measureUnitValue = MeasureUnit::getAstronomicalUnit(); + measureUnit.adoptInstead(MeasureUnit::createCentimeter(status)); + measureUnitValue = MeasureUnit::getCentimeter(); + measureUnit.adoptInstead(MeasureUnit::createDecimeter(status)); + measureUnitValue = MeasureUnit::getDecimeter(); + measureUnit.adoptInstead(MeasureUnit::createEarthRadius(status)); + measureUnitValue = MeasureUnit::getEarthRadius(); + measureUnit.adoptInstead(MeasureUnit::createFathom(status)); + measureUnitValue = MeasureUnit::getFathom(); + measureUnit.adoptInstead(MeasureUnit::createFoot(status)); + measureUnitValue = MeasureUnit::getFoot(); + measureUnit.adoptInstead(MeasureUnit::createFurlong(status)); + measureUnitValue = MeasureUnit::getFurlong(); + measureUnit.adoptInstead(MeasureUnit::createInch(status)); + measureUnitValue = MeasureUnit::getInch(); + measureUnit.adoptInstead(MeasureUnit::createKilometer(status)); + measureUnitValue = MeasureUnit::getKilometer(); + measureUnit.adoptInstead(MeasureUnit::createLightYear(status)); + measureUnitValue = MeasureUnit::getLightYear(); + measureUnit.adoptInstead(MeasureUnit::createMeter(status)); + measureUnitValue = MeasureUnit::getMeter(); + measureUnit.adoptInstead(MeasureUnit::createMicrometer(status)); + measureUnitValue = MeasureUnit::getMicrometer(); + measureUnit.adoptInstead(MeasureUnit::createMile(status)); + measureUnitValue = MeasureUnit::getMile(); + measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status)); + measureUnitValue = MeasureUnit::getMileScandinavian(); + measureUnit.adoptInstead(MeasureUnit::createMillimeter(status)); + measureUnitValue = MeasureUnit::getMillimeter(); + measureUnit.adoptInstead(MeasureUnit::createNanometer(status)); + measureUnitValue = MeasureUnit::getNanometer(); + measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status)); + measureUnitValue = MeasureUnit::getNauticalMile(); + measureUnit.adoptInstead(MeasureUnit::createParsec(status)); + measureUnitValue = MeasureUnit::getParsec(); + measureUnit.adoptInstead(MeasureUnit::createPicometer(status)); + measureUnitValue = MeasureUnit::getPicometer(); + measureUnit.adoptInstead(MeasureUnit::createPoint(status)); + measureUnitValue = MeasureUnit::getPoint(); + measureUnit.adoptInstead(MeasureUnit::createSolarRadius(status)); + measureUnitValue = MeasureUnit::getSolarRadius(); + measureUnit.adoptInstead(MeasureUnit::createYard(status)); + measureUnitValue = MeasureUnit::getYard(); + measureUnit.adoptInstead(MeasureUnit::createCandela(status)); + measureUnitValue = MeasureUnit::getCandela(); + measureUnit.adoptInstead(MeasureUnit::createLumen(status)); + measureUnitValue = MeasureUnit::getLumen(); + measureUnit.adoptInstead(MeasureUnit::createLux(status)); + measureUnitValue = MeasureUnit::getLux(); + measureUnit.adoptInstead(MeasureUnit::createSolarLuminosity(status)); + measureUnitValue = MeasureUnit::getSolarLuminosity(); + measureUnit.adoptInstead(MeasureUnit::createCarat(status)); + measureUnitValue = MeasureUnit::getCarat(); + measureUnit.adoptInstead(MeasureUnit::createDalton(status)); + measureUnitValue = MeasureUnit::getDalton(); + measureUnit.adoptInstead(MeasureUnit::createEarthMass(status)); + measureUnitValue = MeasureUnit::getEarthMass(); + measureUnit.adoptInstead(MeasureUnit::createGrain(status)); + measureUnitValue = MeasureUnit::getGrain(); + measureUnit.adoptInstead(MeasureUnit::createGram(status)); + measureUnitValue = MeasureUnit::getGram(); + measureUnit.adoptInstead(MeasureUnit::createKilogram(status)); + measureUnitValue = MeasureUnit::getKilogram(); + measureUnit.adoptInstead(MeasureUnit::createMetricTon(status)); + measureUnitValue = MeasureUnit::getMetricTon(); + measureUnit.adoptInstead(MeasureUnit::createMicrogram(status)); + measureUnitValue = MeasureUnit::getMicrogram(); + measureUnit.adoptInstead(MeasureUnit::createMilligram(status)); + measureUnitValue = MeasureUnit::getMilligram(); + measureUnit.adoptInstead(MeasureUnit::createOunce(status)); + measureUnitValue = MeasureUnit::getOunce(); + measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status)); + measureUnitValue = MeasureUnit::getOunceTroy(); + measureUnit.adoptInstead(MeasureUnit::createPound(status)); + measureUnitValue = MeasureUnit::getPound(); + measureUnit.adoptInstead(MeasureUnit::createSolarMass(status)); + measureUnitValue = MeasureUnit::getSolarMass(); + measureUnit.adoptInstead(MeasureUnit::createStone(status)); + measureUnitValue = MeasureUnit::getStone(); + measureUnit.adoptInstead(MeasureUnit::createTon(status)); + measureUnitValue = MeasureUnit::getTon(); + measureUnit.adoptInstead(MeasureUnit::createGigawatt(status)); + measureUnitValue = MeasureUnit::getGigawatt(); + measureUnit.adoptInstead(MeasureUnit::createHorsepower(status)); + measureUnitValue = MeasureUnit::getHorsepower(); + measureUnit.adoptInstead(MeasureUnit::createKilowatt(status)); + measureUnitValue = MeasureUnit::getKilowatt(); + measureUnit.adoptInstead(MeasureUnit::createMegawatt(status)); + measureUnitValue = MeasureUnit::getMegawatt(); + measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status)); + measureUnitValue = MeasureUnit::getMilliwatt(); + measureUnit.adoptInstead(MeasureUnit::createWatt(status)); + measureUnitValue = MeasureUnit::getWatt(); + measureUnit.adoptInstead(MeasureUnit::createAtmosphere(status)); + measureUnitValue = MeasureUnit::getAtmosphere(); + measureUnit.adoptInstead(MeasureUnit::createBar(status)); + measureUnitValue = MeasureUnit::getBar(); + measureUnit.adoptInstead(MeasureUnit::createHectopascal(status)); + measureUnitValue = MeasureUnit::getHectopascal(); + measureUnit.adoptInstead(MeasureUnit::createInchHg(status)); + measureUnitValue = MeasureUnit::getInchHg(); + measureUnit.adoptInstead(MeasureUnit::createKilopascal(status)); + measureUnitValue = MeasureUnit::getKilopascal(); + measureUnit.adoptInstead(MeasureUnit::createMegapascal(status)); + measureUnitValue = MeasureUnit::getMegapascal(); + measureUnit.adoptInstead(MeasureUnit::createMillibar(status)); + measureUnitValue = MeasureUnit::getMillibar(); + measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status)); + measureUnitValue = MeasureUnit::getMillimeterOfMercury(); + measureUnit.adoptInstead(MeasureUnit::createPascal(status)); + measureUnitValue = MeasureUnit::getPascal(); + measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status)); + measureUnitValue = MeasureUnit::getPoundPerSquareInch(); + measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status)); + measureUnitValue = MeasureUnit::getKilometerPerHour(); + measureUnit.adoptInstead(MeasureUnit::createKnot(status)); + measureUnitValue = MeasureUnit::getKnot(); + measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status)); + measureUnitValue = MeasureUnit::getMeterPerSecond(); + measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status)); + measureUnitValue = MeasureUnit::getMilePerHour(); + measureUnit.adoptInstead(MeasureUnit::createCelsius(status)); + measureUnitValue = MeasureUnit::getCelsius(); + measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status)); + measureUnitValue = MeasureUnit::getFahrenheit(); + measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status)); + measureUnitValue = MeasureUnit::getGenericTemperature(); + measureUnit.adoptInstead(MeasureUnit::createKelvin(status)); + measureUnitValue = MeasureUnit::getKelvin(); + measureUnit.adoptInstead(MeasureUnit::createNewtonMeter(status)); + measureUnitValue = MeasureUnit::getNewtonMeter(); + measureUnit.adoptInstead(MeasureUnit::createPoundFoot(status)); + measureUnitValue = MeasureUnit::getPoundFoot(); + measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status)); + measureUnitValue = MeasureUnit::getAcreFoot(); + measureUnit.adoptInstead(MeasureUnit::createBarrel(status)); + measureUnitValue = MeasureUnit::getBarrel(); + measureUnit.adoptInstead(MeasureUnit::createBushel(status)); + measureUnitValue = MeasureUnit::getBushel(); + measureUnit.adoptInstead(MeasureUnit::createCentiliter(status)); + measureUnitValue = MeasureUnit::getCentiliter(); + measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status)); + measureUnitValue = MeasureUnit::getCubicCentimeter(); + measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status)); + measureUnitValue = MeasureUnit::getCubicFoot(); + measureUnit.adoptInstead(MeasureUnit::createCubicInch(status)); + measureUnitValue = MeasureUnit::getCubicInch(); + measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status)); + measureUnitValue = MeasureUnit::getCubicKilometer(); + measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status)); + measureUnitValue = MeasureUnit::getCubicMeter(); + measureUnit.adoptInstead(MeasureUnit::createCubicMile(status)); + measureUnitValue = MeasureUnit::getCubicMile(); + measureUnit.adoptInstead(MeasureUnit::createCubicYard(status)); + measureUnitValue = MeasureUnit::getCubicYard(); + measureUnit.adoptInstead(MeasureUnit::createCup(status)); + measureUnitValue = MeasureUnit::getCup(); + measureUnit.adoptInstead(MeasureUnit::createCupMetric(status)); + measureUnitValue = MeasureUnit::getCupMetric(); + measureUnit.adoptInstead(MeasureUnit::createDeciliter(status)); + measureUnitValue = MeasureUnit::getDeciliter(); + measureUnit.adoptInstead(MeasureUnit::createDessertSpoon(status)); + measureUnitValue = MeasureUnit::getDessertSpoon(); + measureUnit.adoptInstead(MeasureUnit::createDessertSpoonImperial(status)); + measureUnitValue = MeasureUnit::getDessertSpoonImperial(); + measureUnit.adoptInstead(MeasureUnit::createDram(status)); + measureUnitValue = MeasureUnit::getDram(); + measureUnit.adoptInstead(MeasureUnit::createDrop(status)); + measureUnitValue = MeasureUnit::getDrop(); + measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status)); + measureUnitValue = MeasureUnit::getFluidOunce(); + measureUnit.adoptInstead(MeasureUnit::createFluidOunceImperial(status)); + measureUnitValue = MeasureUnit::getFluidOunceImperial(); + measureUnit.adoptInstead(MeasureUnit::createGallon(status)); + measureUnitValue = MeasureUnit::getGallon(); + measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status)); + measureUnitValue = MeasureUnit::getGallonImperial(); + measureUnit.adoptInstead(MeasureUnit::createHectoliter(status)); + measureUnitValue = MeasureUnit::getHectoliter(); + measureUnit.adoptInstead(MeasureUnit::createJigger(status)); + measureUnitValue = MeasureUnit::getJigger(); + measureUnit.adoptInstead(MeasureUnit::createLiter(status)); + measureUnitValue = MeasureUnit::getLiter(); + measureUnit.adoptInstead(MeasureUnit::createMegaliter(status)); + measureUnitValue = MeasureUnit::getMegaliter(); + measureUnit.adoptInstead(MeasureUnit::createMilliliter(status)); + measureUnitValue = MeasureUnit::getMilliliter(); + measureUnit.adoptInstead(MeasureUnit::createPinch(status)); + measureUnitValue = MeasureUnit::getPinch(); + measureUnit.adoptInstead(MeasureUnit::createPint(status)); + measureUnitValue = MeasureUnit::getPint(); + measureUnit.adoptInstead(MeasureUnit::createPintMetric(status)); + measureUnitValue = MeasureUnit::getPintMetric(); + measureUnit.adoptInstead(MeasureUnit::createQuart(status)); + measureUnitValue = MeasureUnit::getQuart(); + measureUnit.adoptInstead(MeasureUnit::createQuartImperial(status)); + measureUnitValue = MeasureUnit::getQuartImperial(); + measureUnit.adoptInstead(MeasureUnit::createTablespoon(status)); + measureUnitValue = MeasureUnit::getTablespoon(); + measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status)); + measureUnitValue = MeasureUnit::getTeaspoon(); + assertSuccess("", status); +} + void MeasureFormatTest::TestBasic() { UErrorCode status = U_ZERO_ERROR; MeasureUnit *ptr1 = MeasureUnit::createArcMinute(status); diff --git a/icu4c/source/test/intltest/numbertest_api.cpp b/icu4c/source/test/intltest/numbertest_api.cpp index eedf4524dfe..cfd25d00959 100644 --- a/icu4c/source/test/intltest/numbertest_api.cpp +++ b/icu4c/source/test/intltest/numbertest_api.cpp @@ -1239,12 +1239,18 @@ void NumberFormatterApiTest::unitArbitraryMeasureUnits() { // TODO(ICU-21504): We want to be able to format this, but "100-kilometer" // is not yet supported when it's not part of liter-per-100-kilometer: - lnf = NumberFormatter::with() - .unit(MeasureUnit::forIdentifier("kilowatt-hour-per-100-kilometer", status)) - .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME) - .locale("en-ZA"); - lnf.formatInt(1, status); - status.expectErrorAndReset(U_UNSUPPORTED_ERROR); + // Actually now in CLDR 40 this is supported directly in data, so change test. + assertFormatSingle( + u"kilowatt-hour-per-100-kilometer unit-width-full-name", + u"unit/kilowatt-hour-per-100-kilometer unit-width-full-name", + u"unit/kilowatt-hour-per-100-kilometer unit-width-full-name", + NumberFormatter::with() + .unit(MeasureUnit::forIdentifier("kilowatt-hour-per-100-kilometer", + status)) + .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME), + Locale("en-ZA"), + 2.4, + u"2,4 kilowatt-hours per 100 kilometers"); } // TODO: merge these tests into numbertest_skeletons.cpp instead of here: diff --git a/icu4c/source/test/testdata/root.txt b/icu4c/source/test/testdata/root.txt index 93afadcb716..2d6fcb7f8f3 100644 --- a/icu4c/source/test/testdata/root.txt +++ b/icu4c/source/test/testdata/root.txt @@ -13,8 +13,8 @@ root { Version { 44.0 } - ExpectCLDRVersionAtLeast { 39.0 } // 'base' cldr version. Allow up to version =.=.* of this - CurrentCLDRVersion { 39.0 } // Current CLDR version as of the test update. Warn if not an exact match. + ExpectCLDRVersionAtLeast { 40.0 } // 'base' cldr version. Allow up to version =.=.* of this + CurrentCLDRVersion { 40.0 } // Current CLDR version as of the test update. Warn if not an exact match. ShortLanguage { xxx } diff --git a/icu4c/source/test/testdata/structLocale.txt b/icu4c/source/test/testdata/structLocale.txt index 14f8e68759d..5c81e17ec3b 100644 --- a/icu4c/source/test/testdata/structLocale.txt +++ b/icu4c/source/test/testdata/structLocale.txt @@ -21697,6 +21697,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "", + "", + "", + "", + } eras{ abbreviated{ "", @@ -21812,20 +21822,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -21925,6 +21939,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } cyclicNameSets{ dayParts{ format{ @@ -22775,20 +22799,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -22995,6 +23023,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } availableFormats{ HHmm{""} HHmmss{""} @@ -23128,20 +23166,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -23339,6 +23381,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } cyclicNameSets{ dayParts{ format{ @@ -24189,20 +24241,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -24414,6 +24470,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } availableFormats{ HHmm{""} HHmmss{""} @@ -24547,20 +24613,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -24862,20 +24932,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -25062,6 +25136,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } appendItems{ Day{"{0} ({2}: {1})"} Day-Of-Week{"{0} {1}"} @@ -25228,20 +25312,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -25342,6 +25430,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } NoonMarker{""} NoonMarkerAbbr{""} NoonMarkerNarrow{""} @@ -25694,20 +25792,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -25933,6 +26035,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } availableFormats{ HHmm{""} HHmmss{""} @@ -26063,20 +26175,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -26281,6 +26397,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "", + "", + "", + "", + } eras{ abbreviated{ "", @@ -26396,20 +26522,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -26606,6 +26736,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "", + "", + "", + "", + } eras{ abbreviated{ "", @@ -26721,20 +26861,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -26931,6 +27075,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "", + "", + "", + "", + } eras{ abbreviated{ "", @@ -27046,20 +27200,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -27253,6 +27411,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "A2", + "A2", + "A2", + "A2", + } eras{ abbreviated{ "", @@ -28076,20 +28244,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } @@ -28193,6 +28365,16 @@ structLocale:table(nofallback){ "A4", "A4", } + DateTimeSkeletons{ + "", + "", + "", + "", + "", + "", + "", + "", + } eras{ abbreviated{ "", @@ -28311,20 +28493,24 @@ structLocale:table(nofallback){ } fallback{""} h{ + B{""} a{""} h{""} } hm{ + B{""} a{""} h{""} m{""} } hmv{ + B{""} a{""} h{""} m{""} } hv{ + B{""} a{""} h{""} } diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java b/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java index 425619cbb08..0d48d63a0f6 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java @@ -993,6 +993,12 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit SQUARE_YARD = MeasureUnit.internalGetInstance("area", "square-yard"); + /** + * Constant for unit of concentr: item + * @draft ICU 70 + */ + public static final MeasureUnit ITEM = MeasureUnit.internalGetInstance("concentr", "item"); + /** * Constant for unit of concentr: karat * @stable ICU 54 @@ -1311,6 +1317,12 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit THERM_US = MeasureUnit.internalGetInstance("energy", "therm-us"); + /** + * Constant for unit of force: kilowatt-hour-per-100-kilometer + * @draft ICU 70 + */ + public static final MeasureUnit KILOWATT_HOUR_PER_100_KILOMETER = MeasureUnit.internalGetInstance("force", "kilowatt-hour-per-100-kilometer"); + /** * Constant for unit of force: newton * @stable ICU 64 diff --git a/icu4j/main/shared/data/icudata.jar b/icu4j/main/shared/data/icudata.jar index 59e4c08acda..76d5ae74997 100644 --- a/icu4j/main/shared/data/icudata.jar +++ b/icu4j/main/shared/data/icudata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6204593a97c614d968ee1c9411e3b7bc5c4b6712a300d55f2974fe9f6552d2c -size 13383699 +oid sha256:35c8e1e35221f87fee045f769bd846b57e31ebe1d48f6f0964d769a5b697f509 +size 13397003 diff --git a/icu4j/main/shared/data/icutzdata.jar b/icu4j/main/shared/data/icutzdata.jar index 18bde5b124c..2a5e6009568 100644 --- a/icu4j/main/shared/data/icutzdata.jar +++ b/icu4j/main/shared/data/icutzdata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0c62aeba1f0608064e1253a6fc6d55e539c8e536bc45ad1e557afa6a56e3341 -size 95105 +oid sha256:7258631a610fb4a12666fbd09a4a9bb4c783800f9604266764c2cee822a7a41b +size 95038 diff --git a/icu4j/main/shared/data/testdata.jar b/icu4j/main/shared/data/testdata.jar index ed97c19d6e6..d466dea41ce 100644 --- a/icu4j/main/shared/data/testdata.jar +++ b/icu4j/main/shared/data/testdata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acb188c16c4dca34db02d99059736ca963c084488d26972399292ebb86d657c5 -size 828801 +oid sha256:683ebb9e63f015d512635c6fb7ea1eed95e2fa68b8e099fdd9c603c71ff1bdeb +size 825842 diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java index 1e2d55d2ae0..6a714048811 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java @@ -648,7 +648,7 @@ public class CompactDecimalFormatTest extends TestFmwk { @Test public void TestLocaleGroupingForLargeNumbers() { ULocale[] locs = {new ULocale("en"), new ULocale("it"), new ULocale("en_US_POSIX"), new ULocale("en-IN")}; - String[] expecteds = {"5,800,000T", "5.800.000 Bln", "5800000T", "58,00,000T"}; + String[] expecteds = {"5,800,000T", "5.800.000 Bln", "5800000T", "58,00,000LCr"}; for (int i=0; i expectedFields = getFields(formatted); formatted = roc.formatToValue(beforeAfterMG); assertEquals("roc calendar - prior MG Era and in MG Era", - "民國前1年1月2日 6 上午 – 民國2年1月2日 6 上午", + "民國前1年1月2日 上午6時 – 民國2年1月2日 上午6時", formatted.toString()); verifyFields(formatted, expectedFields); formatted = roc.formatToValue(bothBeforeMG); assertEquals("roc calendar - both dates prior MG Era", - "民國前2/1/2 6 上午 – 民國前1/1/2 6 上午", + "民國前2/1/2 上午6時 – 民國前1/1/2 上午6時", formatted.toString()); verifyFields(formatted, expectedFields); } @@ -2450,7 +2450,7 @@ public class DateIntervalFormatTest extends TestFmwk { formatted = japanese.formatToValue(beforeAfterReiwa); assertEquals("japanese calendar - date before and in Reiwa", - "平成31年3月2日 午前6時~令和元年5月4日 午前6時", + "H31/3/2 午前6時~R1/5/4 午前6時", formatted.toString()); verifyFields(formatted, expectedFields); } diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java index ff462c74cc8..51c465dca3f 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateTimeGeneratorTest.java @@ -59,12 +59,12 @@ public class DateTimeGeneratorTest extends TestFmwk { public void TestC() { String[][] tests = { // These may change with actual data for Bhmm/bhmm skeletons - {"zh", "Cm", "Bh:mm"}, - {"zh", "CCm", "Bhh:mm"}, - {"zh", "CCCm", "BBBBh:mm"}, - {"zh", "CCCCm", "BBBBhh:mm"}, - {"zh", "CCCCCm", "BBBBBh:mm"}, - {"zh", "CCCCCCm", "BBBBBhh:mm"}, + {"zh-TW", "Cm", "Bh:mm"}, + {"zh-TW", "CCm", "Bhh:mm"}, + {"zh-TW", "CCCm", "BBBBh:mm"}, + {"zh-TW", "CCCCm", "BBBBhh:mm"}, + {"zh-TW", "CCCCCm", "BBBBBh:mm"}, + {"zh-TW", "CCCCCCm", "BBBBBhh:mm"}, {"de", "Cm", "HH:mm"}, {"de", "CCm", "HH:mm"}, {"de", "CCCm", "HH:mm"}, @@ -512,13 +512,13 @@ public class DateTimeGeneratorTest extends TestFmwk { new String[] {"yQQQ", "1999\u5E74\u7B2C1\u5B63\u5EA6"}, new String[] {"hhmm", "\u4E0B\u534811:58"}, new String[] {"HHmm", "23:58"}, - new String[] {"jjmm", "\u4E0B\u534811:58"}, + new String[] {"jjmm", "23:58"}, new String[] {"mmss", "58:59"}, new String[] {"yyyyMMMM", "1999\u5E741\u6708"}, // (new item for testing 6872<-5702) new String[] {"MMMEd", "1\u670813\u65E5\u5468\u4E09"}, new String[] {"Ed", "13\u65E5\u5468\u4E09"}, - new String[] {"jmmssSSS", "\u4E0B\u534811:58:59.123"}, - new String[] {"JJmm", "11:58"}, + new String[] {"jmmssSSS", "23:58:59.123"}, + new String[] {"JJmm", "23:58"}, new ULocale("zh_TW@calendar=roc"), // (new locale for testing ticket 6872<-5702) new String[] {"yM", "\u6C11\u570B88/1"}, @@ -569,13 +569,13 @@ public class DateTimeGeneratorTest extends TestFmwk { new String[] {"yQQQ", "1998\u620A\u5BC5\u5E74\u7B2C\u56DB\u5B63\u5EA6"}, new String[] {"hhmm", "\u4E0B\u534811:58"}, new String[] {"HHmm", "23:58"}, - new String[] {"jjmm", "\u4E0B\u534811:58"}, + new String[] {"jjmm", "23:58"}, new String[] {"mmss", "58:59"}, new String[] {"yyyyMMMM", "1998\u620A\u5BC5\u5E74\u5341\u4E00\u6708"}, new String[] {"MMMEd", "\u5341\u4E00\u670826\u65E5\u5468\u4E09"}, new String[] {"Ed", "26\u65E5\u5468\u4E09"}, - new String[] {"jmmssSSS", "\u4E0B\u534811:58:59.123"}, - new String[] {"JJmm", "11:58"}, + new String[] {"jmmssSSS", "23:58:59.123"}, + new String[] {"JJmm", "23:58"}, new ULocale("ja_JP_TRADITIONAL"), // TODO: This is different in C++ and Java. @@ -1407,8 +1407,8 @@ public class DateTimeGeneratorTest extends TestFmwk { new TestOptionsItem( "en@calendar=chinese", "Gy", "r(U)", DateTimePatternGenerator.MATCH_NO_OPTIONS ), new TestOptionsItem( "en@calendar=chinese", "GU", "r(U)", DateTimePatternGenerator.MATCH_NO_OPTIONS ), new TestOptionsItem( "en@calendar=chinese", "ULLL", "MMM U", DateTimePatternGenerator.MATCH_NO_OPTIONS ), - new TestOptionsItem( "en@calendar=chinese", "yMMM", "MMM r(U)", DateTimePatternGenerator.MATCH_NO_OPTIONS ), - new TestOptionsItem( "en@calendar=chinese", "GUMMM", "MMM r(U)", DateTimePatternGenerator.MATCH_NO_OPTIONS ), + new TestOptionsItem( "en@calendar=chinese", "yMMM", "MMM r", DateTimePatternGenerator.MATCH_NO_OPTIONS ), + new TestOptionsItem( "en@calendar=chinese", "GUMMM", "MMM r", DateTimePatternGenerator.MATCH_NO_OPTIONS ), new TestOptionsItem( "zh@calendar=chinese", "yyyy", "rU\u5E74", DateTimePatternGenerator.MATCH_NO_OPTIONS ), new TestOptionsItem( "zh@calendar=chinese", "YYYY", "YY\u5E74", DateTimePatternGenerator.MATCH_NO_OPTIONS ), // not a good result, want r(Y) or r(U) new TestOptionsItem( "zh@calendar=chinese", "U", "rU\u5E74", DateTimePatternGenerator.MATCH_NO_OPTIONS ), diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java index d0d2b509337..95e5414e936 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java @@ -277,6 +277,8 @@ public class MeasureUnitTest extends TestFmwk { {"PINCH", "68"}, {"QUART_IMPERIAL", "68"}, {"MILLIGRAM_OFGLUCOSE_PER_DECILITER", "69"}, + {"ITEM", "70"}, + {"KILOWATT_HOUR_PER_100_KILOMETER", "70"}, }; private static final HashMap JAVA_VERSION_MAP = new HashMap<>(); @@ -320,12 +322,12 @@ public class MeasureUnitTest extends TestFmwk { // various generateXXX calls go here, see // docs/processes/release/tasks/updating-measure-unit.md // use this test to run each of the ollowing in succession - //generateConstants("69"); // for MeasureUnit.java, update generated MeasureUnit constants - //generateBackwardCompatibilityTest("69"); // for MeasureUnitTest.java, create TestCompatible69 - //generateCXXHConstants("69"); // for measunit.h, update generated createXXX methods + //generateConstants("70"); // for MeasureUnit.java, update generated MeasureUnit constants + //generateBackwardCompatibilityTest("70"); // for MeasureUnitTest.java, create TestCompatible70 + //generateCXXHConstants("70"); // for measunit.h, update generated createXXX methods //generateCXXConstants(); // for measunit.cpp, update generated code - //generateCXXBackwardCompatibilityTest("69"); // for measfmttest.cpp, create TestCompatible69 - //updateJAVAVersions("69"); // for MeasureUnitTest.java, JAVA_VERSIONS + //generateCXXBackwardCompatibilityTest("70"); // for measfmttest.cpp, create TestCompatible70 + //updateJAVAVersions("70"); // for MeasureUnitTest.java, JAVA_VERSIONS } @Test @@ -2081,6 +2083,200 @@ public class MeasureUnitTest extends TestFmwk { assertEquals("", 185, units.length); } + @Test + public void TestCompatible70() { + MeasureUnit[] units = { + MeasureUnit.G_FORCE, + MeasureUnit.METER_PER_SECOND_SQUARED, + MeasureUnit.ARC_MINUTE, + MeasureUnit.ARC_SECOND, + MeasureUnit.DEGREE, + MeasureUnit.RADIAN, + MeasureUnit.REVOLUTION_ANGLE, + MeasureUnit.ACRE, + MeasureUnit.DUNAM, + MeasureUnit.HECTARE, + MeasureUnit.SQUARE_CENTIMETER, + MeasureUnit.SQUARE_FOOT, + MeasureUnit.SQUARE_INCH, + MeasureUnit.SQUARE_KILOMETER, + MeasureUnit.SQUARE_METER, + MeasureUnit.SQUARE_MILE, + MeasureUnit.SQUARE_YARD, + MeasureUnit.ITEM, + MeasureUnit.KARAT, + MeasureUnit.MILLIGRAM_OFGLUCOSE_PER_DECILITER, + MeasureUnit.MILLIGRAM_PER_DECILITER, + MeasureUnit.MILLIMOLE_PER_LITER, + MeasureUnit.MOLE, + MeasureUnit.PERCENT, + MeasureUnit.PERMILLE, + MeasureUnit.PART_PER_MILLION, + MeasureUnit.PERMYRIAD, + MeasureUnit.LITER_PER_100KILOMETERS, + MeasureUnit.LITER_PER_KILOMETER, + MeasureUnit.MILE_PER_GALLON, + MeasureUnit.MILE_PER_GALLON_IMPERIAL, + MeasureUnit.BIT, + MeasureUnit.BYTE, + MeasureUnit.GIGABIT, + MeasureUnit.GIGABYTE, + MeasureUnit.KILOBIT, + MeasureUnit.KILOBYTE, + MeasureUnit.MEGABIT, + MeasureUnit.MEGABYTE, + MeasureUnit.PETABYTE, + MeasureUnit.TERABIT, + MeasureUnit.TERABYTE, + MeasureUnit.CENTURY, + MeasureUnit.DAY, + MeasureUnit.DAY_PERSON, + MeasureUnit.DECADE, + MeasureUnit.HOUR, + MeasureUnit.MICROSECOND, + MeasureUnit.MILLISECOND, + MeasureUnit.MINUTE, + MeasureUnit.MONTH, + MeasureUnit.MONTH_PERSON, + MeasureUnit.NANOSECOND, + MeasureUnit.SECOND, + MeasureUnit.WEEK, + MeasureUnit.WEEK_PERSON, + MeasureUnit.YEAR, + MeasureUnit.YEAR_PERSON, + MeasureUnit.AMPERE, + MeasureUnit.MILLIAMPERE, + MeasureUnit.OHM, + MeasureUnit.VOLT, + MeasureUnit.BRITISH_THERMAL_UNIT, + MeasureUnit.CALORIE, + MeasureUnit.ELECTRONVOLT, + MeasureUnit.FOODCALORIE, + MeasureUnit.JOULE, + MeasureUnit.KILOCALORIE, + MeasureUnit.KILOJOULE, + MeasureUnit.KILOWATT_HOUR, + MeasureUnit.THERM_US, + MeasureUnit.KILOWATT_HOUR_PER_100_KILOMETER, + MeasureUnit.NEWTON, + MeasureUnit.POUND_FORCE, + MeasureUnit.GIGAHERTZ, + MeasureUnit.HERTZ, + MeasureUnit.KILOHERTZ, + MeasureUnit.MEGAHERTZ, + MeasureUnit.DOT, + MeasureUnit.DOT_PER_CENTIMETER, + MeasureUnit.DOT_PER_INCH, + MeasureUnit.EM, + MeasureUnit.MEGAPIXEL, + MeasureUnit.PIXEL, + MeasureUnit.PIXEL_PER_CENTIMETER, + MeasureUnit.PIXEL_PER_INCH, + MeasureUnit.ASTRONOMICAL_UNIT, + MeasureUnit.CENTIMETER, + MeasureUnit.DECIMETER, + MeasureUnit.EARTH_RADIUS, + MeasureUnit.FATHOM, + MeasureUnit.FOOT, + MeasureUnit.FURLONG, + MeasureUnit.INCH, + MeasureUnit.KILOMETER, + MeasureUnit.LIGHT_YEAR, + MeasureUnit.METER, + MeasureUnit.MICROMETER, + MeasureUnit.MILE, + MeasureUnit.MILE_SCANDINAVIAN, + MeasureUnit.MILLIMETER, + MeasureUnit.NANOMETER, + MeasureUnit.NAUTICAL_MILE, + MeasureUnit.PARSEC, + MeasureUnit.PICOMETER, + MeasureUnit.POINT, + MeasureUnit.SOLAR_RADIUS, + MeasureUnit.YARD, + MeasureUnit.CANDELA, + MeasureUnit.LUMEN, + MeasureUnit.LUX, + MeasureUnit.SOLAR_LUMINOSITY, + MeasureUnit.CARAT, + MeasureUnit.DALTON, + MeasureUnit.EARTH_MASS, + MeasureUnit.GRAIN, + MeasureUnit.GRAM, + MeasureUnit.KILOGRAM, + MeasureUnit.METRIC_TON, + MeasureUnit.MICROGRAM, + MeasureUnit.MILLIGRAM, + MeasureUnit.OUNCE, + MeasureUnit.OUNCE_TROY, + MeasureUnit.POUND, + MeasureUnit.SOLAR_MASS, + MeasureUnit.STONE, + MeasureUnit.TON, + MeasureUnit.GIGAWATT, + MeasureUnit.HORSEPOWER, + MeasureUnit.KILOWATT, + MeasureUnit.MEGAWATT, + MeasureUnit.MILLIWATT, + MeasureUnit.WATT, + MeasureUnit.ATMOSPHERE, + MeasureUnit.BAR, + MeasureUnit.HECTOPASCAL, + MeasureUnit.INCH_HG, + MeasureUnit.KILOPASCAL, + MeasureUnit.MEGAPASCAL, + MeasureUnit.MILLIBAR, + MeasureUnit.MILLIMETER_OF_MERCURY, + MeasureUnit.PASCAL, + MeasureUnit.POUND_PER_SQUARE_INCH, + MeasureUnit.KILOMETER_PER_HOUR, + MeasureUnit.KNOT, + MeasureUnit.METER_PER_SECOND, + MeasureUnit.MILE_PER_HOUR, + MeasureUnit.CELSIUS, + MeasureUnit.FAHRENHEIT, + MeasureUnit.GENERIC_TEMPERATURE, + MeasureUnit.KELVIN, + MeasureUnit.NEWTON_METER, + MeasureUnit.POUND_FOOT, + MeasureUnit.ACRE_FOOT, + MeasureUnit.BARREL, + MeasureUnit.BUSHEL, + MeasureUnit.CENTILITER, + MeasureUnit.CUBIC_CENTIMETER, + MeasureUnit.CUBIC_FOOT, + MeasureUnit.CUBIC_INCH, + MeasureUnit.CUBIC_KILOMETER, + MeasureUnit.CUBIC_METER, + MeasureUnit.CUBIC_MILE, + MeasureUnit.CUBIC_YARD, + MeasureUnit.CUP, + MeasureUnit.CUP_METRIC, + MeasureUnit.DECILITER, + MeasureUnit.DESSERT_SPOON, + MeasureUnit.DESSERT_SPOON_IMPERIAL, + MeasureUnit.DRAM, + MeasureUnit.DROP, + MeasureUnit.FLUID_OUNCE, + MeasureUnit.FLUID_OUNCE_IMPERIAL, + MeasureUnit.GALLON, + MeasureUnit.GALLON_IMPERIAL, + MeasureUnit.HECTOLITER, + MeasureUnit.JIGGER, + MeasureUnit.LITER, + MeasureUnit.MEGALITER, + MeasureUnit.MILLILITER, + MeasureUnit.PINCH, + MeasureUnit.PINT, + MeasureUnit.PINT_METRIC, + MeasureUnit.QUART, + MeasureUnit.QUART_IMPERIAL, + MeasureUnit.TABLESPOON, + MeasureUnit.TEASPOON, + }; + assertEquals("", 187, units.length); + } + @Test public void TestExamplesInDocs() { MeasureFormat fmtFr = MeasureFormat.getInstance( diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberFormatterApiTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberFormatterApiTest.java index cb57092d31a..67e0a9bc4cf 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberFormatterApiTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberFormatterApiTest.java @@ -1158,16 +1158,15 @@ public class NumberFormatterApiTest extends TestFmwk { // TODO(ICU-21504): We want to be able to format this, but "100-kilometer" // is not yet supported when it's not part of liter-per-100-kilometer: - lnf = NumberFormatter.with() - .unit(MeasureUnit.forIdentifier("kilowatt-hour-per-100-kilometer")) - .unitWidth(UnitWidth.FULL_NAME) - .locale(new ULocale("en-ZA")); - try { - lnf.format(1); - fail("Expected failure for kilowatt-hour-per-100-kilometer, got: " + lnf.format(1) + "."); - } catch (UnsupportedOperationException e) { - // pass - } + // Actually now in CLDR 40 this is supported directly in data, so change test. + assertFormatSingle( + "kilowatt-hour-per-100-kilometer unit-width-full-name", + "unit/kilowatt-hour-per-100-kilometer unit-width-full-name", + "unit/kilowatt-hour-per-100-kilometer unit-width-full-name", + NumberFormatter.with() + .unit(MeasureUnit.forIdentifier("kilowatt-hour-per-100-kilometer")) + .unitWidth(UnitWidth.FULL_NAME), + new ULocale("en-ZA"), 2.4, "2,4 kilowatt-hours per 100 kilometers"); } // TODO: merge these tests into NumberSkeletonTest.java instead of here: diff --git a/tools/cldr/cldr-to-icu/build-icu-data.xml b/tools/cldr/cldr-to-icu/build-icu-data.xml index 115cb4b5be6..8200a7b22d6 100644 --- a/tools/cldr/cldr-to-icu/build-icu-data.xml +++ b/tools/cldr/cldr-to-icu/build-icu-data.xml @@ -399,6 +399,7 @@ + diff --git a/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_locale.txt b/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_locale.txt index a8afd6d5a5c..3f87f9023ff 100644 --- a/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_locale.txt +++ b/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_locale.txt @@ -165,6 +165,32 @@ # DateTime patterns (4 x values) //ldml/dates/calendars/calendar[@type="(%A)"]/(dateTimeFormat)s/\2Length[@type="(%A)"]/\2[@type="%A"]/pattern[@type="%A"] ; /calendar/$1/DateTimePatterns + +# ---- /calendar/xxx/DateTimeSkeletons +# This is similar to DateTimePatterns above except that for this we do not have the DateTime patterns (4 x values, plus the duplicate value at index 8). + +# Time patterns (4 x values) +//ldml/dates/calendars/calendar[@type="(%A)"]/(timeFormat)s/\2Length[@type="(%A)"]/\2[@type="%A"]/datetimeSkeleton + ; /calendar/$1/DateTimeSkeletons + +# Date patterns (4 x values) +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(full)"]/\2[@type="%A"]/datetimeSkeleton + ; /calendar/$1/DateTimeSkeletons +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(full)"]/\2[@type="%A"]/datetimeSkeleton[@numbers="(%A)"] + ; /calendar/$1/DateTimeSkeletons ; values="{value}" $4 ; group +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(long)"]/\2[@type="%A"]/datetimeSkeleton + ; /calendar/$1/DateTimeSkeletons +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(long)"]/\2[@type="%A"]/datetimeSkeleton[@numbers="(%A)"] + ; /calendar/$1/DateTimeSkeletons ; values="{value}" $4 ; group +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(medium)"]/\2[@type="%A"]/datetimeSkeleton + ; /calendar/$1/DateTimeSkeletons +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(medium)"]/\2[@type="%A"]/datetimeSkeleton[@numbers="(%A)"] + ; /calendar/$1/DateTimeSkeletons ; values="{value}" $4 ; group +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(short)"]/\2[@type="%A"]/datetimeSkeleton + ; /calendar/$1/DateTimeSkeletons +//ldml/dates/calendars/calendar[@type="(%A)"]/(dateFormat)s/\2Length[@type="(short)"]/\2[@type="%A"]/datetimeSkeleton[@numbers="(%A)"] + ; /calendar/$1/DateTimeSkeletons ; values="{value}" $4 ; group + # ---- //ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/appendItems/appendItem[@request="(%A)"] ; /calendar/$1/appendItems/$2