跳至主要內容

Java 21中关于Locale区域设置的变化

程序猿DD原创JavaJavaJava 21大约 2 分钟

Java 21中关于Locale区域设置的变化

当我们要尝试解决本地化问题时,首先要验证就是JVM使用的区域设置(Locale)是哪个。在Java 21中,弄清楚JVM使用的是哪个区域设置(Locale),这项任务变得更加容易了。

查看当前配置

在Java 21中,我们可以通过使用-X:showSettings来查看localetzdata,开发者可以通过-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.BuilderLocale.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

上次编辑于:
贡献者: 程序猿DD