格式化不同区域性中的数字



我有以下XAML

<TextBlock HorizontalAlignment="{Binding AyaHorizentalAlignment}" Padding="20,0,30,0" Text="{Binding Aya}" Foreground="Black" FontSize="50" TextWrapping="Wrap" />

和背后的代码

System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("fa-IR");
for (int rowIndex = startingAya; rowIndex < totalAyas; rowIndex++)
{
quranTextByLine = Regex.Replace(reader.ReadLine(), @"[|d|]", string.Empty) + "﴿" + string.Format(culture,"{0}",counter++) + "﴾";
quranTranslationByLine = Regex.Replace(translationReader.ReadLine(), @"[|d|]", string.Empty);
_sura.Add(new Sura() { Aya = quranTextByLine, AyaTranslation = quranTranslationByLine });
}

我想显示波斯语/阿拉伯语格式的"计数器",格式是"۱۲۽\178 0; \17.81; \۶ṻ̐ọ",我不知道如何格式化"计数器"?(我也有可用的字体)

谢谢,

"full".NET Framework包含属性NumberFormatInfo.DigitSubstitution。如果你是在.NET中开发的,如果你想用阿拉伯-印度数字格式化数字,这将是你要使用的属性。但是,此属性在框架的Windows Phone版本中不可用。

如果一个属性或方法存在于完整的.NET Framework中,但不存在于Windows Phone中,这通常表明该功能不在该框架的Windows Phone版本中。因此,您将不得不自己使用阿拉伯-印度数字将数字转换为字符串。

可以编写一种转换方法,使用拉丁数字将数字转换为字符串,然后用阿拉伯-印度数字替换拉丁数字,例如:

private const char LatinDigitZero = '0';
private const char ArabicIndicDigitZero = 'u0660';
public static string ConvertToArabicIndicString(int number)
{
string result = string.Format("{0:d}", number);
for (int digit = 0; digit <= 9; ++digit)
{
result = result.Replace((char)(LatinDigitZero + digit), (char)(ArabicIndicDigitZero + digit));
}
return result;
}

这可以很容易地适应于将CultureInfo对象作为附加参数。

这使用了与拉丁数字0至9相对应的阿拉伯-印度数字分别是Unicode字符u0660u0669的事实。

我对此进行了快速测试,据我所知,它确实有效。然而,我对任何使用阿拉伯-印度数字的语言都不流利,所以我不能说这种方法是否正确地将数字转换为字符串。特别是,我不知道这个方法是按照正确的顺序生成数字,还是正确地处理负数。希望任何必要的修改对您来说都应该很容易。

最新更新