Язык Java 7 по умолчанию - PullRequest
       54

Язык Java 7 по умолчанию

23 голосов
/ 18 августа 2011

Я только что установил jre7, и я удивлен, увидев, что моя локаль по умолчанию теперь en_US.С jre6 это был de_CH.

Чем отличается jre7?Язык по умолчанию больше не совпадает с языком операционной системы?(кстати, я использую Windows7)

Спасибо за ваш ответ.

Редактировать: Я видел локаль для Category.FORMAT"старый" (de_CH).Локаль для Category.DISPLAY берет язык от языка ОС (в Windows это делается в Панели управления> Регион и язык> Клавиатура и языки> Язык интерфейса) и ввод из ...?

То, что кажется другим, - это свойство " user.country ".С Java6 я получаю «CH», а с Java7 я получаю «US».

Ответы [ 7 ]

22 голосов
/ 30 ноября 2011

Это как задумано.Java 7 изменила способ работы Locale.getDefault().Дефект был введен в Oracle, но в основном они сказали, что это As Designed.

Чтобы подвести итог, вы должны изменить язык отображения ОС.Изменение только формата региона больше не достаточно.

Прочитайте отчет об ошибке здесь: Locale.getDefault () возвращает неправильный языковой стандарт для Java SE 7

14 голосов
/ 13 июня 2012

Изменение довольно хорошо описано в этом сообщении в блоге и на странице совместимости .

Обратите внимание, что вы можете вернуться к старому поведению, установив системное свойство sun.locale.formatasdefault на true.

4 голосов
/ 19 августа 2011

Кажется, есть некоторые изменения, касающиеся локали в Java 7, а именно различие между пользовательским интерфейсом и локалью пользователя.Смотрите это .Сейчас setDefault(Locale.Category, Locale).Однако это на самом деле не объясняет, что вы испытываете - я просто указываю на тот факт, что в Java 7 произошли изменения, связанные с обработкой локали.

2 голосов
/ 26 апреля 2013

А как насчет установки локали в начале программы следующим образом, в зависимости от версии Java:

public class LocaleFormatter {

private static Locale locale;

private LocaleFormatter() {

}

public static Locale setDefaultLocale() {
    if (locale == null) {
        if (!System.getProperty("java.version").startsWith("1.7.")) {
            locale = Locale.getDefault();
        } else {
            try {
                Class localeClass = Class.forName("java.util.Locale");
                Class categoryClass = Class.forName("java.util.Locale$Category");
                Object format = null;
                for (Object constant : categoryClass.getEnumConstants()) {
                    if (constant.toString().equals("FORMAT")) {
                        format = constant;
                    }
                }
                Method method = localeClass.getMethod("getDefault", categoryClass);

                locale = (Locale) method.invoke(Locale.getDefault(), format);
                Locale.setDefault(locale);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    return locale;
}

}

2 голосов
/ 08 ноября 2011

Это действительно похоже на ошибку для меня:

public static void main(String[] args) throws FileNotFoundException, IOException {

System.err.println(Locale.getDefault());
}

запуск с печатью java 5 или java 6: 'nl_NL' java7: 'en_US'

0 голосов
/ 04 января 2013

Если вы достаточно смелы, вы можете позвонить:

Locale.setDefault(Locale.getDefault());

Это устанавливает локаль по умолчанию для обеих этих категорий

public static synchronized void setDefault(Locale newLocale) {
   setDefault(Category.DISPLAY, newLocale);
   setDefault(Category.FORMAT, newLocale);
   defaultLocale = newLocale;
}

Но это, конечно, может вызвать побочные эффекты.

0 голосов
/ 13 октября 2011

Проверьте настройку «Местоположение» на панели управления Windows. Региональные и языковые параметры (немецкий: «Region und Sprache», «Aufenthaltsort»).

...