web-dev-qa-db-ja.com

VS開発サーバー上のASP.NET MVCアプリケーションのカルチャを設定し、IIS

これは、この質問のより具体的でクリーンなバージョンです- 開発環境とテスト環境の異なるDateTimeFormat

ASP.NET MVCプロジェクトのglobal.asax.csのApplication_BeginRequest()メソッドには次のコードがあります。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

Controller Actionにブレークポイントを設定すると、Thread.CurrentThread.CurrentCultureの次の値が表示されます。

  1. VS devサーバー-「en-GB」
  2. In IIS-"en-US"

質問です-IISのどの設定がこれに責任があり、どのようにオーバーライドできますか?

46
dygo

まあ、実際にIIS設定が責任を負うものを見つけられませんでしたが、Application_PreRequestHandlerExecute()でオーバーライドし、最終的に機能しました:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
19
dygo

スレッドのカルチャを設定するのではなく、次のようにweb.configで指定できます。

<configuration>
    <system.web>
        <globalization uiCulture="en-GB" culture="en-GB" />
    </system.web>
</configuration>

これは、ASP.NETでカルチャを指定するより適切な方法です。

125
vcsjones

クライアント(つまり、ユーザーエージェント/ブラウザー)に自分が望む文化を決定させるのは良い選択肢だと思います。これを行うには、web.configのculture要素のuiCultureおよびglobalization属性をautoに設定します。 「バージョン1」を参照してください。

次のようなこともできます:broswers設定を取得しますが、可能でなければフォールバック値としてen-USを使用します。 「バージョン2」を参照してください。

バージョン1:

<configuration>
   <system.web>    
      <globalization culture="auto" uiCulture="auto"/>
   </system.web>
</configuration>

バージョン2:

<configuration>
   <system.web>    
       <globalization culture="auto:en-US" uiCulture="auto:en-US" />
   </system.web>
</configuration>


詳細については、この記事も参照してください。 ブラウザロケールに基づいたASP.NETロケールの自動検出および設定

6
Martin

MVCでアプリのデフォルトのカルチャを設定するには、このrouteRouteConfigクラスに簡単に追加できます。

 foreach (var route in routes.Cast<Route>().Where(route =>
 route.GetType() == typeof(MultiLingualRoute)))
             {
                 route.Url = "{language}/" + route.Url;
                 route.Defaults.Add("language", "YOUR-DEFAULT");

             }
0
A.Dara