【问题标题】:Using NumberFormat property in ASP.NET Core在 ASP.NET Core 中使用 NumberFormat 属性
【发布时间】:2016-04-21 12:00:08
【问题描述】:

The localization system has changed quite a bit in ASP.NET CoreCurrentCulture 在当前线程中不再可用。

我正在尝试按照here 的解释设置CurrentCultureNumberFormat 属性,以便自定义显示货币的格式,但显然这种方式不再可能。那么如何为CurrentCulture 设置NumberFormat 属性呢?

在 asp.net core 之前用于此的代码:

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 设置。

【问题讨论】:

    标签: c# asp.net-core tostring .net-core asp.net-core-localization


    【解决方案1】:

    您可以在Startup.cs中将UseRequestLocalization添加到Configure()方法中:

        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

    【讨论】:

    • app.UseRequestLocalization(new RequestCulture(modified)); 的签名好像变了。它现在需要一个 RequestLocalizationOptions 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多