英文数字(12345678)和其他一些符号(如十进制)在波斯语(۱2۳۴۵۶۷۸۹۰)或(۳/۱而不是3.1)中是不同的。我希望语言在我的控件中是可选的。
例如,当我将 TextBlock 的 TextProperty 设置为“2345”时,我希望它同时显示“2345”和“2345”,可选。
渲染控件时可以更改特定字体吗?我的意思是我覆盖渲染或其他一些方法,例如添加:
if (char=='5')
{
char='۵';
}
还是有其他方法?谢谢;
我使用我编写的一个简单代码:
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;
}
这里我的代码通过扩展方法将英文数字转换为波斯数字:
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;
}
您可以使用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: ۱۲۳۴۵۶۷۸۹.۴