2010-06-16 20 views
8

String.Format ile ilgili bir sorunum var. Aşağıdaki kod, ilk tam sayıdan ayrı olarak dizeyi doğru biçimde biçimlendirir. Güncel kültür Irak arap (ar-IQ) olarak ayarlanır:String.Format tamsayılarını arabellekte doğru şekilde dönüştürmüyor

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

metin sağdan sola biçimlendirilir ve 2, bir arap rakam dönüştürülür, ancak 1 değil.

Herhangi bir fikrin var mı? onlar görüntülemek sonra değilseniz

cevap

3

sayısal değerler dönüştürmek için varsayılan davranış, bir numara onlar Arapça göstermek (veya başka bir "Latin olmayan" karakteri) Arapça tarafından devam eğer temelde anlamına gelen "Bağlam" dir "standart" Avrupa numaraları.

Sen oldukça kolay olsa o davranışı değiştirebilirsiniz: beklediğiniz gibi çalışması gerektiğini

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); 

- daha fazla ayrıntı MSDN üzerinde.

+0

Mükemmel, alkışlar –

+0

Cool! Bu ayrıca zaman çizelgesi biçimlendirmesini, yani bir nedenle arapça {0: mm \: ss} değerini düzeltir. Rakamlı değiştirme ile bir formatlama hatası oluşur. – Wouter

+3

MSDN'de, "DigitSubstitution" ın gelecekte kullanım için herhangi bir ayrıntısı bulunmadığı belirtilmiştir: https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.digitsubstitution.aspx. Bu çözüm nasıl çalışır? – Isaac

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

çalışmıyor, ancak aşağıdaki işleri: ipucu için

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

Teşekkür !!!

+0

Kabul edilen cevaptan daha iyi. –