使用java.locale.providers获取系统区域设置

时间:2014-12-10 17:01:16

标签: java locale java-8

我想使用Java 8的java.locale.providers属性获取我的系统区域设置。我的系统区域设置是英国,但此代码每次都返回美国。我做错了什么?

String localeProvidersList = System.getProperty("java.locale.providers",  "HOST");      
System.out.println(Locale.getDefault().getCountry());

1 个答案:

答案 0 :(得分:1)

阅读the documentation,以下内容似乎相关:

  

使用以下方法检索默认语言环境:

     

public static Locale getDefault()

     

应用程序的默认语言环境以三种方式确定。第一,   除非您明确更改了默认值getDefault()方法   返回最初由Java虚拟机确定的语言环境   (JVM)首次加载时。也就是说,JVM确定默认语言环境   来自主机环境。主机环境的语言环境由   主机操作系统和在该系统上建立的用户首选项。

     

其次,在某些Java运行时实现上,应用程序用户可以   通过提供此信息来覆盖主机的默认语言环境   命令行设置user.languageuser.country和   user.variant系统属性。

     

     

第三,您的应用程序可以调用setDefault(Locale aLocale)方法。该   setDefault(Locale aLocale)方法可让您的应用程序在系统范围内设置   资源。使用此方法设置默认语言环境后,将进行后续调用   到Locale.getDefault()将返回新设置的区域设置。

因此,假设没有调用Locale.setDefault(),我会通过使用以下内容排除覆盖“hosts默认语言环境”的任何内容:

public class Default { 
    public static void main(String[] args) { 
        System.out.println(System.getProperty("user.language")); 
        System.out.println(System.getProperty("user.country")); 
        System.out.println(System.getProperty("user.variant")); 
    } 
} 

如果这没有提供任何关于你为什么要获得美国语言环境的建议,我必须假设你的计算机没有像你期望的那样设置其语言环境,否则它无法分辨JVM正确。