Skip to content

Commit b926f52

Browse files
FrankYFTangsffc
authored andcommitted
ICU-21550 Add zzzz to subdivision if len==2
See #1662
1 parent 866a640 commit b926f52

File tree

4 files changed

+40
-7
lines changed

4 files changed

+40
-7
lines changed

icu4c/source/common/locid.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,9 +1519,12 @@ AliasReplacer::replaceSubdivision(
15191519
// Found replacement data for this subdivision.
15201520
size_t len = (firstSpace != nullptr) ?
15211521
(firstSpace - replacement) : uprv_strlen(replacement);
1522-
// Ignore len == 2, see CLDR-14312
1523-
if (3 <= len && len <= 8) {
1522+
if (2 <= len && len <= 8) {
15241523
output.append(replacement, (int32_t)len, status);
1524+
if (2 == len) {
1525+
// Add 'zzzz' based on changes to UTS #35 for CLDR-14312.
1526+
output.append("zzzz", 4, status);
1527+
}
15251528
}
15261529
return true;
15271530
}

icu4c/source/test/intltest/loctest.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4938,6 +4938,21 @@ void LocaleTest::TestCanonicalize(void)
49384938
{ "und-FR-u-sd-frg", "und-FR-u-sd-frges"},
49394939
{ "und-LU-u-sd-lud", "und-LU-u-sd-lucl"},
49404940

4941+
// ICU-21550
4942+
{ "und-u-rg-fi01", "und-u-rg-axzzzz"},
4943+
{ "und-u-rg-frcp", "und-u-rg-cpzzzz"},
4944+
{ "und-u-rg-frpm", "und-u-rg-pmzzzz"},
4945+
{ "und-u-rg-usvi", "und-u-rg-vizzzz"},
4946+
{ "und-u-rg-cn91", "und-u-rg-hkzzzz"},
4947+
{ "und-u-rg-nlaw", "und-u-rg-awzzzz"},
4948+
4949+
{ "und-NO-u-sd-frre", "und-NO-u-sd-rezzzz"},
4950+
{ "und-CN-u-sd-nlcw", "und-CN-u-sd-cwzzzz"},
4951+
{ "und-CZ-u-sd-usgu", "und-CZ-u-sd-guzzzz"},
4952+
{ "und-FR-u-sd-shta", "und-FR-u-sd-tazzzz"},
4953+
{ "und-FR-u-sd-cn71", "und-FR-u-sd-twzzzz"},
4954+
4955+
49414956
// ICU-21401
49424957
{ "cel-gaulish", "xtg"},
49434958

icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,11 +1402,12 @@ private static synchronized void loadAliasData() {
14021402
throw new IllegalArgumentException(
14031403
"Incorrect key [" + aliasFrom + "] in alias:territory.");
14041404
}
1405-
if (aliasTo.length() < 3 || aliasTo.length() > 8) {
1406-
// Ignore replacement < 3 for now. see CLDR-14312
1407-
// throw new IllegalArgumentException(
1408-
// "Incorrect value [" + aliasTo + "] in alias:subdivision.");
1409-
continue;
1405+
if (aliasTo.length() == 2) {
1406+
// Add 'zzzz' based on changes to UTS #35 for CLDR-14312.
1407+
aliasTo += "zzzz";
1408+
} else if (aliasTo.length() < 2 || aliasTo.length() > 8) {
1409+
throw new IllegalArgumentException(
1410+
"Incorrect value [" + aliasTo + "] in alias:territory.");
14101411
}
14111412
subdivisionAliasMap.put(aliasFrom, aliasTo);
14121413
}

icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/ULocaleTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5250,6 +5250,20 @@ public void TestCanonical() {
52505250
Assert.assertEquals("und-FR-u-sd-frges", canonicalTag("und-FR-u-sd-frg"));
52515251
Assert.assertEquals("und-LU-u-sd-lucl", canonicalTag("und-LU-u-sd-lud"));
52525252

5253+
// ICU-21550
5254+
Assert.assertEquals("und-u-rg-axzzzz", canonicalTag("und-u-rg-fi01"));
5255+
Assert.assertEquals("und-u-rg-cpzzzz", canonicalTag("und-u-rg-frcp"));
5256+
Assert.assertEquals("und-u-rg-pmzzzz", canonicalTag("und-u-rg-frpm"));
5257+
Assert.assertEquals("und-u-rg-vizzzz", canonicalTag("und-u-rg-usvi"));
5258+
Assert.assertEquals("und-u-rg-hkzzzz", canonicalTag("und-u-rg-cn91"));
5259+
Assert.assertEquals("und-u-rg-awzzzz", canonicalTag("und-u-rg-nlaw"));
5260+
5261+
Assert.assertEquals("und-NO-u-sd-rezzzz", canonicalTag("und-NO-u-sd-frre"));
5262+
Assert.assertEquals("und-CN-u-sd-cwzzzz", canonicalTag("und-CN-u-sd-nlcw"));
5263+
Assert.assertEquals("und-CZ-u-sd-guzzzz", canonicalTag("und-CZ-u-sd-usgu"));
5264+
Assert.assertEquals("und-FR-u-sd-tazzzz", canonicalTag("und-FR-u-sd-shta"));
5265+
Assert.assertEquals("und-FR-u-sd-twzzzz", canonicalTag("und-FR-u-sd-cn71"));
5266+
52535267
// ICU-21401
52545268
Assert.assertEquals("xtg", canonicalTag("cel-gaulish"));
52555269

0 commit comments

Comments
 (0)