【问题标题】:Detect windows system locale in java在java中检测windows系统语言环境
【发布时间】:2017-08-01 04:55:07
【问题描述】:

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

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

【问题讨论】:

标签: java internationalization locale


【解决方案1】:

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

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

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

【讨论】:

  • 同意,这就是我们目前所做的。但如前所述,运行时 exec() 需要大量时间来执行。有没有办法缩短 jvm 中外部处理运行的执行时间?如果应用程序应该在显示主页之前进行本地化,那么异步执行此操作似乎不是一种选择。是这样吗?
【解决方案2】:
Locale.getDefault();           // 
locale.getDisplayLanguage();   // Return current language
locale.getDisplayCountry();    // Return current country

【讨论】:

  • 如前所述,locale.getdefault 始终返回 en-US。其他两个做同样的事情或返回空字符串。
  • @SuprajaJayakumar 它不必返回 en-US。但它会返回 en-US 除非通过先前调用 Locale.setDefault(Locale) 将另一个语言环境设置为默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
相关资源
最近更新 更多