当我通过 输出数字时,如何在JAVA 11中使用不受支持的区域设置(例如ar-US
)?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的输出是东方阿拉伯数字(尝试jdoodle,使用默认的 JDK 11.0.4):
Locale locale = Locale.forLanguageTag("ar-US");
System.out.println(String.format(locale, "Output: %d", 120));
// Output: ١٢٠
看来,这个问题来自于语言环境数据提供者从JRE到CLDR的切换(来源:@mcarth 在 Java 9 中的本地化更改)。以下是支持的语言环境列表:JDK 11 Supported Locales
更新
我将问题示例更新为ar-US
,因为我之前的示例没有意义。我们的想法是有一种在特定国家有意义的格式。在示例中,它将是美国 ( US
)。