2016-06-14 6 views
0

Wie kann ich eine feste Kultur in ASP.NET Core RC 2 festlegen? Mein Startup.cs:Erzwingen Sie alle Anfragen zur Verwendung einer einzelnen Kultur mit UseRequestLocalization

var options = new RequestLocalizationOptions 
{ 
    DefaultRequestCulture = new RequestCulture("pt-BR", "pt-BR"), 
    SupportedCultures = new[] { new CultureInfo("pt-BR") }, 
    SupportedUICultures = new[] { new CultureInfo("pt-BR") } 
}; 

options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => await Task.FromResult(new ProviderCultureResult("pt-BR", "pt-BR")))); 

app.UseRequestLocalization(options); 

Einige Anfragen sind noch immer en-US

+0

"einige Anfragen" definieren? Ist es eine spezielle Anfrage? Middleware oder Controller/Dienste? – Tseng

+0

Anfrage Lokalisierung funktioniert mit dem Client zur Verfügung gestellt bevorzugten Kultur, das ist wahrscheinlich, was das OP durch "einige Anfragen" bedeutet. –

Antwort

0

anfordern Lokalisierung bedeutet, dass für jede Anforderung, wird der Rahmen versuchen, die Lokalisierung durch den Anforderer bevorzugt zu verwenden. Was Sie wollen, ist die Standard-Kultur Ihrer Anwendung zu ändern immer Ihr Gebietsschema verwenden, egal was der Benutzer in ihrem Client-Browser festgelegt hat. Dazu können Sie eine kleine Middleware verwenden.

In Ihrer Startup.cs Datei folgend an der Spitze hinzu:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-BR"); 
    CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-BR"); 
    app.UseMiddleware<MyRequestLocalizationMiddleware>(); 
    ... 

} 

Und Ihre Middleware hinzufügen, irgendwo in Ihrem Projekt:

using Microsoft.AspNetCore.Http; 
using System.Globalization; 
using System.Threading.Tasks; 

namespace MyNamespace 
{ 
    public class MyRequestLocalizationMiddleware 
    { 
     private readonly RequestDelegate _next; 

     public MyRequestLocalizationMiddleware(RequestDelegate next) 
     { 
      _next = next; 
     } 

     public async Task Invoke(HttpContext context) 
     { 
      var defaultCulture = new CultureInfo("pt-BR"); 
      SetCurrentCulture(defaultCulture, defaultCulture); 
      await _next(context); 
     } 

     private void SetCurrentCulture(CultureInfo culture, CultureInfo uiCulture) 
     { 
      CultureInfo.CurrentCulture = new CultureInfo(culture.Name); 
     } 
    } 
} 
+1

Danke, das könnte funktionieren. In der Tat war das Problem mit diesem Problem verbunden: https://github.com/aspnet/Localization/issues/250 Ändern des Frameworks auf net46 hat den Trick, aber Ihre Lösung ist konzeptionell richtiger. –