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

时间:2017-12-31 02:55:57

标签: java android fonts locale

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

Expected : ۱۲۳۴
Received : 1234

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

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

问题是我有一个字符串,很难找到数字部分并进行更改。我以前的字体工作正常,我无法理解这个字体的问题是什么。

任何想法如何全局解决所有textview的问题,或者至少是字符串?

6 个答案:

答案 0 :(得分:2)

尝试使用此方法:

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

答案 1 :(得分:1)

您可以使用

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

123将成为١٢٣

答案 2 :(得分:1)

使用此代码以波斯数字显示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);

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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("این یک نمونه است ۱۲ "));

答案 5 :(得分:0)

在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};