如何获取系统信息语言环境 - Locale.getDefault()

How to get systeminfo locale - Locale.getDefault()

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

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

在 API 中指出:

getDefault()

Gets the current value of the default locale for this instance of the Java Virtual Machine.

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

编辑:

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

看到这个JVM locale的值是多少

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

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

国家/地区变体取自 Windows 语言环境扩展对话框中的 "Non-Unicode" 设置。

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

The Locale returned from Locale.getDefault() is en_US when it shoud be en_GB.

我想这就是你的问题:)

我意识到在生产中设置了一个改变 Locale.getDefault() return 值的参数。这很难check/prove。

我的解决方案是 user.country 和 user.language 未更改并反映了实际的区域设置。

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

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