Eng*_*uad 9 java locale javafx arabic javafx-8
我读了这篇文章:JDK 8和JRE 8支持的语言环境,它声明:
编号系统可以由带有编号系统ID的语言标签指定
????????????????????????????????????????????????????????????????? ? Numbering System ID ? Numbering System ? Digit Zero Value ? ????????????????????????????????????????????????????????????????? ? arab ? Arabic-Indic Digits ? \u0660 ? ?????????????????????????????????????????????????????????????????
现在,为了证明这一点,我写了以下代码:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我期待输出是这样的:
0
123
但是,输出如下:
0
123
这样做的主要目的是使JavaFX GUI显示阿拉伯数字而不是英文数字,因为它使用默认语言环境(我可以设置它Locale.setDefault(...)).
所以我的问题是,如何使用区域设置中的编号系统来显示Java中的本地化数字?那么,是否可以在JavaFX上应用它?
Eng*_*uad 18
我做到了!仔细阅读了LocaleJavaDoc之后,我就能够生成所需的语言环境:
Locale arabicLocale = new Locale.Builder().setLanguageTag("ar-SA-u-nu-arab").build();
Run Code Online (Sandbox Code Playgroud)
这相当于:
Locale arabicLocale = new Locale.Builder().setLanguage("ar").setRegion("SA")
.setExtension(Locale.UNICODE_LOCALE_EXTENSION, "nu-arab").build();
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用一种称为(Unicode语言环境/语言扩展)的东西:
UTS#35,"Unicode区域设置数据标记语言"定义了可选属性和关键字,以覆盖或优化与区域设置关联的默认行为.关键字由一对键和类型表示.
使用扩展键"u"(UNICODE_LOCALE_EXTENSION)将关键字映射到BCP 47扩展值.
数字的扩展键是(nu),我使用的值是(arab).
您可以在此处查看所有扩展密钥的列表.
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |