用哪一种?
final Locale locale = Locale.forLanguageTag("en-US");
或
final Locale locale = new Locale("en", "US");
当您查看它们的实现时,它们都有大量的代码,从这段代码中我看不出哪一种代码更快或者应该更好。
当我将它用于我的web应用程序的每一个请求时,很高兴知道哪一个更适合我的情况。
发布于 2022-09-07 16:08:10
常量
Locale
类为经常使用的区域设置提供了许多常量:Locale.CANADA
、Locale.CANADA_FRENCH
、Locale.CHINA
、Locale.UK
等。
与其通过new Locale("en", "US")
为英语作为语言和美国作为国家创建新的地区实例,不如使用静态字段Locale.US
。
区域构造函数
有三个重载的构造函数,它们允许您从语言、国家和变体创建Local
对象。
如果对这些信息了解得够多,请使用构造函数。
注意:构造函数调用总是在内存中创建新的对象。
Locale.forLanguageTag
静态方法Locale#forLanguageTag()
允许通过提供IETF BCP 47语言标签来构造Locale
的实例(参见https://www.rfc-editor.org/rfc/rfc4647和https://www.rfc-editor.org/rfc/rfc5646)。
使用语言标记,除了语言和国家,您可以指定各种细节,如日历,数字系统,货币。
注意:解析完成后的 forLanguageTag()
(以及Local.Builder
)提供了一个来自缓存的实例(如果已经存在)。
示例:
Locale buddhistCal = Locale.forLanguageTag("en-EN-u-ca-buddhist");
Locale arabicNum = Locale.forLanguageTag("en-EN-u-nu-arab");
Locale thaiNum = Locale.forLanguageTag("en-EN-u-nu-thai");
LocalDate date = LocalDate.now();
System.out.println(date);
System.out.println(date.format(DateTimeFormatter.ISO_DATE.localizedBy(buddhistCal)));
System.out.println(date.format(DateTimeFormatter.ISO_DATE.localizedBy(arabicNum)));
System.out.println(date.format(DateTimeFormatter.ISO_DATE.localizedBy(thaiNum)));
输出:
2022-09-07
2565-09-07 // buddhist calendar
٢٠٢٢-٠٩-٠٧ // arabic numbers
๒๐๒๒-๐๙-๐๗ // thai numbers
https://stackoverflow.com/questions/73637436
复制相似问题