目前,我的系统区域设置为en-UK
,过去为en-US
(我已重新启动计算机以使此更改生效)
当我打印Locale.getDefault().getCountry().toString()
时,我仍然会得到美国。
在API中声明:
getDefault()
获取此默认语言环境的当前值 Java虚拟机的实例。
可能JVM区域设置与系统区域设置无关?如果是这样,我如何在Windows上获得系统区域设置?
编辑:
答案 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
非常感谢所有回答和评论的人。