Java 语言环境 – 创建和设置默认语言环境
原文: https://howtodoinjava.com/java/date-time/java-locale-api-examples/
如果要以符合用户语言和文化期望的用户友好方式显示数字,日期和时间,则需要使用 Java 语言环境 api。 在 Java 中,java.util.Locale
类表示世界上特定的语言和地区。
如果一个类根据语言环境改变其行为,则称其为对语言环境敏感的。 例如,NumberFormat
和DateFormat
类是对语言环境敏感的。 数字和日期的格式,它的返回取决于语言环境。
Table of Contents
Create Locale Instance
Set Default Locale
创建语言环境实例
您可以通过以下方式创建 Java 语言环境实例:
-
静态语言环境对象
这是最简单的方法,并使用
Locale
类中的预定义常量。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
的区域部分未定义。 因此,以下两个语句本质上是相等的://Region is missing in both cases Locale usLocale = Locale.US; //1 Locale usLocale = new Locale.Builder().setLanguage("en").build(); //2
-
语言环境构造器
Locale
类中提供了三个构造器:
Locale(String language)
Locale(String language, String country)
-
Locale(String language, String country, String variant)
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
-
Locale.Builder
类Locale.Builder
工具类可用于构造符合 IETF BCP(最佳通用实践)47 语法的Locale
对象。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
错误。 -
Locale.forLanguageTag()
方法如果您具有符合 IETF BCP 47 标准的语言标签字符串,则可以使用
forLanguageTag(String)
工厂方法。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
实例。
Locale.setDefault(Locale.FRANCE);
Locale
类还允许您为两个不同的类别设置默认的Locale
。
语言环境类别
Locale.Category
枚举表示两个区域设置类别:
Locale.Category.DISPLAY
– 适用于应用程序的用户界面,例如资源束消息。Locale.Category.FORMAT
– 用于日期和数字格式,具体取决于特定的区域信息
Locale.setDefault(Locale.Category.DISPLAY, Locale.US);
Locale.setDefault(Locale.Category.FORMAT, Locale.FR);
让我们来看一个例子。
//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);
将我的问题放在评论部分。
学习愉快!
资源: