I've found the answer myself.
Starting from JDK8 you can ask Java to have the host's settings as your number one priority when resolving locale related stuff.
I've extended my example slightly:
public class MyMain {
public static void main(String[] args) {
DecimalFormat decFormat = new DecimalFormat();
DecimalFormatSymbols decSymbols = decFormat.getDecimalFormatSymbols();
String localeProvidersList = System.getProperty("java.locale.providers", "JRE,SPI");
System.out.println("Decimal separator is : " + decSymbols.getDecimalSeparator());
System.out.println("Thousands separator is : " + decSymbols.getGroupingSeparator());
System.out.println("Locale providers list : " + localeProvidersList);
}
}
Running my example above with -Djava.locale.providers=HOST,JRE,SPI
gives:
Decimal separator is : .
Thousands separator is : ,
Locale providers list : HOST,JRE,SPI
Running without java.locale.providers
defined gives:
Decimal separator is : ,
Thousands separator is : .
Locale providers list : JRE,SPI
Personally I would always run my Java applications with -Djava.locale.providers=HOST,....
because that will make my Java applications behave like native application do on that same host.
I found the answer deep inside the JDK8 javadocs. There's also a few notes about it in the Java 8 Enhancements docs.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…