Использование свойства NumberFormat в ASP.NET Core

Система локализации немного изменилась в ASP.NET Core. CurrentCulture больше не доступен в текущей теме.

Я пытаюсь установить NumberFormat собственностью CurrentCulture как объяснялось здесь, для того, чтобы настроить формат отображения денег, но, очевидно, это уже невозможно. Так как же установить NumberFormat собственность для CurrentCulture?

Код, который работал для этого до ядра asp.net:

CurrentCulture modified = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name);
Thread.CurrentThread.CurrentCulture = modified;
var numberFormat = modified.NumberFormat;
numberFormat.CurrencySymbol = "RM";
numberFormat.CurrencyDecimalDigits = 2;
numberFormat.CurrencyDecimalSeparator = ".";
numberFormat.CurrencyGroupSeparator = ",";

Тогда, например, где-то в моем коде я хочу сделать:

string fMoney;
fMoney = money.ToString("C");
return fMoney;

и ожидать numberFormat настройки, которые будут применены.

1 ответ

Решение

Можете добавить UseRequestLocalization к Configure() метод в Startup.cs:

    public void Configure(IApplicationBuilder app)
    {
        app.UseIISPlatformHandler();
        app.UseRequestLocalization(new RequestCulture(new CultureInfo("es")));
        app.Run(async (context) =>
        {
            context.Response.ContentType = "text/html";
            await context.Response.WriteAsync(HtmlEncoder.Default.HtmlEncode(1000.5f.ToString("C")));
        });
    }

Результат:

1.000,50 €

Кроме того, ближе к исходному вопросу:

    public void Configure(IApplicationBuilder app)
    {
        app.UseIISPlatformHandler();

        var modified = new CultureInfo(CultureInfo.DefaultThreadCurrentCulture.DisplayName);
        modified.NumberFormat.CurrencySymbol = "RM";
        modified.NumberFormat.CurrencyDecimalDigits = 2;
        modified.NumberFormat.CurrencyDecimalSeparator = ".";
        modified.NumberFormat.CurrencyGroupSeparator = ",";

        app.UseRequestLocalization(new RequestCulture(modified));
        app.Run(async (context) =>
        {
            context.Response.ContentType = "text/html";
            await context.Response.WriteAsync(HtmlEncoder.Default.HtmlEncode(1000.5f.ToString("C")));
        });
    }

Результат:

RM1,000.50

Другие вопросы по тегам