Je charge une chaîne qui contient un certain nombre (tout en persan) dans un Android TextView. Tout allait bien jusqu'à ce que je change ma police personnalisée, les nombres de texte affichés sous forme de nombre anglais.

Expected : ۱۲۳۴
Received : 1234

Je sais que ma nouvelle police prend en charge le numéro persan. Lorsque je change les paramètres régionaux du numéro en utilisant le code sous le numéro affiché correctement.

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

Le problème est que j'ai une chaîne et qu'il est difficile de trouver la partie numérique et de la changer. aussi ma police précédente fonctionne bien et je ne peux pas comprendre quel est le problème avec cette police.

Une idée comment résoudre globalement ce problème pour toutes les vues de texte, ou au moins pour une chaîne?

4
Mohamad MohamadPoor 31 déc. 2017 à 05:55

5 réponses

Meilleure réponse

Essayez d'utiliser cette méthode:

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", "۹");
}
4
Alireza Noorali 28 mars 2020 à 04:06

Vous devrez le traduire vous-même. TextFormat ne traduit pas automatiquement les chiffres arabes vers ceux d'une autre langue, car ce n'est en fait pas ce que les gens veulent généralement. Chacun de ces chiffres a ses propres codes de caractères, une simple promenade de la chaîne et les remplacer par le code persan approprié serait suffisant.

0
Gabe Sechan 31 déc. 2017 à 03:17
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;
}}

Et après cela, vous pouvez l'utiliser comme ci-dessous l'horloge

    TextView textView = findViewById(R.id.text_view);
    textView.setText(PersianDigitConverter.PerisanNumber("این یک نمونه است ۱۲ "));
0
Amihan co 6 févr. 2019 à 19:59

Utilisez ce code pour afficher la date de l'hégire en nombre persan:

    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);
1
mehdi 23 janv. 2020 à 15:43

Vous pouvez utiliser ceci

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

123 deviendra ١٢٣

1
Sameer Muslim 9 mai 2019 à 21:52