format RTL text and column in console C#

1.1k Views Asked by At

I'm using 'string.Format' to manipulate text and creating columns

    string.Format("{0, -4}{1, -16}{2, 11}\n", "#", "Name", "Price")

and result in English and LTR format is correct:

    ‎#   Name                  Price
    --- -------            --------
    1   Product1             234440
    2   Product2              34455

when I change languages and use arabic characters, the columns alignment display is not correct:

    ‎#     نام               قیمت
    --- -------            --------
    1   محصول ۲            ۳۴۲۳۴
    2   محصول ۳            ۴۵۳۴۵۳

I use \u200E and \u200F also, but result did not changes.

my desired column display is:

    نام                  قیمت   #
    -----              ------- ---
    محصول۱              ۱۲۲۲۳   #
    محصول۲               ۲۲۳۳   #

Is there any way to solve this problem?

1

There are 1 best solutions below

4
On

Please use following code sample. Second series that are based on baseStr2 works as you desired.

static void Main(string[] args)
{
    var baseStr = "{0, -4}{1, -16}{2, 11}\n";

    Console.WriteLine(string.Format(baseStr, "#", "Name", "Price"));
    Console.WriteLine(string.Format(baseStr, "#", "Product1", "1232132"));
    Console.WriteLine(string.Format(baseStr, "#", "P 2", "88"));
    Console.WriteLine("------------------------");

    Console.WriteLine(string.Format(baseStr, "#", "نام", "قیمت"));
    Console.WriteLine(string.Format(baseStr, "#", "فرش", "1232132"));
    Console.WriteLine(string.Format(baseStr, "#", "یخچال فریزر", "88"));

    Console.WriteLine("------------------------");

    var baseStr2 = "{2, -11}{1, 16}{0, 14}\n";

    Console.WriteLine(string.Format(baseStr2, "#", "Name", "Price"));
    Console.WriteLine(string.Format(baseStr2, "#", "Product1", "1232132"));
    Console.WriteLine(string.Format(baseStr2, "#", "P 2", "88"));
    Console.WriteLine("------------------------");

    Console.WriteLine(string.Format(baseStr2, "#", "نام", "قیمت"));
    Console.WriteLine(string.Format(baseStr2, "۳۴۲۳۴", "فرش", "1232132"));
    Console.WriteLine(string.Format(baseStr2, "۴۵۳۴۵۳", "یخچال فریزر", "88"));

    Console.WriteLine("------------------------");

    Console.ReadLine();
}