TextView 数字以波斯字体显示为英文

TextView Numbers shown in English in Persian font

我正在将一个包含一些数字(全部为波斯语)的字符串加载到 android TextView 中。一切都很好,直到我更改了自定义字体,文本数字显示为英文数字。

Expected : ۱۲۳۴
Received : 1234

我知道我的新字体支持波斯语数字。当我使用正确显示的数字下方的代码更改数字区域设置时。

NumberFormat numberFormat = NumberFormat.getInstance(new Locale("fa", "IR"));
String newNumber = numberFormat.format(number);

问题是我有一个字符串,很难找到数字部分并更改它。我以前的字体也很好用,我不明白这个字体有什么问题。

知道如何为所有文本视图或至少为字符串全局解决此问题吗?

您必须自己翻译。 TextFormat 不会自动将阿拉伯数字转换为任何其他语言的数字,因为这实际上不是人们通常想要的。这些数字中的每一个都有自己的字符代码,简单地遍历字符串并用适当的波斯代码替换它们就足够了。

尝试使用这种方法:

private String setPersianNumbers(String str) {
    return str
            .replace("0", "۰")
            .replace("1", "۱")
            .replace("2", "۲")
            .replace("3", "۳")
            .replace("4", "۴")
            .replace("5", "۵")
            .replace("6", "۶")
            .replace("7", "۷")
            .replace("8", "۸")
            .replace("9", "۹");
}
private static String[] persianNumbers = new String[]{ "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };

public static String PerisanNumber(String text) {
    if (text.length() == 0) {
        return "";
    }
    String out = "";
    int length = text.length();
    for (int i = 0; i < length; i++) {
        char c = text.charAt(i);
        if ('0' <= c && c <= '9') {
            int number = Integer.parseInt(String.valueOf(c));
            out += persianNumbers[number];
        } else if (c == '٫') {
            out += '،';
        } else {
            out += c;
        }
    }
    return out;
}}

然后你可以像下面的vlock一样使用它

    TextView textView = findViewById(R.id.text_view);
    textView.setText(PersianDigitConverter.PerisanNumber("این یک نمونه است ۱۲ "));

你可以使用这个

 String NumberString = String.format("%d", NumberInteger);

123 会变成 ١٢٣

使用此代码以波斯数字显示 Hegira 日期:

    String farsiDate = "1398/11/3";
    farsiDate = farsiDate
            .replace('0', '٠')
            .replace('1', '١')
            .replace('2', '٢')
            .replace('3', '٣')
            .replace('4', '٤')
            .replace('5', '٥')
            .replace('6', '٦')
            .replace('7', '٧')
            .replace('8', '٨')
            .replace('9', '٩');
    dateText.setText(farsiDate);

在JS中,可以使用下面的函数:

function toPersianDigits(inputValue: any) {
  let value = `${inputValue}`;
  const charCodeZero = '۰'.charCodeAt(0);
  return String(value).replace(/[0-9]/g, w =>
    String.fromCharCode(w.charCodeAt(0) + charCodeZero - 48),
  );
 }

export {toPersianDigits};