Mostrando un valor de moneda con formato en base a su cultura.

Introducción

Hace bastante tiempo que no escribo ya que he estado bastante liado, y entre otras cosas me he cambiado de PAIS…

Mi gran amigo Pedro monto un buen debate con auténticos cracks como Edu Tomas, Jose Maria Aguilar, Marc Rubiño y mas gente, sobre la “internacionalización” de enumerados dentro de MVC, es decir, que si tu aplicación es multiidioma tu enumerado debería poder estar localizado en los distintos idiomas que admita tu aplicación, ¿o no?

Bueno, en mi nueva aventura por tierras de William Wallace, estoy trabajando en una aplicación MVC localizada en distintos idiomas, hasta aqui todo bien (sin entrar en el tema de enumerados, que lo dejare para otro da…) entre en un debate con un compañero de trabajo acerca de la visualización de monedas dentro de la aplicación.

El debate surgió, debido a que a la hora de registrar un coste tu vas a indicar la moneda en la que va dicho coste, independientemente de la “cultura” en la que está establecida la aplicación para el usuario que esta registrando el coste, ¿cómo se debe mostrar luego dicha cantidad?. Por ejemplo:

var cost= 50.15;
 
cost.ToString("c", new CultureInfo("en-US"))

Si yo quiero introducir 50 USD, si el formato que vamos a utilizar es el que viene con la cultura en-US, debería ser “$ 50”.

Solución

Bien, ya que hemos dicho que tenemos almacenado el valor de la moneda y el importe podemos hacer uso de:

Para el proyecto que estoy trabajando ahora mismo que es un proyecto MVC, la solución mas interesante sería definir un método Extensor como el siguiente:

public static string CurrencyWithCulture(this HtmlHelper helper, decimal data, string locale = “en-US”)
        {
var culture = new System.Globalization.CultureInfo(locale);
return data.ToString(“C”, culture);
        }

Y poder utilizarlo en nuestras vistas a través de @Html.CurrencyWithCulture(Model.Cost,”es-ES”)

Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *