如何获取systeminfo语言环境 - Locale.getDefault()

时间:2015-10-15 10:29:27

标签: java windows java-6

目前,我的系统区域设置为en-UK,过去为en-US(我已重新启动计算机以使此更改生效)

当我打印Locale.getDefault().getCountry().toString()时,我仍然会得到美国。

在API中声明:

  

getDefault()

     

获取此默认语言环境的当前值   Java虚拟机的实例。

可能JVM区域设置与系统区域设置无关?如果是这样,我如何在Windows上获得系统区域设置?

编辑:

  • 在研究了其他问题之后,我发现说我处理Java 6很有用。
  • 我刚刚发现在我的操作系统(Windows 7)上,系统区域设置更改没有反映在Java中,但是控制面板>地区和语言>格式变化得到反映。
  • 我忽略了一些东西,在生产代码中设置了osgi.nl配置属性,改变了Locale.getDefault会返回的内容

4 个答案:

答案 0 :(得分:1)

您的JVM区域设置和系统区域设置确实可能不同。 首次加载JVM时,除非您在命令行中另行指定,否则它将其语言环境指定为与系统的语言环境相同(并非所有实现都允许您这样做)。 您可以从Locale.getDefault()查看此JVM区域设置的值。

如果您想要更改,可以:Locale.setDefault("<preferred_locale>") read more about it here

系统区域设置取决于您使用的操作系统。我对Windows了解不多,但您可以看到System.getEnv()的值是什么。它返回所有环境属性的Map<String, String>,您可以查找LANG或GDM_LANG等内容。

答案 1 :(得分:1)

国家/地区变体取自&#34;非Unicode&#34; Windows区域设置的扩展对话框中的设置。

答案 2 :(得分:1)

Sun JDK 6u27 +和JDK 7中存在错误,BugId 7073906

  

Locale.getDefault()返回的Locale是en_US,当它是en_GB时。

我认为这就是你在这里咬人的原因:)

答案 3 :(得分:0)

我在生产中意识到设置的参数WAS改变了Locale.getDefault()返回值。这很难检查/证明。

我的解决方案是user.country和user.language没有更改并反映实际的Locale。

Locale locale = new Locale(System.getProperty("user.language"),System.getProperty("user.country"));
Locale.setDefault(locale);
//this will do the trick for me

非常感谢所有回答和评论的人。