ASP.NET MVC:Thread.CurrentThread.CurrentUICultureを設定するタイミング
-
06-07-2019 - |
質問
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ヘルパーも使用していますが、これまでのところ非常にうまく機能しました。