How can i convert English digits to Arabic digits?
As a quick test, I wrote this to list all the cutures which don't have "2010" in the year:
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);
}
the results are:
ar-SA : ربيع الأول 05, 1431
dv-MV : ربيع الأول 06, 1431
prs-AF : ربيع الأول 06, 1431
ps-AF : ربيع الأول 06, 1431
th-TH : กุมภาพันธ์ 19, 2553
To convert the numbers to Arabic text, it looks like this "NumToArabicString" project will do it. It doesn't look like there's anything built into the .net framework though.
The only solution is to manually convert the digits.
You could use the CurrentCulture.NumberFormat.NativeDigits
array instead of explicitly providing the Unicode characters to support any other languages in addition to the Arabic-Indic digits, but as far as builtin support by culture-aware classes such as DateTime
it seems unimplemented or something.
Thy this workaround (just list all cultures you want to use this numerals in the string array):
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;
}
}
Then use the method, for all of your strings
you want to have 'central Arabic numerals' in, like this:
DateTime.Now.ToString().ConvertNumerals();