2016-12-06 14 views
1

私は、nl-BEにデフォルト言語を設定するasp.netコアプロジェクトを持っています。何らかの理由で、常にen-USという言語を使用します。常に同じ文化:en-US

以下のコードを参照してください(ps:データベースからリソースをフェッチした自分のApplicationLocalizerを作成しました。

Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
      //Add MVC 
      services.AddMvc() 
       .AddViewLocalization(); 

      //Localization factory 
      services.AddSingleton<IStringLocalizerFactory, ApplicationLocalizerFactory>(); 

      ... 
} 


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, ApplicationDbContext context) 
{ 
      ... 

      //Localization 
      var supportedCultures = new[] 
       { 
        new CultureInfo("en-US"), 
        new CultureInfo("nl-BE") 
       }; 
      var options = new RequestLocalizationOptions { 
       DefaultRequestCulture = new RequestCulture("nl-BE"), 
       SupportedCultures = supportedCultures, 
       SupportedUICultures = supportedCultures 
      }; 
      app.UseRequestLocalization(options); 

      ... 
} 

コントローラ

public string Index() 
{ 
    return CultureInfo.CurrentCulture.Name; 
} 

このコードスニペットは常にEN-US

を返し誰かが私は、この問題の解決に役立つことはできますか?

+0

デフォルトのカルチャがen-USではないにもかかわらず、ウェブブラウザの言語設定がen-USに設定されているため、コードがサポートされているため、コードが使用されているようです。 en-USの言語設定でクッキーが設定されていないことを確認してください。ローカリゼーションサンプルを使って遊んだことがあるようなローカルホストクッキーがあったので、クッキーをクリアすると返信用の –

+0

Thxsが役に立ちます。私はすでにブラウザ言語をnl-BEに変更し、すべてのクッキーを消去しましたが、en-US言語 – Wouter

答えて

1

無い結果とソリューションを検索する時間後、私は重いデバッグのために行って、設定(IApplicationBuilderアプリ...)で宣言されているミドルウェアサービスがためで実行されていることに気づきました。したがって、の後にローカライゼーションミドルウェアがと呼び出され、コントローラアクションが実行されました。

私がapp.UseRequestLocalization(options)呼び出しを開始したとき、私はコントローラアクションで適切にローカライズされたThread/CultureInfoを得ました。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, 
     IApplicationLifetime appLifetime) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     // THIS HAS TO BE A VERY FIRST MIDDLEWARE REGISTRATION 
     SetUpLocalization(app); 

     app.UseCors("AllowAllOrigins"); 

     app.UseMvc(); 

     appLifetime.ApplicationStopped.Register(() => ApplicationContainer.Dispose()); 
    } 

    private static void SetUpLocalization(IApplicationBuilder app) 
    { 
     var supportedCultures = new[] 
     { 
      new CultureInfo("en-US"), 
      new CultureInfo("pl-PL"), 
      new CultureInfo("pl") 
     }; 

     var options = new RequestLocalizationOptions 
     { 
      DefaultRequestCulture = new RequestCulture("en-US", "en-US"), 
      SupportedCultures = supportedCultures, 
      SupportedUICultures = supportedCultures 
     }; 
     // Configure the Localization middleware 
     app.UseRequestLocalization(options); 
    } 
関連する問題