Java 21中关于Locale区域设置的变化
Java 21中关于Locale区域设置的变化
当我们要尝试解决本地化问题时,首先要验证就是JVM使用的区域设置(Locale
)是哪个。在Java 21中,弄清楚JVM使用的是哪个区域设置(Locale
),这项任务变得更加容易了。
查看当前配置
在Java 21中,我们可以通过使用-X:showSettings
来查看locale
和tzdata
,开发者可以通过-X:showSettings:locale
仅显示Locale信息,如下所示:
$ java -X:showSettings:locale -version
Locale settings:
default locale = English (United States)
default display locale = English (United States)
default format locale = English (United States)
tzdata version = 2023c
...
修改默认Locale
如果您需要更改默认的Locale
,可以使用静态工厂方法Locale.of()
、Locale.Builder
或Locale.forLanguageTag()
来编程实现,并将该值传递给Locale.setDefault()
。
瑞典语更新
在2006年,瑞典的排序规则发生了变化,区分了字母w和v,这个变化已经反映在JDK-8306927中。根据旧的规则,一个数组{"vc", "va", "wb"}
将被排序为{"va", "wb", "vc"}
;而根据新的规则,它将被排序为{"va", "vc", "wb"}
。
如果你想使用旧的瑞典排序规则,可以通过将sv-u-co-trad
传递给Locale.forLanguageTag(String)
来实现,比如下面这样:
Locale TRADITIONAL_SWEDISH = Locale.forLanguageTag("sv-u-co-trad");
CLDR 43
Java 默认使用 CLDR 作为其区域设置数据,该数据已在JDK 21中更新至版本43。
此版本的关键变化是支持coverageLevels.txt
文件。具体更新可查看:JDK-8296248
tzdata更新至2023c
JDK 21已经更新为使用2023c tzdata。这实际上是对2023a的回滚,因为黎巴嫩处理夏令时的方式发生了变化。具体更新可见:JDK-8305113
如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性专栏!