2010-06-16 16 views
8

Tengo un problema con String.Format. El siguiente código formatea la cadena correctamente, aparte del primer entero. la cultura actual se establece en árabe iraquí (ar-IQ):String.Format no convierte enteros correctamente en árabe

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

El texto es de derecha a izquierda formateado y el 2 se convierte en un dígito árabe, pero el 1 no lo es.

¿Alguna idea?

Respuesta

3

El comportamiento predeterminado para convertir valores numéricos es "Contexto", que básicamente significa que si un número es procesado por árabe se muestran en árabe (u otro carácter "no latino"), si no lo están, se muestran en números europeos "estándar".

Usted puede cambiar ese comportamiento bastante facilidad sin embargo:

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

que debería funcionar como se espera - más detalles sobre MSDN.

+0

perfecto, aplausos –

+0

¡Genial! Esto también soluciona el formato del intervalo de tiempo, es decir, {0: mm \: ss} en árabe por algún motivo. Con la sustitución de dígitos se produce un error de formateo. – Wouter

+3

Se ha afirmado en MSDN que 'DigitSubstitution' no tiene ningún efecto; está reservado para uso futuro: https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.digitsubstitution.aspx. ¿Cómo funciona esta solución? – Isaac

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

no funciona, pero las siguientes obras:

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

Gracias por la pista !!!

+0

Mejor que la respuesta aceptada. –

Cuestiones relacionadas