2010-06-16 75 views
8

我有String.Format的問題。以下代碼正確地格式化字符串與第一個整數。當前區域性設置爲伊拉克阿拉伯語(AR-IQ):String.Format不能正確地轉換整數在阿拉伯語

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

文本格式化從右到左和2被轉換爲數字阿拉伯語,但1不是。

任何想法?

回答

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

+0

完美,歡呼聲 – 2010-06-17 09:43:27

+0

酷!這也修復了時間範圍格式,即由於某種原因阿拉伯語{0:mm \:ss}。用數字替換出現格式錯誤。 – Wouter 2014-06-26 12:38:55

+3

已在MSDN上說,'DigitSubstitution'沒有任何保留供未來使用任何影響:https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.digitsubstitution.aspx。這個解決方案如何工作? – Isaac 2015-08-10 13:23:15

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

不起作用, 但以下工作:

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

謝謝你的提示!

+0

比接受的答案更好。 – 2016-03-15 15:03:02