gpt4 book ai didi

java - 如何在 Java 11 中使用不受支持的 Locale 和 String.format() 中的数字

转载 作者:行者123 更新时间:2023-12-03 20:23:59 28 4
gpt4 key购买 nike

如何在 中使用不受支持的语言环境(例如 ar-US ) JAVA 11 当我通过 String.format() 输出一个数字时?
Java 8 这工作得很好(尝试 jdoodle ,选择 JDK 1.8.0_66):

Locale locale = Locale.forLanguageTag("ar-US");
System.out.println(String.format(locale, "Output: %d", 120));
// Output: 120
Java 11 输出在 Eastern Arabic numerals (尝试 jdoodle ,使用默认 JDK 11.0.4):
Locale locale = Locale.forLanguageTag("ar-US");
System.out.println(String.format(locale, "Output: %d", 120));
// Output: ١٢٠
看来,这个问题来自 中的开关语言环境数据提供者 表格 JRE CLDR (来源: Localization Changes in Java 9 by @mcarth)。以下是支持的语言环境列表: JDK 11 Supported Locales
更新
我将问题示例更新为 ar-US ,因为我之前的例子没有意义。这个想法是有一个在特定国家有意义的格式。在示例中,它将是美国 ( US )。

最佳答案

该行为符合被视为首选的 CLDR Locale .为了确认这一点,可以使用 Java-8 中的相同代码段执行

-Djava.locale.providers=CLDR
如果你退一步看 JEP 252: Use CLDR Locale Data by Default ,详情如下:

The default lookup order will be CLDR, COMPAT, SPI, where COMPATdesignates the JRE's locale data in JDK 9. If a particular providercannot offer the requested locale data, the search will proceed to thenext provider in order.


因此,简而言之,如果您真的不希望默认行为成为 Java-11 的行为,您可以使用 VM 参数更改查找顺序
-Djava.locale.providers=COMPAT,CLDR,SPI
可能有助于进一步了解 picking the right language using CLDR! 的更多信息

关于java - 如何在 Java 11 中使用不受支持的 Locale 和 String.format() 中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65218374/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com