summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Chang <vichang@google.com>2021-01-19 10:17:36 +0000
committerVictor Chang <vichang@google.com>2021-11-26 11:25:09 +0000
commit1376f147c9bbf94fba617dce73d26a37d3dbdcef (patch)
tree1c7e8b513a2e0ae88237019726e6c6b2016e908f
parent865772c54c835fdff1b18730af59822d02d1d68c (diff)
downloadicu-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.cpp3
-rw-r--r--icu4j/main/classes/core/src/com/ibm/icu/text/RelativeDateTimeFormatter.java17
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;