从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; }