diff options
author | Victor Chang <vichang@google.com> | 2021-01-19 10:17:36 +0000 |
---|---|---|
committer | Victor Chang <vichang@google.com> | 2021-11-26 11:25:09 +0000 |
commit | 1376f147c9bbf94fba617dce73d26a37d3dbdcef (patch) | |
tree | 1c7e8b513a2e0ae88237019726e6c6b2016e908f | |
parent | 865772c54c835fdff1b18730af59822d02d1d68c (diff) | |
download | icu-1376f147c9bbf94fba617dce73d26a37d3dbdcef.tar.gz |
Android patch: ICU-13295: Apostrophe in pattern bug
This is a temporary workaround until the issue has been fixed upstream:
https://unicode-org.atlassian.net/browse/ICU-13295
This change was introduced in Android for ICU 59:
https://android.googlesource.com/platform/external/icu/+/6f91254
https://android.googlesource.com/platform/external/icu/+/a765635
https://android.googlesource.com/platform/external/icu/+/c98207c
(cherry picked from commit 9b607c4e580bebd23ad9c2873227c5de7afc5279)
Test: n/a
Change-Id: I531609fbac7ed92d4efd0b1144224be22769e34d
-rw-r--r-- | icu4c/source/i18n/dtitvfmt.cpp | 3 | ||||
-rw-r--r-- | icu4j/main/classes/core/src/com/ibm/icu/text/RelativeDateTimeFormatter.java | 17 |
2 files changed, 15 insertions, 5 deletions
diff --git a/icu4c/source/i18n/dtitvfmt.cpp b/icu4c/source/i18n/dtitvfmt.cpp index 298fb62be..fdd92ac49 100644 --- a/icu4c/source/i18n/dtitvfmt.cpp +++ b/icu4c/source/i18n/dtitvfmt.cpp @@ -22,6 +22,9 @@ #include "unicode/calendar.h" #include "unicode/dtptngen.h" #include "unicode/dtitvinf.h" +// Android patch (CLDR ticket #10321) begin. +#include "unicode/msgfmt.h" +// Android patch (CLDR ticket #10321) begin. #include "unicode/simpleformatter.h" #include "unicode/udisplaycontext.h" #include "cmemory.h" diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/RelativeDateTimeFormatter.java b/icu4j/main/classes/core/src/com/ibm/icu/text/RelativeDateTimeFormatter.java index d8e13eae2..555f5f9e3 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/RelativeDateTimeFormatter.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/RelativeDateTimeFormatter.java @@ -11,6 +11,7 @@ package com.ibm.icu.text; import java.io.InvalidObjectException; import java.text.AttributedCharacterIterator; import java.text.Format; +import java.text.FieldPosition; import java.util.EnumMap; import java.util.Locale; @@ -611,8 +612,8 @@ public final class RelativeDateTimeFormatter { return new RelativeDateTimeFormatter( data.qualitativeUnitMap, data.relUnitPatternMap, - SimpleFormatterImpl.compileToStringMinMaxArguments( - data.dateTimePattern, new StringBuilder(), 2, 2), + // Android-changed: use MessageFormat instead of SimpleFormatterImpl (b/63745717). + data.dateTimePattern, PluralRules.forLocale(locale), nf, style, @@ -1003,8 +1004,13 @@ public final class RelativeDateTimeFormatter { * @stable ICU 53 */ public String combineDateAndTime(String relativeDateString, String timeString) { - return SimpleFormatterImpl.formatCompiledPattern( - combinedDateAndTime, timeString, relativeDateString); + // BEGIN Android-changed: use MessageFormat instead of SimpleFormatterImpl (b/63745717). + MessageFormat msgFmt = new MessageFormat(""); + msgFmt.applyPattern(combinedDateAndTime, MessagePattern.ApostropheMode.DOUBLE_REQUIRED); + StringBuffer combinedDateTimeBuffer = new StringBuffer(128); + return msgFmt.format(new Object[] { timeString, relativeDateString}, + combinedDateTimeBuffer, new FieldPosition(0)).toString(); + // END Android-changed: use MessageFormat instead of SimpleFormatterImpl (b/63745717). } /** @@ -1118,7 +1124,8 @@ public final class RelativeDateTimeFormatter { private final EnumMap<Style, EnumMap<AbsoluteUnit, EnumMap<Direction, String>>> qualitativeUnitMap; private final EnumMap<Style, EnumMap<RelativeUnit, String[][]>> patternMap; - private final String combinedDateAndTime; // compiled SimpleFormatter pattern + // Android-changed: use MessageFormat instead of SimpleFormatterImpl (b/63745717). + private final String combinedDateAndTime; // MessageFormat pattern for combining date and time. private final PluralRules pluralRules; private final NumberFormat numberFormat; |