2016-06-14 100 views
0

如何在ASP.NET Core RC 2中設置固定區域性? 我Startup.cs強制所有請求使用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); 

某些請求仍然得到en-US

+0

定義 「一些要求」?這是一種特殊的要求嗎?中間件或控制器/服務? – Tseng

+0

通過使用客戶提供的首選文化來請求本地化工作,這可能是OP通過「某些請求」所表達的意思。 –

回答

0

請求本地化意味着,對於每個請求,該框架將嘗試使用請求者首選的本地化。無論用戶在其客戶端瀏覽器中設置了什麼,您希望將您的應用程序的默認文化更改爲始終使用您的區域設置。爲此,您可以使用小型中間件。

在你Startup.cs文件中添加以下的頂部:

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

} 

而且在你的項目中添加你的中間件,地方:

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

謝謝,這可能會起作用。實際上,這個問題與這個問題有關:https://github.com/aspnet/Localization/issues/250 將框架更改爲net46有竅門,但是您的解決方案在概念上更加正確。 –

相關問題