diff options
author | Karl Berry <karl@freefriends.org> | 2022-05-31 01:17:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-05-31 01:17:15 +0000 |
commit | 4066e47693c667d91051785d7bbe909d30a8b09c (patch) | |
tree | be535ccab8551ddc1ab65d86e7007bc404573687 /Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp | |
parent | 76b41dbf2d1a8bf3f9563393f8c7570b105405f9 (diff) |
icu 71.1
git-svn-id: svn://tug.org/texlive/trunk@63452 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp')
-rw-r--r-- | Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp index 5a4cf6321c8..b4e96504ded 100644 --- a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp +++ b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp @@ -431,13 +431,33 @@ void getMeasureData(const Locale &locale, subKey.append(unit.getType(), status); subKey.append("/", status); + // Check if unitSubType is an alias or not. + LocalUResourceBundlePointer aliasBundle(ures_open(U_ICUDATA_ALIAS, "metadata", &status)); + + UErrorCode aliasStatus = status; + StackUResourceBundle aliasFillIn; + CharString aliasKey; + aliasKey.append("alias/unit/", aliasStatus); + aliasKey.append(unit.getSubtype(), aliasStatus); + aliasKey.append("/replacement", aliasStatus); + ures_getByKeyWithFallback(aliasBundle.getAlias(), aliasKey.data(), aliasFillIn.getAlias(), + &aliasStatus); + CharString unitSubType; + if (!U_FAILURE(aliasStatus)) { + // This means the subType is an alias. Then, replace unitSubType with the replacement. + auto replacement = ures_getUnicodeString(aliasFillIn.getAlias(), &status); + unitSubType.appendInvariantChars(replacement, status); + } else { + unitSubType.append(unit.getSubtype(), status); + } + // Map duration-year-person, duration-week-person, etc. to duration-year, duration-week, ... // TODO(ICU-20400): Get duration-*-person data properly with aliases. - int32_t subtypeLen = static_cast<int32_t>(uprv_strlen(unit.getSubtype())); - if (subtypeLen > 7 && uprv_strcmp(unit.getSubtype() + subtypeLen - 7, "-person") == 0) { - subKey.append({unit.getSubtype(), subtypeLen - 7}, status); + int32_t subtypeLen = static_cast<int32_t>(uprv_strlen(unitSubType.data())); + if (subtypeLen > 7 && uprv_strcmp(unitSubType.data() + subtypeLen - 7, "-person") == 0) { + subKey.append({unitSubType.data(), subtypeLen - 7}, status); } else { - subKey.append({unit.getSubtype(), subtypeLen}, status); + subKey.append({unitSubType.data(), subtypeLen}, status); } if (width != UNUM_UNIT_WIDTH_FULL_NAME) { |