c# - persa - ¿Cómo puedo mostrar los dígitos nativos específicos de la cultura en lugar de los números arábigos?
sistema de numeracion persa (3)
NativeDigits
propety y el campo subyacente en Reflector y no parece ser utilizado por nada cuando se trata de formatear (aunque el análisis Used by
en Reflector no garantiza que esté 100% lleno). Entonces, es posible que estos valores estén allí solo como referencia o algo así.
Puede usar su propia implementación IFormatProvider
utilizando la salida de cadena de ToString(culture)
y reemplazando manualmente todos los dígitos por los valores correspondientes de la matriz NativeDigits
. Aunque me temo que no es la respuesta que estabas buscando ...
Quiero convertir un valor numérico en una cadena, mostrando los dígitos específicos de la cultura. Por ejemplo, el idioma dari utilizado en Afganistán (nombre cultural "prs-AF") utiliza números arábigos orientales en lugar de los números arábigos utilizados en la mayoría de las culturas occidentales ( 0,1,2,3,4,5,6,7,8,9
).
Al examinar la clase CultureInfo incorporada en el Framework, enumera los dígitos nativos correctos (captura de pantalla tomada de la salida en LinqPad):
CultureInfo.CreateSpecificCulture("prs-AF").NumberFormat.NativeDigits
Sin embargo, cuando trato de convertir un número en una cadena para mostrar en esa cultura, no obtengo los dígitos nativos:
var number = 123.5;
var culture = CultureInfo.CreateSpecificCulture("prs-AF");
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
var text = number.ToString(culture);
Console.WriteLine(text);
¿Alguien puede decirme cómo mostrar los dígitos nativos?
La sustitución de dígitos es algo que tiene lugar cuando visualiza texto que contiene dígitos.
No se supone que cambie la representación de cadena de un número, como has visto.
El número 123.5
está formateado como la cadena 123.5
sin importar la sustitución de dígitos. Sin embargo, se muestra con los glifos apropiados si Thread.CurrentThread.CurrentCulture
se establece en consecuencia y si el motor de presentación admite la sustitución de dígitos. (WPF lo admite)
Quizás lo que necesitas es esto:
var number = 123.5;
var culture = CultureInfo.CreateSpecificCulture("prs-AF");
var text = String.Format(culture, "{0}", number);
Console.WriteLine(text);