12
votes

Comment puis-je convertir des chiffres d'anglais en chiffres arabes?

J'ai ce code C # par exemple xxx

maintenant le thread actuel charge la culture arabe. Donc le résultat est comme celui-ci xxx

mais je ne veux pas que "2010" et le "19" soit en anglais (également appelé latin ou Arabe de l'Ouest chiffres) - Je veux des nombres d'arabe est comme "ù ¢".

J'ai essayé xxx

donné le même résultat. Donc toute idée?


1 commentaires

Que vous attendez-vous à arriver? en.wikipedia.org/wiki/arabic_digits


7 Réponses :


-1
votes

Nous utilisons des chiffres arabes en anglais. En tant que tel, ce que vous voyez est le comportement correct - et uniquement possible.


1 commentaires

Les chiffres anglais sont appelés arabe, mais les Arabes les représentent différemment comme tels 0-9: 0123456789



6
votes

En tant que test rapide, j'ai écrit ceci pour répertorier toutes les mignonnes qui n'ont pas "2010" dans l'année: xxx pré>

Les résultats sont les suivants: p>

ar-SA : ربيع الأول 05, 1431
dv-MV : ربيع الأول 06, 1431
prs-AF : ربيع الأول 06, 1431
ps-AF : ربيع الأول 06, 1431
th-TH : กุมภาพันธ์ 19, 2553


0 commentaires

18
votes

Ta cette solution de contournement (listez simplement toutes les cultures que vous souhaitez utiliser ces chiffres dans le tableau de chaînes):

DateTime.Now.ToString().ConvertNumerals();


1 commentaires

L'article Wikipedia que vous avez lié à indiquer que les chiffres arabes standard sont utilisés dans le monde arabe et que les chiffres arabes orientaux que vous faites référence ne sont utilisés que dans quelques nations spécifiques.



6
votes

La seule solution consiste à convertir manuellement les chiffres.

Vous pouvez utiliser le tableau CURRENCULTUNT.NOMBERFORDIGITUGITS Au lieu d'apporter explicitement les caractères Unicode pour prendre en charge toute autre langue en plus des chiffres de l'arabe-INDITION, mais en ce qui concerne le soutien de la culture. Catégories conscientes telles que DateTime Cela semble sans écran ou quelque chose.


0 commentaires

3
votes

Essayez ceci:

public static string ToIndicDigits(this string input)
{
        return input.Replace('0', '\u0660')
                .Replace('1', '\u0661')
                .Replace('2', '\u0662')
                .Replace('3', '\u0663')
                .Replace('4', '\u0664')
                .Replace('5', '\u0665')
                .Replace('6', '\u0666')
                .Replace('7', '\u0667')
                .Replace('8', '\u0668')
                .Replace('9', '\u0669');
    }
}


0 commentaires

2
votes

Vous pouvez utiliser le Windows. Globalisation.numberformatting.numeralsystemTranslator classe à traduire entre le latin et l'un des systèmes de numéros pris en charge. Pour traduire en arabe, définissez la propriété numeralsystem sur "arabe" , vous pouvez appeler la méthode translatenileaux .

Alternativement, vous pouvez simplement utiliser Windows .Globalization.dateTimeformatting.dateTimeformatting classe directement.


0 commentaires

3
votes

J'ai pris l'approche / la solution de contournement @Marcel B, car je suis confronté au même problème que la question initiale des États.

Dans mon cas, c'est pour la culture "AR-KW". La seule différence em> est que j'utilise le NumberFormat.NAndifiégits Strong> qui fait déjà partie du cultureinfo fort>. P>

vous peut vérifier cela comme ceci (basé sur votre scénario de fil actuel): p> xxx pré>

Donc, le code ressemblera à ceci: p>

private static class ArabicNumeralHelper
{
    public static string ConvertNumerals(this string input)
    {
        CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;

        if (new string[] { "ar-lb", "ar-SA" }
              .Contains(cultureInfo.Name))
        {
            return input.Replace('0', cultureInfo.NumberFormat.NativeDigits[0])
                        .Replace('1', cultureInfo.NumberFormat.NativeDigits[1])
                        .Replace('2', cultureInfo.NumberFormat.NativeDigits[2])
                        .Replace('3', cultureInfo.NumberFormat.NativeDigits[3])
                        .Replace('4', cultureInfo.NumberFormat.NativeDigits[4])
                        .Replace('5', cultureInfo.NumberFormat.NativeDigits[5])
                        .Replace('6', cultureInfo.NumberFormat.NativeDigits[6])
                        .Replace('7', cultureInfo.NumberFormat.NativeDigits[7])
                        .Replace('8', cultureInfo.NumberFormat.NativeDigits[8])
                        .Replace('9', cultureInfo.NumberFormat.NativeDigits[9]);
        }
        else return input;
    }
}


0 commentaires