2010-06-16 8 views
8

Ich habe ein Problem mit String.Format. Der folgende Code formatiert die Zeichenfolge korrekt getrennt von der ersten Ganzzahl. Aktuelle Kultur wird an den irakischen Arabisch (ar-IQ) gesetzt:String.Format konvertiert Integer nicht korrekt in arabisch

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

Der Text ist so formatiert, von rechts nach links und die 2 ist mit einer arabischen Ziffer umgewandelt, aber die 1 nicht.

Irgendwelche Ideen?

Antwort

3

Das Standardverhalten für die Konvertierung von numerischen Werten ist "Context", was bedeutet, dass wenn eine Zahl von Arabisch auf Arabisch (oder einem anderen "nicht-lateinischen" Zeichen) angezeigt wird, wenn sie nicht angezeigt werden "Standard" europäische Nummern.

können Sie dieses Verhalten ganz leicht wenn ändern:

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

Das sollte funktionieren wie Sie es erwarten - mehr Details zu MSDN.

+0

perfekt, Prost –

+0

Cool! Dies korrigiert auch die Zeitspannenformatierung, dh {0: mm \: ss} in Arabisch aus irgendeinem Grund. Bei der Ziffernersetzung tritt ein Formatierungsfehler auf. – Wouter

+3

Es wurde auf MSDN angegeben, dass 'DigitSubstitution' keinen Effekt hat und dass es für zukünftige Verwendung reserviert ist: https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.digitsubstitution.aspx. Wie funktioniert diese Lösung überhaupt? – Isaac

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

nicht funktioniert, aber die folgenden Werke:

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

Danke für den Hinweis !!!

+0

Besser als angenommene Antwort. –