Hello,
There is a method NumberFormat.setForcedLatinDigits, according to javadoc
it should
> * Specify whether all new NumberFormat instances will use *latin
> digits*
> * *and related characters *rather than the localized ones.
I faced with an issue that under Russian locale, it doesn't replace decimal
separator: NumberFormats created afterwards, continue to use
locale-specific comma instead of latin dot.
In code, it tries to replace it:
protected static NumberConstants createLatinNumberConstants(
final NumberConstants orig) {
final String groupingSeparator = remapSeparator(
orig.groupingSeparator());
final String decimalSeparator = remapSeparator(
orig.decimalSeparator());
final String monetaryGroupingSeparator = remapSeparator(
orig.monetaryGroupingSeparator());
final String monetarySeparator = remapSeparator(
orig.monetarySeparator());
...
But it uses the same function
protected static String remapSeparator(String separator) {
char ch = separator.length() > 0 ? separator.charAt(0) : 0xFFFF;
if (LOCALIZED_DOT_EQUIVALENTS.indexOf(ch) >= 0) {
return ".";
}
if (LOCALIZED_COMMA_EQUIVALENTS.indexOf(ch) >= 0) {
return ",";
}
return "\u00A0";
}
to replace both grouping and decimal separator (and also monetary grouping
and monetary decimal).
This approach doesn't work well if e. g. one locale has comma as decimal
separator and another one has comma as grouping separator.
Also, there are test cases in GWT that asserts (probably mistakenly) that
comma should be preserved (com.google.gwt.i18n.client.NumberFormat_fr_Test
and NumberFormat_ar_Test).
public void testForceLatin() {
assertFalse(NumberFormat.forcedLatinDigits());
NumberFormat.setForcedLatinDigits(true);
assertTrue(NumberFormat.forcedLatinDigits());
NumberFormat decLatin = NumberFormat.getDecimalFormat();
assertEquals("1\u00A0003,14", decLatin.format(1003.14));
assertEquals("-1\u00A0003,14", decLatin.format(-1003.14));
NumberFormat.setForcedLatinDigits(false);
assertFalse(NumberFormat.forcedLatinDigits());
assertEquals("3,14", decLatin.format(3.14));
NumberFormat unforced = NumberFormat.getDecimalFormat();
assertEquals("3,14", unforced.format(3.14));
}
So what's the expected behavior here? Should setForcedLatinDigits always
force latin decimal separator?
And if yes, why this complex logic to remapSeparator is used instead of
simply returning '.' as decimal separator?
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.