Java 21 中的区域设置更新 - 一口 Java

本地化通常具有挑战性,微妙的错误可能会潜入你的应用程序。幸运的是,JDK 21 对此区域进行了多次更新,这应该对开发者有所帮助。我们来看看吧!

查找默认区域设置和 tzdata

在尝试解决本地化问题时,第一步是验证 JVM 使用的区域设置。随着 -X:showSettings 选项更新为包括区域设置和 tzdata,这一过程在 JDK 21 中变得更加容易。它还可以配置为仅显示区域设置数据信息,如下所示,使用 -X:showSettings: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
    ...

还显示了所有可用的区域设置;但是,由于有数百个区域设置,因此为了可读性,本文省略了该信息。

请参阅:JDK-8305950

更改默认区域设置

如果你需要更改默认 Locale,可以使用静态工厂方法 Locale.of()Locale.BuilderLocale.forLanguageTag() 以编程方式完成,并将值传递给 Locale.setDefault()

瑞典语更新

2006 年,瑞典语排序规则进行了更改,以区分字母 wv。此更改已反映在 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");

请参阅:JDK-8306927

CLDR 43

Java 默认使用 CLDR 作为其区域设置数据,该数据已在 JDK 21 中更新到版本 43。此版本中的主要更改是对 coverageLevels.txt 文件的支持。

请参阅:JDK-8296248

将 tzdata 更新为 2023c

JDK 21 已更新为使用 2023c tzdata。由于黎巴嫩处理夏令时的变化,这实际上是回滚到 2023a。

请参阅:JDK-8305113

延伸阅读

2023c tzdata

编码愉快!