格式化不同文化中的数字

时间:2014-01-19 09:54:09

标签: windows-phone-8

我有以下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 });
}

我想用波斯语/阿拉伯语格式显示“计数器”,格式为“123456789”,我不知道如何格式化“计数器”? (我也有可用的字体)

谢谢,

1 个答案:

答案 0 :(得分:0)

“完整”.NET Framework包含属性NumberFormatInfo.DigitSubstitution。如果您使用.NET进行开发,那么如果您希望使用Arabic-Indic数字格式化数字,那么这将是您将使用的属性。但是,此属性在框架的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字符\u0660\u0669

我给了它一个快速测试,据我所知它有效。但是,我对使用阿拉伯字符数字的任何语言都不熟悉,所以我不能说这种方法是否正确地将数字转换为字符串。特别是,我不知道这种方法是否生成带有正确数字的数字或正确处理负数的数字。希望您可以轻松地进行任何必要的修改。