2016-06-14 8 views
0

ASP.NET Core RC 2で固定カルチャを設定するにはどうすればよいですか? マイStartup.csUseRequestLocalizationを使用してすべての要求に単一のカルチャを使用させる

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に変更することはやりましたが、あなたの解決策は概念上より正確です。 –

関連する問題