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

标签 java internationalization locale

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

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

最佳答案

Locale.getDefault() 返回当前 JVM 的默认区域设置,而不是操作系统的默认区域设置。 对于大多数 JVM,JVM 的默认区域设置默认为 en-US(可能有本地化的区域设置,但我从未见过)。

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

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

关于java - 在java中检测windows系统区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45429214/

相关文章:

java - JMS 协议(protocol)是文本或二进制

vue.js - 如何配置 `I18n Ally` VsCode 插件以从单个文件读取我的本地文件?

ruby-on-rails - Rails - 查找不同语言环境之间丢失的键(.yml 文件)

java - Java 中字符串的传统西类牙语排序

java - 通过 JNA 将 InputStream 作为文件指针传递给 C 代码

java - 在Java中显示Excel工作表xlsx中的日期

java - 我将使用什么语法让我的程序忽略下划线、标点符号和所有其他驼峰式命名法等

java - 多个枚举的国际化(枚举值的翻译)

javascript - 当本地化被引入等式时如何处理字符串长度约束?

android - 以编程方式设置时,为什么 android 无法将语言环境识别为 RTL?