String.Format在阿拉伯语中没有正确转换整数

时间:2010-06-16 16:18:36

标签: c# string formatting cultureinfo

我遇到String.Format问题。除了第一个整数之外,以下代码正确格式化了字符串。目前的文化是针对伊拉克阿拉伯语(ar-IQ):

int currentItem= 1;
string of= "من";
int count = 2;
string formatted = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", currentItem, of, count);

文本从右到左格式化,2转换为阿拉伯数字,但1不是。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

转换数值的默认行为是“上下文”,这基本上意味着如果一个数字由阿拉伯语进行,他们用阿拉伯语(或另一个“非拉丁语”字符)显示,如果它们不是那么它们显示在“标准的“欧洲数字。

您可以很容易地改变这种行为:

var culture = CultureInfo.CurrentCulture;
culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational; // Always use native characters
string formatted = string.Format(culture, "{0:d}{1:d}{2:d}", currentItem, of, count);

这应该按照您的预期运作 - 有关MSDN的详细信息。

答案 1 :(得分:1)

我无法获得其他任何答案。这对我有用:

string sOriginal = "1 of 2";
var ci = new CultureInfo("ar-IQ", false);
var nfi = ci.NumberFormat;
string sNative = ReplaceWesternDigitsWithNativeDigits(sOriginal, nfi).Replace("of", "من");

...

private static string ReplaceWesternDigitsWithNativeDigits(string s, NumberFormatInfo nfi)
{
    return s.Replace("0", nfi.NativeDigits[0])
        .Replace("1", nfi.NativeDigits[1])
        .Replace("2", nfi.NativeDigits[2])
        .Replace("3", nfi.NativeDigits[3])
        .Replace("4", nfi.NativeDigits[4])
        .Replace("5", nfi.NativeDigits[5])
        .Replace("6", nfi.NativeDigits[6])
        .Replace("7", nfi.NativeDigits[7])
        .Replace("8", nfi.NativeDigits[8])
        .Replace("9", nfi.NativeDigits[9]);
}

答案 2 :(得分:0)

var culture = CultureInfo.CurrentCulture;
culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;

不起作用, 但以下工作:

var culture = new CultureInfo("ar-SA");
culture.NumberFormat = new NumberFormatInfo();
Thread.CurrentThread.CurrentCulture = culture;

感谢提示!!!