2

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

我试图设置NumberFormat属性CurrentCulturehere,为了定制显示金钱的格式,但显然这是不可能的。那么如何为CurrentCulture设置NumberFormat属性?

是用来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设置应用。

回答

4

可以在Startup.cs添加UseRequestLocalizationConfigure()方法:

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

+0

看来'app.UseRequestLocalization(新RequestCulture(修改))的签名;'发生了变化。它现在需要一个'RequestLocalizationOptions'对象。 –

相关问题