如何从java代码中检测操作系统语言(locale)

从java代码中知道操作系统语言(locale)的正确方法是什么?

我努力了

Locale.getDefault() System.getProperties("user.language") 

等等

但它们是不正确的,实际上没有任何显示“系统区域设置”,它可以通过命令“systeminfo”在Windows中使用。

请帮忙。

Windows XP的systeminfo命令显示了很多东西,但相关的信息是这样的:

 System Locale: en-us;English (United States) Input Locale: en-us;English (United States) 

要获得Java中的等价信息,请使用Locale.getDefault()获取Java正在使用的语言环境,并使用Locale对象上的方法getCountry()getCountry()getLanguage()来获取详细信息。 这些信息可以使用ISO代码和人类可读/可显示的名称。

请注意, Locale.getDefault()为您提供Java启动时从环境中获取的语言环境,这可能与“系统”语言环境相同也可能不同。 要明确地获得Java中的“系统”语言环境,您需要执行特定于平台的事情。 国际海事组织,确保Java开始使用系统区域设置比较简单…如果您确实需要这些信息。


更新:显然,Java 7已经改变了getDefault()使用的语言环境信息在Windows上的确定方式; 请参阅https://stackoverflow.com/a/8319889/139985

关于什么

 System.getProperty("user.country"); System.getProperty("user.language"); 

在我的情况下返回

user.country = DE

user.language = DE

您可以轻松地从这些信息生成语言环境。 本地是'语言''国',所以在我的情况下de_DE

如何使用默认的语言环境?

 Locale locale = Locale.getDefault(); String lang = locale.getDisplayLanguage(); String country = locale.getDisplayCountry(); 

这根据Windows systeminfo命令返回我当前的语言和国家。 这是你在找什么? (如果你想要2个字符的代码语言/国家,你可以使用getLanguage()getCountry() )。

确切地说,你可以尝试下面的代码:

 public Locale getLocale() { if (this.locale == null) { this.locale = new Locale(System.getProperty("user.language"), System.getProperty("user.country")); } return this.locale; }