Для кода ниже я получаю другой результат, когда я запускаю его так, и когда я запускаю его внутри веб-приложения Tomcat.
public static void main(String[] args)
{
System.out.println(System.getProperty("user.language"));
System.out.println(System.getProperty("user.country"));
System.out.println(Locale.getDefault(Category.DISPLAY));
System.out.println(Locale.getDefault(Category.FORMAT));
Locale l = new Locale("de", "DE");
System.out.println(l.getDisplayLanguage());
DecimalFormatSymbols dfs = new DecimalFormatSymbols(l);
System.out.println(dfs.getDecimalSeparator());
l = new Locale.Builder().setLanguage("de").setRegion("DE").build();
System.out.println(l.getDisplayLanguage());
dfs = new DecimalFormatSymbols(l);
System.out.println(dfs.getDecimalSeparator());
}
Автономный результат (ожидаемый):
en
US
en_US
en_US
German
,
German
,
В Tomcat:
en
US
en_US
en_US
German
.
German
.
Может кто-то предположить, что еще влияет на DecimalFormatSymbols (и NumberFormat, если на то пошло), что он не использует предоставленную локаль. Я использую JDK 1.8 с языковым уровнем 1.7.
EDIT: Это происходит только тогда, когда Tomcat работает в Eclipse. Eclipse/OSGi, кажется, вмешивается в форматирование на основе локали, но только в конкретной ситуации.