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