在java中检测windows系统区域设置

在java中检测windows系统区域设置,java,internationalization,locale,Java,Internationalization,Locale,JavaLocale.getDefault()始终在windows上返回en US,即使系统区域设置为不同的语言(通过区域和语言控制面板)。 在Java Runtime.exec()内运行诸如systeminfo | findstr/C:\“System Locale\之类的脚本需要大量时间 在(java)应用程序启动时,是否有更快的方法检测系统区域设置?运行上述cmd一次并写入属性文件以进行后续读取可能是一种解决方案。但是,如果系统区域设置被更改并重新启动,该怎么办?在jdk中查找系统区域设置

Java
Locale.getDefault()
始终在windows上返回en US,即使系统区域设置为不同的语言(通过区域和语言控制面板)。 在Java Runtime.exec()内运行诸如
systeminfo | findstr/C:\“System Locale\
之类的脚本需要大量时间

在(java)应用程序启动时,是否有更快的方法检测系统区域设置?运行上述cmd一次并写入属性文件以进行后续读取可能是一种解决方案。但是,如果系统区域设置被更改并重新启动,该怎么办?在jdk中查找系统区域设置的更可靠的方法是什么?

locale.getDefault()
返回当前JVM的默认区域设置,而不是操作系统的默认区域设置。
Locale.getDefault();           // 
locale.getDisplayLanguage();   // Return current language
locale.getDisplayCountry();    // Return current country
对于大多数JVM,JVM的默认语言环境默认为en US(可能有本地化的语言环境,我从未见过)

可以使用Locale.setDefault(Locale newDefault)将其设置为其他内容,然后
Locale.getDefault()
将返回该区域设置


因此,您的问题的一个解决方案可能是使用您曾经拥有的命令获取默认系统区域设置,在启动应用程序时使用
Locale.setDefault()
将其设置为新的JVM默认值,然后使用
Locale.getDefault()再次检索该区域设置

注意到同一问题的可能重复,locale.getdefault始终返回en-US。其他两个执行相同的操作或返回空字符串。@suprajayakumar不必返回en-US。但它将返回en-US,除非先前调用locale.setDefault(locale)将另一个locale设置为默认值。同意,这就是我们目前所做的。但是,正如前面提到的,运行时exec()需要很多时间来执行。有没有办法缩短jvm中外部处理运行的执行时间?如果应用程序应该在显示主页之前进行本地化,则异步执行似乎不是一个选项。对吗?