ICU-22545 Fix addLikelySubtags for pseudo Locales

This commit is contained in:
Frank Tang 2023-10-27 23:52:54 -07:00 committed by Frank Yung-Fong Tang
parent 1bb711ad20
commit fa6a4661ba
5 changed files with 57 additions and 0 deletions

View file

@ -561,12 +561,21 @@ LSR XLikelySubtags::makeMaximizedLsr(const char *language, const char *script, c
if (region[0] == 'X' && (c1 = region[1]) != 0 && region[2] == 0) {
switch (c1) {
case 'A':
if (returnInputIfUnmatch) {
return LSR(language, script, region, LSR::EXPLICIT_LSR);
}
return LSR(PSEUDO_ACCENTS_PREFIX, language, script, region,
LSR::EXPLICIT_LSR, errorCode);
case 'B':
if (returnInputIfUnmatch) {
return LSR(language, script, region, LSR::EXPLICIT_LSR);
}
return LSR(PSEUDO_BIDI_PREFIX, language, script, region,
LSR::EXPLICIT_LSR, errorCode);
case 'C':
if (returnInputIfUnmatch) {
return LSR(language, script, region, LSR::EXPLICIT_LSR);
}
return LSR(PSEUDO_CRACKED_PREFIX, language, script, region,
LSR::EXPLICIT_LSR, errorCode);
default: // normal locale

View file

@ -3814,6 +3814,18 @@ const char* const basic_maximize_data[][2] = {
// ICU-22546
"zh_Hani",
"zh_Hani_CN" // If change, please also update common/unicode/uloc.h
}, {
// ICU-22545
"en_XA",
"en_XA"
}, {
// ICU-22545
"en_XB",
"en_XB"
}, {
// ICU-22545
"en_XC",
"en_XC"
}
};

View file

@ -3881,6 +3881,21 @@ LocaleTest::TestAddLikelyAndMinimizeSubtags() {
"zh_Hani",
"zh_Hani_CN", // If change, please also update common/unicode/locid.h
"zh_Hani"
}, {
// ICU-22545
"en_XA",
"en_XA",
"en_XA",
}, {
// ICU-22545
"en_XB",
"en_XB",
"en_XB",
}, {
// ICU-22545
"en_XC",
"en_XC",
"en_XC",
}
};

View file

@ -1949,6 +1949,18 @@ public class ULocaleTest extends CoreTestFmwk {
// ICU-22546
"zh_Hani",
"zh_Hani_CN" // If change, please also update ULocale.java
}, {
// ICU-22545
"en_XA",
"en_XA",
}, {
// ICU-22545
"en_XB",
"en_XB",
}, {
// ICU-22545
"en_XC",
"en_XC",
}
};

View file

@ -216,12 +216,21 @@ public final class XLikelySubtags {
if (region.length() == 2 && region.charAt(0) == 'X') {
switch (region.charAt(1)) {
case 'A':
if (returnInputIfUnmatch) {
return new LSR(language, script, region, LSR.EXPLICIT_LSR);
}
return new LSR(PSEUDO_ACCENTS_PREFIX + language,
PSEUDO_ACCENTS_PREFIX + script, region, LSR.EXPLICIT_LSR);
case 'B':
if (returnInputIfUnmatch) {
return new LSR(language, script, region, LSR.EXPLICIT_LSR);
}
return new LSR(PSEUDO_BIDI_PREFIX + language,
PSEUDO_BIDI_PREFIX + script, region, LSR.EXPLICIT_LSR);
case 'C':
if (returnInputIfUnmatch) {
return new LSR(language, script, region, LSR.EXPLICIT_LSR);
}
return new LSR(PSEUDO_CRACKED_PREFIX + language,
PSEUDO_CRACKED_PREFIX + script, region, LSR.EXPLICIT_LSR);
default: // normal locale