我对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则不是。
有什么想法吗?
用于转换数值的默认行为是“上下文”,这基本上意味着,如果数字以阿拉伯语开头,则它们以阿拉伯语(或另一个“非拉丁”字符)显示,如果不是,则它们以“标准”显示“欧洲号码。
尽管您可以很容易地更改该行为:
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的更多详细信息。
var culture = CultureInfo.CurrentCulture;
culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;
不起作用,但以下作品:
var culture = new CultureInfo("ar-SA");
culture.NumberFormat = new NumberFormatInfo();
Thread.CurrentThread.CurrentCulture = culture;
感谢提示!
我无法获得其他任何答案。这对我有用:
string sOriginal = "1 of 2";
var ci = new CultureInfo("ar-SA", 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]);
}