2

The localization system has changed quite a bit in ASP.NET Core. Die CurrentCulture ist im aktuellen Thread nicht mehr verfügbar.Verwenden der NumberFormat-Eigenschaft in ASP.NET Core

Ich versuche NumberFormat Eigenschaft CurrentCulture zu setzen, wie here erklärt, um das Format für die Anzeige von Geld anzufertigen, aber es ist offensichtlich nicht mehr möglich, auf diese Weise. Wie stellt man die NumberFormat Eigenschaft für CurrentCulture ein?

Der Code, der für diese vor asp.net Kern arbeiten verwendet:

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 = ","; 

Dann zum Beispiel irgendwo in meinem Code ich tun möchte:

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

und erwarten, dass die numberFormat Einstellungen angewendet werden.

Antwort

4

Sie UseRequestLocalization zum Configure() Methode in Startup.cs hinzufügen:

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"))); 
     }); 
    } 

Ergebnis:

1.000,50 €

Auch mehr auf den Punkt der ursprünglichen Frage:

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"))); 
     }); 
    } 

Ergebnis:

RM1,000.50

+0

Es scheint, die Unterschrift von 'app.UseRequestLocalization (neu RequestCulture (modifiziert));' geändert hat. Es möchte jetzt ein 'RequestLocalizationOptions'-Objekt. –

Verwandte Themen