Java7默认语言环境

Java7默认语言环境,java,windows,windows-7,locale,java-7,Java,Windows,Windows 7,Locale,Java 7,我刚刚安装了jre7,我惊讶地发现我的默认语言环境现在是en_US。有了jre6,这就是德鲁克 jre7有什么不同?默认语言环境是否不再是操作系统的语言环境?(顺便说一句,我使用的是Windows7) 谢谢你的回答 编辑: 我已经看到了类别的区域设置。格式是“旧”格式(deu CH)。类别.显示的区域设置从操作系统的语言(在Windows中,这是在“控制面板>区域和语言>键盘和语言>显示语言”中完成的)和控件从 与此不同的是属性“user.country”。在Java6中,我得到了“CH”,在J

我刚刚安装了jre7,我惊讶地发现我的默认语言环境现在是en_US。有了jre6,这就是德鲁克

jre7有什么不同?默认语言环境是否不再是操作系统的语言环境?(顺便说一句,我使用的是Windows7)

谢谢你的回答

编辑: 我已经看到了类别的区域设置。格式是“旧”格式(deu CH)。类别.显示的区域设置从操作系统的语言(在Windows中,这是在“控制面板>区域和语言>键盘和语言>显示语言”中完成的)和控件从


与此不同的是属性“user.country”。在Java6中,我得到了“CH”,在Java7中,我得到了“US”。

在Java7中,语言环境似乎有一些变化,即UI和“用户”语言环境之间的区别。看见有
setDefault(Locale.Category,Locale)
。但是,这并不能真正解释您所经历的情况-我只是指出Java 7在区域设置处理方面已经发生了变化。

检查Windows控制面板区域和语言选项中的设置“Location”(德语:“Region und Sprache”,“Aufenthaltsort”)。

这在我看来确实像个bug:

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

System.err.println(Locale.getDefault());
}
使用java 5或java 6运行此命令会打印:“nl_nl”
java7:“en_US”

这是设计好的。Java7改变了
Locale.getDefault()
的工作方式。甲骨文有一个缺陷,但他们基本上说这是设计的

总之,您必须修改操作系统的显示语言。仅修改区域格式已不再足够


请阅读此处的错误报告:

此页和上的更改描述得相当好


请注意,您可以通过将
sun.locale.formatasdefault
系统属性设置为
true

恢复到旧行为。如果您足够勇敢,可以调用:

Locale.setDefault(Locale.getDefault());
这将为这两个类别设置默认区域设置

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

但这当然可能会产生副作用。

根据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;
}

}

一定有错误。你试过一个简单的测试应用吗?我会重新安装它。我在启动应用程序后设置了一个断点,默认的语言环境是en_US。对于我公司的所有人来说都是一样的根据bug报告,这个“特性”在Java8Build04中被修复了。因此,在Java 8中,我们可以期待正确的行为。@dARKpRINCE实际上也被后端口到7u4:我不确定修复程序是什么,我在最新版本的JDK 7和最新版本的JDK 8 beta上都尝试了Locale.getDefault(),并且都返回了与JDK不同的结果。这仍然是一个有效的答案吗?我想他们已经用Java8恢复了这个功能。它是否应该在Locale.getDefault(Category.FORMAT)中正常工作?Locale.getDefault(Locale.Category.DISPLAY)和Locale.getDefault(Locale.Category.FORMAT)呢?只是好奇。博客。。。回程计算机尚未存档该URL