Как я могу преобразовать английские цифры в арабские цифры?

У меня есть этот код C#, например,

DateTime.Now.ToString("MMMM dd, yyyy");

Теперь текущий поток загружает арабскую культуру. Таким образом, результат похож на это

???? 19, 2010

Но я не хочу '2010' и '19' быть на английском языке (также известный как латинские или Западные арабские цифры) - я хочу Восточные арабские цифры как "٢".

Я попробовал

DateTime.Now.ToString("MMMM dd, yyyy", CultureInfo.GetCultureInfo("ar-lb"));

дал тот же результат. Так какая-либо идея?

11
задан Sebastian Inones 2 October 2019 в 11:33
поделиться

4 ответа

Это обходной путь (просто перечислите все культуры, в которых вы хотите использовать эти цифры в массиве строк):

private static class ArabicNumeralHelper
{
    public static string ConvertNumerals(this string input)
    {
        if (new string[] { "ar-lb", "ar-SA" }
              .Contains(Thread.CurrentThread.CurrentCulture.Name))
        {
            return input.Replace('0', '\u06f0')
                    .Replace('1', '\u06f1')
                    .Replace('2', '\u06f2')
                    .Replace('3', '\u06f3')
                    .Replace('4', '\u06f4')
                    .Replace('5', '\u06f5')
                    .Replace('6', '\u06f6')
                    .Replace('7', '\u06f7')
                    .Replace('8', '\u06f8')
                    .Replace('9', '\u06f9');
        }
        else return input;
    }
}

Затем используйте метод для всех ваших строк , которые вы хотите иметь 'центральными арабскими цифрами 'in, например:

DateTime.Now.ToString().ConvertNumerals();
15
ответ дан 3 December 2019 в 02:52
поделиться

Мы используем арабские цифры в английском языке. Таким образом, то, что вы видите, является правильным и единственно возможным поведением.

0
ответ дан 3 December 2019 в 02:52
поделиться

В качестве быстрого теста я написал это, чтобы перечислить все сокращения, в которых нет "2010" в год:

        foreach (var ci in 
            from c in CultureInfo.GetCultures(CultureTypes.AllCultures)
            where !c.IsNeutralCulture
            let date = DateTime.Now.ToString("MMMM dd, yyyy", c)
            where !date.Contains("2010")
            orderby c.Name
            select new {c.Name, date})
        {
            Console.WriteLine("{0} : {1}", ci.Name, ci.date);
        }

результаты следующие:

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

Чтобы преобразовать числа в арабский текст, похоже, этот проект «NumToArabicString» сделает это. Однако не похоже, что в инфраструктуру .net что-то встроено.

6
ответ дан 3 December 2019 в 02:52
поделиться

Единственным решением является ручное преобразование цифр.

Вы можете использовать массив CurrentCulture.NumberFormat.NativeDigits вместо явного предоставления символов Unicode для поддержки любых других языков в дополнение к арабско-индийским цифрам, но что касается встроенной поддержки классами с поддержкой культур, такими как DateTime, то она кажется нереализованной или что-то вроде того.

4
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: