多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java 语言环境 – 创建和设置默认语言环境 > 原文: [https://howtodoinjava.com/java/date-time/java-locale-api-examples/](https://howtodoinjava.com/java/date-time/java-locale-api-examples/) 如果要以符合用户语言和文化期望的用户友好方式显示数字,日期和时间,则需要使用 Java 语言环境 api。 在 Java 中,[`java.util.Locale`](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html)类表示世界上特定的语言和地区。 如果一个类根据语言环境改变其行为,则称其为**对语言环境敏感的**。 例如,`NumberFormat`和`DateFormat`类是对语言环境敏感的。 数字和日期的格式,它的返回取决于**语言环境**。 ```java Table of Contents Create Locale Instance Set Default Locale ``` ## 创建语言环境实例 您可以通过以下方式**创建 Java 语言环境**实例: 1. #### 静态语言环境对象 这是最简单的方法,并使用`Locale`类中的预定义常量。 ```java Locale usLocale = Locale.US; long number = 123456789L; NumberFormat nf = NumberFormat.getInstance(usLocale); System.out.println( nf.format(number) ); //123,456,789 Date now = new Date(); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, usLocale); System.out.println( df.format(now) ); //July 19, 2016 12:43:12 PM IST ``` > 请注意,以这种方式构建语言环境时,`Locale`的区域部分未定义。 因此,以下两个语句本质上是相等的: > > ```java > //Region is missing in both cases > Locale usLocale = Locale.US; //1 > Locale usLocale = new Locale.Builder().setLanguage("en").build(); //2 > > ``` 2. #### 语言环境构造器 `Locale`类中提供了三个构造器: * `Locale(String language)` * `Locale(String language, String country)` * `Locale(String language, String country, String variant)` ```java Locale usLocale = new Locale("en"); //Locale usLocale = new Locale("en", "US"); long number = 123456789L; NumberFormat nf = NumberFormat.getInstance(usLocale); System.out.println( nf.format(number) ); //123,456,789 Date now = new Date(); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, usLocale); System.out.println( df.format(now) ); //July 19, 2016 12:43:12 PM IST ``` 3. #### `Locale.Builder`类 `Locale.Builder`工具类可用于构造符合 [IETF BCP(最佳通用实践)47](https://tools.ietf.org/html/bcp47) 语法的`Locale`对象。 ```java Locale usLocale = new Locale.Builder().setLanguage("en").setRegion("US").build(); long number = 123456789L; NumberFormat nf = NumberFormat.getInstance(usLocale); System.out.println( nf.format(number) ); //123,456,789 Date now = new Date(); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, usLocale); System.out.println( df.format(now) ); //July 19, 2016 12:43:12 PM IST ``` > 如果其参数不是`BCP 47`标准的格式正确的元素,则此方法将返回`java.util.IllformedLocaleException`错误。 4. #### `Locale.forLanguageTag()`方法 如果您具有符合 *IETF BCP 47* 标准的*语言*标签字符串,则可以使用`forLanguageTag(String)`工厂方法。 ```java Locale usLocale = Locale.forLanguageTag("en-US"); long number = 123456789L; NumberFormat nf = NumberFormat.getInstance(usLocale); System.out.println( nf.format(number) ); //123,456,789 Date now = new Date(); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, usLocale); System.out.println( df.format(now) ); //July 19, 2016 12:43:12 PM IST ``` ## 设置默认语言环境 尽管可以在运行时在所有对语言环境敏感的类中设置`Locale`,但是如果我们可以在启动时为每个用户请求设置默认语言环境(或特定于应用程序的语言环境),则无需为每个应用程序代码中的语言环境敏感的对象设置语言环境,因此我们可以避免很多代码行,并且也很少出现缺陷。 使用`Locale.setDefault()`方法设置默认情况下将使用所有对语言环境敏感的类的`Locale`实例。 ```java Locale.setDefault(Locale.FRANCE); ``` `Locale`类还允许您为两个不同的类别设置默认的`Locale`。 #### 语言环境类别 `Locale.Category`枚举表示两个区域设置类别: 1. `Locale.Category.DISPLAY` – 适用于**应用程序的用户界面**,例如资源束消息。 2. `Locale.Category.FORMAT` – 用于日期和数字格式,具体取决于特定的区域信息 ```java Locale.setDefault(Locale.Category.DISPLAY, Locale.US); Locale.setDefault(Locale.Category.FORMAT, Locale.FR); ``` 让我们来看一个例子。 ```java //Set them at application startup or where request cycle begin Locale.setDefault(Locale.Category.DISPLAY, Locale.US); Locale.setDefault(Locale.Category.FORMAT, Locale.FRANCE); ResourceBundle resourceBundle = ResourceBundle.getBundle("bundleName", Locale.getDefault(Locale.Category.DISPLAY)); String message = resourceBundle.getString("message.key"); Date now = new Date(); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); String date = df.format(now); ``` 将我的问题放在评论部分。 学习愉快! 资源: [ISO 国家/地区代码](http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html) [ISO 语言代码](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)