}
if (key.contentEquals("approximately") && approximatelyPattern == null) {
String pattern = value.getString();
- approximatelyPattern = SimpleFormatterImpl.compileToStringMinMaxArguments(pattern, sb, 2, 2);
+ approximatelyPattern = SimpleFormatterImpl.compileToStringMinMaxArguments(pattern, sb, 1, 1); // 1 arg, as in "~{0}"
}
}
}
for ( int i = 0 ; i < territoryContainment.getSize(); i++ ) {
UResourceBundle mapping = territoryContainment.get(i);
String parent = mapping.getKey();
- if (parent.equals("containedGroupings") || parent.equals("deprecated")) {
+ if (parent.equals("containedGroupings") || parent.equals("deprecated") || parent.equals("grouping")) {
continue; // handle new pseudo-parent types added in ICU data per cldrbug 7808; for now just skip.
// #11232 is to do something useful with these.
+ // Also skip "grouping" which has multi-level structure below from CLDR 34.
}
Region parentRegion = regionIDMap.get(parent);
for ( int j = 0 ; j < mapping.getSize(); j++ ) {
{
MeasureFormat a1 = (MeasureFormat) a;
MeasureFormat b1 = (MeasureFormat) b;
- return a1.getLocale().equals(b1.getLocale())
- && a1.getWidth().equals(b1.getWidth())
- && nfh.hasSameBehavior(a1.getNumberFormat(), b1.getNumberFormat());
+ boolean getLocaleEqual = a1.getLocale().equals(b1.getLocale());
+ boolean getWidthEqual = a1.getWidth().equals(b1.getWidth());
+ boolean numFmtHasSameBehavior = nfh.hasSameBehavior(a1.getNumberFormat(), b1.getNumberFormat());
+ if (getLocaleEqual && getWidthEqual && numFmtHasSameBehavior) {
+ return true;
+ }
+ System.out.println("MeasureFormatHandler.hasSameBehavior fails:");
+ if (!getLocaleEqual) {
+ System.out.println("- getLocale equality fails: old a1: " + a1.getLocale().getName() + "; test b1: " + b1.getLocale().getName());
+ }
+ if (!getWidthEqual) {
+ System.out.println("- getWidth equality fails: old a1: " + a1.getWidth().name() + "; test b1: " + b1.getWidth().name());
+ }
+ if (!numFmtHasSameBehavior) {
+ System.out.println("- getNumberFormat hasSameBehavior fails");
+ }
+ return false;
}
}
}
// Space as group separator
logln("...applyLocalizedPattern # ###,00;(# ###,00) ");
- ((DecimalFormat)nf).applyLocalizedPattern("#\u00a0###,00;(#\u00a0###,00)");
+ ((DecimalFormat)nf).applyLocalizedPattern("#\u202f###,00;(#\u202f###,00)");
logln("nf toPattern2: " + ((DecimalFormat)nf).toPattern());
logln("nf toLocPattern2: " + ((DecimalFormat)nf).toLocalizedPattern());
String buffer = nf.format(1234);
- if (!buffer.equals("1\u00a0234,00"))
+ if (!buffer.equals("1\u202f234,00"))
errln("nf : " + buffer); // Expect 1 234,00
buffer = nf.format(-1234);
- if (!buffer.equals("(1\u00a0234,00)"))
+ if (!buffer.equals("(1\u202f234,00)"))
errln("nf : " + buffer); // Expect (1 234,00)
// Erroneously prints:
NumberRangeFormatter.with()
.numberFormatterBoth(NumberFormatter.with().unit(MeasureUnit.FAHRENHEIT).unitWidth(UnitWidth.FULL_NAME)),
new ULocale("fr-FR"),
- "1–5 degrés Fahrenheit",
- "~5 degrés Fahrenheit",
- "~5 degrés Fahrenheit",
- "0–3 degrés Fahrenheit",
- "~0 degré Fahrenheit",
- "3–3 000 degrés Fahrenheit",
- "3 000–5 000 degrés Fahrenheit",
- "4 999–5 001 degrés Fahrenheit",
- "~5 000 degrés Fahrenheit",
- "5 000–5 000 000 degrés Fahrenheit");
+ "1–5\u00A0degrés Fahrenheit",
+ "≈5\u00A0degrés Fahrenheit",
+ "≈5\u00A0degrés Fahrenheit",
+ "0–3\u00A0degrés Fahrenheit",
+ "≈0\u00A0degré Fahrenheit",
+ "3–3\u202F000\u00A0degrés Fahrenheit",
+ "3\u202F000–5\u202F000\u00A0degrés Fahrenheit",
+ "4\u202F999–5\u202F001\u00A0degrés Fahrenheit",
+ "≈5\u202F000\u00A0degrés Fahrenheit",
+ "5\u202F000–5\u202F000\u202F000\u00A0degrés Fahrenheit");
assertFormatRange(
"Locale with custom range separator",
NumberRangeFormatter.with(),
new ULocale("ja"),
"1~5",
- "~5",
- "~5",
+ "約 5",
+ "約 5",
"0~3",
- "~0",
+ "約 0",
"3~3,000",
"3,000~5,000",
"4,999~5,001",
- "~5,000",
+ "約 5,000",
"5,000~5,000,000");
assertFormatRange(
.numberFormatterBoth(NumberFormatter.with().notation(Notation.compactLong())),
new ULocale("de-CH"),
"1–5",
- "~5",
- "~5",
+ "≈5",
+ "≈5",
"0–3",
- "~0",
+ "≈0",
"3–3 Tausend",
"3–5 Tausend",
- "~5 Tausend",
- "~5 Tausend",
+ "≈5 Tausend",
+ "≈5 Tausend",
"5 Tausend – 5 Millionen");
assertFormatRange(
.numberFormatterBoth(NumberFormatter.with().notation(Notation.compactLong())),
new ULocale("de-CH"),
"1–5",
- "~5",
- "~5",
+ "≈5",
+ "≈5",
"0–3",
- "~0",
+ "≈0",
"3–3 Tausend",
"3 Tausend – 5 Tausend",
- "~5 Tausend",
- "~5 Tausend",
+ "≈5 Tausend",
+ "≈5 Tausend",
"5 Tausend – 5 Millionen");
assertFormatRange(
NumberFormat format_b = (NumberFormat) b;
double number = 1234.56;
- String result_a = format_a.format(number);
- String result_b = format_b.format(number);
+ // In CLDR 34, French changed grouping separator from \u00a0 to \u202f;
+ // here we undo that in formatted result so serialization tests don't fail
+ String result_a = format_a.format(number).replace('\u202f', '\u00a0');
+ String result_b = format_b.format(number).replace('\u202f', '\u00a0');
boolean equal = result_a.equals(result_b);
if (!equal) {
System.out.println(format_a+" "+format_b);