Подтвердить что ты не робот

DecimalFormatSymbols с Locale

Для кода ниже я получаю другой результат, когда я запускаю его так, и когда я запускаю его внутри веб-приложения 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, кажется, вмешивается в форматирование на основе локали, но только в конкретной ситуации.

4b9b3361

Ответ 1

У Tomcat наш параметр ENV может возникнуть проблема, я вижу это из сообщения здесь.

Попробуйте запустить tomcat, как было предложено в вышеприведенной записи, со следующими параметрами, заданными как пакетный файл:

-Duser.timezone=Europe/Berlin
-Duser.country=DE
-Duser.language=de