3

英文数字(12345678)和其他一些符号(如十进制)在波斯语(۱2۳۴۵۶۷۸۹۰)或(۳/۱而不是3.1)中是不同的。我希望语言在我的控件中是可选的。

例如,当我将 TextBlock 的 TextProperty 设置为“2345”时,我希望它同时显示“2345”和“2345”,可选。

渲染控件时可以更改特定字体吗?我的意思是我覆盖渲染或其他一些方法,例如添加:

if (char=='5')
{
    char='۵';
}

还是有其他方法?谢谢;

4

3 回答 3

9

我使用我编写的一个简单代码:

private string toPersianNumber(string input)
{
   string[] persian = new string[10] { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };

   for (int j=0; j<persian.Length; j++)
       input = input.Replace(j.ToString(), persian[j]);

     return input;
}
于 2013-12-11T11:43:52.503 回答
1

这里我的代码通过扩展方法将英文数字转换为波斯数字:

 private static readonly string[] pn = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
    private static readonly string[] en = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };

public static string ToPersianNumber(this string strNum)
    {
        string chash = strNum;
        for (int i = 0; i < 10; i++)
            chash = chash.Replace(en[i], pn[i]);
        return chash;
    }
    public static string ToPersianNumber(this int intNum)
    {
        string chash = intNum.ToString();
        for (int i = 0; i < 10; i++)
            chash = chash.Replace(en[i], pn[i]);
        return chash;
    }
于 2017-10-24T07:50:54.487 回答
0

您可以使用CultureInfo,例如:

public static string NumberConvertor(this object o, CultureInfo to)
{
    if (o == null) return "";

    var s = o.ToString();
    for (int i = 0; i <= 9; i++)
    {
        s = s.Replace(i.ToString(), to.NumberFormat.NativeDigits[i]);
    }

    return s;
}

// usage example
var myNumber = 0123456789.4;
var converted = myNumber.NumberConvertor(new CultureInfo("fa-IR")); // output: ۱۲۳۴۵۶۷۸۹.۴
于 2019-07-13T15:12:19.433 回答