设置阿拉伯语编号系统区域设置不显示阿拉伯数字

我读了这篇文章: JDK 8和JRE 8支持的语言环境 ,它声明:

编号系统可以由具有编号系统ID的语言标签指定╔═════════════════════╦══════════════════════╦══════════════════╗ ║ Numbering System ID ║ Numbering System ║ Digit Zero Value ║ ╠═════════════════════╬══════════════════════╬══════════════════╣ ║ arab ║ Arabic-Indic Digits ║ \u0660 ║ ╚═════════════════════╩══════════════════════╩══════════════════╝

现在,为了certificate这一点,我写了以下代码:

 import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.util.Locale; public class Main { public static void main(String[] args) { Locale locale = new Locale("ar", "sa", "arab"); DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale); NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); System.out.println(dfs.getZeroDigit()); System.out.println(numberFormat.format(123)); } } 

我期待输出是这样的:

0
123

但是,输出如下:

0
123

这样做的主要目的是使JavaFX GUI显示阿拉伯数字而不是英文数字,​​因为它使用默认语言环境(我可以使用Locale.setDefault(...)设置它)。

所以我的问题是,如何使用语言环境中的编号系统来显示Java中的本地化数字? 那么,是否可以在JavaFX上应用它?

我做到了! 仔细阅读Locale的JavaDoc后 ,我能够生成所需的语言环境:

 Locale arabicLocale = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build(); 

这相当于:

 Locale arabicLocale = new Locale.Builder().setLanguage("ar").setRegion("SA") .setExtension(Locale.UNICODE_LOCALE_EXTENSION, "nu-arab").build(); 

请注意,我使用的是一种称为(Unicode语言环境/语言扩展)的东西:

UTS#35,“Unicode区域设置数据标记语言”定义了可选属性和关键字,以覆盖或优化与区域设置关联的默认行为。 关键字由一对键和类型表示。

使用扩展键“u”(UNICODE_LOCALE_EXTENSION)将关键字映射到BCP 47扩展值。

数字的扩展键是( nu ),我使用的值是( arab )。


您可以在此处查看所有扩展密钥的列表。