如何从java代码中检测操作系统语言(区域设置)

问题描述 投票:0回答:4

从java代码中了解操作系统语言(区域设置)的正确方法是什么?

我已经尝试过了

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

但它们并不正确,实际上没有任何内容显示“系统区域设置”,可通过 Windows 中的命令“systeminfo”获得。

java windows properties system locale
4个回答
37
投票

Windows XP

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

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

要在 Java 中获取等效信息,请使用

Locale.getDefault()
获取 Java 正在使用的 Locale,并使用 Locale 对象上的方法(例如
getCountry()
getLanguage()
)来获取详细信息。该信息可使用 ISO 代码和人类可读/可显示的名称来获取。

请注意,

Locale.getDefault()
为您提供Java在启动时从环境中获取的语言环境,这可能与“系统”语言环境相同,也可能不同。为了最终获得 Java 中的“系统”语言环境,您需要执行特定于平台的操作。 IMO,如果您确实需要该信息,那么确保 Java 从系统区域设置开始会更简单。


更新: 显然,Java 7 改变了

getDefault()
使用的区域设置信息在 Windows 上确定的方式;请参阅https://stackoverflow.com/a/8319889/139985


19
投票

那又如何

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

我的情况下退货

用户.国家=德国

用户.语言=de

您可以轻松地根据此信息生成区域设置。本地是“语言”_“国家”,所以就我而言 de_DE


10
投票

使用默认区域设置怎么样?

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

这将根据 Windows

systeminfo
命令返回我当前的语言和国家/地区。这是您要找的吗? (如果您想要语言/国家/地区的 2 字符代码,您可以仅使用
getLanguage()
getCountry()
)。


3
投票

准确地说,您可以尝试以下代码:

public Locale getLocale() {
    if (this.locale == null) {
        this.locale = new Locale(System.getProperty("user.language"), System.getProperty("user.country"));
    }
    return this.locale;
}
© www.soinside.com 2019 - 2024. All rights reserved.