Java 21 中的区域设置更新 - 一口 Java
比利·科兰多,2023 年 12 月 4 日
本地化通常具有挑战性,微妙的错误可能会潜入你的应用程序。幸运的是,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.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");
请参阅:JDK-8306927
CLDR 43
Java 默认使用 CLDR 作为其区域设置数据,该数据已在 JDK 21 中更新到版本 43。此版本中的主要更改是对 coverageLevels.txt
文件的支持。
请参阅:JDK-8296248
将 tzdata 更新为 2023c
JDK 21 已更新为使用 2023c tzdata。由于黎巴嫩处理夏令时的变化,这实际上是回滚到 2023a。
请参阅:JDK-8305113
延伸阅读
编码愉快!