【问题标题】:how to detect operating system language (locale) from java code如何从 Java 代码中检测操作系统语言(区域设置)
【发布时间】:2011-01-28 23:48:46
【问题描述】:

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

我试过了

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

等等

但它们不正确,实际上并没有显示 Windows 中的命令“systeminfo”可用的“系统区域设置”。

请帮忙。

【问题讨论】:

    标签: java windows properties system locale


    【解决方案1】:

    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 改变了在 Windows 上确定 getDefault() 使用的语言环境信息的方式;见https://stackoverflow.com/a/8319889/139985

    【讨论】:

    • 对不起,我忘了提,我通过控制面板->区域和语言选项将语言设置更改为“法语”。当我运行上面的代码时,它给出了正确的(更改的)区域设置为“fr”,但是当我运行“systeminfo”时,它仍然显示“en-US”作为系统和输入区域设置。
    • 您可能需要关闭命令提示符并再次打开它。与 Windows 的许多事情一样,“systeminfo”从哪里获取它所显示的信息并不完全清楚。
    • 如何确保 Java 以系统语言环境启动?
    • @VladIlie - AFAIK,你不能。
    【解决方案2】:

    怎么样

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

    在我的情况下返回

    user.country=DE

    user.language=de

    您可以根据这些信息轻松生成语言环境。本地是'语言'_'国家'所以在我的情况下 de_DE

    【讨论】:

    • 这与 Locale.getDefault() 相比如何?
    【解决方案3】:

    使用默认语言环境怎么样?

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

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

    【讨论】:

    • 对不起,我忘了提,我通过控制面板->区域和语言选项将语言设置更改为“法语”。当我运行上面的代码时,它给出了正确的(更改的)区域设置为“fr”,但是当我运行“systeminfo”时,它仍然显示“en-US”作为系统和输入区域设置。
    • 所以我的问题是,这是因为“用户语言环境”和“系统语言环境”之间的差异,而我们通过控制面板更改的是“用户语言环境”而不是“系统语言环境”,并且上面的代码返回“用户语言环境”?那么获取“系统语言环境”的方法是什么?
    【解决方案4】:

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

    public Locale getLocale() {
        if (this.locale == null) {
            this.locale = new Locale(System.getProperty("user.language"), System.getProperty("user.country"));
        }
        return this.locale;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2017-04-10
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多