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-8296248open in new window 
tzdata更新至2023c
JDK 21已经更新为使用2023c tzdata。这实际上是对2023a的回滚,因为黎巴嫩处理夏令时的方式发生了变化。具体更新可见:JDK-8305113open in new window
如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群open in new window,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性专栏open in new window!