Search code examples
c#.net.net-corearabic-support

How to convert an English number to an Arabic number e.g., 196 to ١٩٦?


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()
    });
 }

Solution

  • There's no such method, but we can implement it; let's put the task as general as we can:

    Given a string source and CultureInfo culture, turn all digits within source into national digits if culture 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