質問

ASP.NET MVCアプリケーションのローカライズを開始しました。ほとんどの文字列はリソースファイルで定義され、 Mattのローカリゼーションヘルパー。他の文字列はデータベースに保存する必要があります。

私の質問: リクエストパイプラインの早い段階で CurrentUICulture を設定し、アプリケーション全体で使用するか、必要に応じて Request.UserLanguages [0] を直接使用する必要がありますか?

Application_BeginRequestで CurrentUICulture を設定する必要があると考えています。実装は次のようになります。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var cultureName = HttpContext.Current.Request.UserLanguages[0];
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
}

これは CurrentUICulture を設定するのに最適な場所であり、 Request.UserLanguages [0] はその情報を取得するのに最適な場所ですか?


更新:

Arielの投稿は、 web.config を使用してコードなしで定義できることを示しています

<system.web>
  <!--If enableClientBasedCulture is true, ASP.NET can set the UI culture and culture for a Web page automatically, based on the values that are sent by a browser.-->
  <globalization enableClientBasedCulture="true" culture="auto:en-US" uiCulture="auto:en"/>
役に立ちましたか?

解決

HttpModuleを使用したサンプルは次のとおりです。

http://weblogs.manas .com.ar / smedina / 2008/12/17 / internationalization-in-aspnet-mvc /

その他のオプション、ベースコントローラークラスを作成し、ローカライズロジックを実装します。 または、アクションフィルター属性を使用しますが、すべてのコントローラーに追加するか、このアプローチを基本コントローラークラスと組み合わせることを忘れないでください。

他のヒント

Request.UserLanguages [0]は、ユーザーが見たい言語のヒントにすぎません。ほとんどのユーザーは、ブラウザの言語を変更する場所を知りません。

別のポイント:Request.UserLanguages [0]が有効な言語であることを確認しないでください。 nullでもかまいません。 (どのボットがそこにあるかわからない)

通常、ページには言語選択ツールがあります。ユーザーがそこで言語を選択すると、その言語はCookie、セッション、またはURLに保存されます。きれいに見えると思うので、URLを使用するのが好きです。

ユーザーがページに言語を設定せずにページを表示する場合、Request.UserLanguages [0]がサポートする言語であるかどうかを確認し、Thread.CurrentThread.CurrentUICultureを設定する必要があります。

フィルターを使用してThread.CurrentThread.CurrentUICultureを設定します。他のフィルターがThread.CurrentThread.CurrentUICultureを使用していない限り、問題ありません。それ以外の場合は、フィルターの正しい実行順序を設定する必要があります。

Mattsヘルパーも使用していますが、これまでのところ非常にうまく機能しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top