Does anyone know as to how we can convert an English number like 196
to its Arabic form like ١٩٦
in .Net CORE C#.
foreach (DataRow dr in ds.Tables[0].Rows)
{
lstSurahs.Add(new Quran
{
ID = Convert.ToInt32(dr["ID"].ToString()),
DatabaseID = Convert.ToInt32(dr["DatabaseID"].ToString()),
SuraID = Convert.ToInt32(dr["SuraID"].ToString()),
// Need Arabic Form
VerseID = Convert.ToInt32(dr["VerseID"].ToString().ConvertNumerals()),
AyahText = dr["AyahText"].ToString()
});
}
There's no such method, but we can implement it; let's put the task as general as we can:
Given a
string source
andCultureInfo culture
, turn all digits withinsource
into national digits ifculture
provides them
Code:
using System.Globalization;
using System.Linq;
...
public static partial class StringExtensions {
public static String ConvertNumerals(this string source,
CultureInfo culture = null) {
if (null == source)
return null;
if (null == culture)
culture = CultureInfo.CurrentCulture;
string[] digits = culture.NumberFormat.NativeDigits.Length >= 10
? culture.NumberFormat.NativeDigits
: CultureInfo.InvariantCulture.NumberFormat.NativeDigits;
return string.Concat(source
.Select(c => char.IsDigit(c)
? digits[(int) (char.GetNumericValue(c) + 0.5)]
: c.ToString()));
}
}
Demo:
// "ar-SA" is "arabic Saudi Arabia"
Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("ar-SA")));
// "en-US" is "english United States"
Console.WriteLine("test 123".ConvertNumerals(CultureInfo.GetCultureInfo("en-US")));
Outcome:
test ١٢٣
test 123