MVC アプリケーションのローカライズに夢中になっています。
私の最近の質問の後、私はこのアプローチに従いました:
- 言語は Session["lang"] に格納されます
- 各コントローラーは、OnActionExecuting をオーバーライドする独自の BaseController から継承し、このメソッドでセッションを読み取り、CurrentCulture と CurrentUICulture を設定します。
これは、データ注釈レイヤーが来るまでうまく機能します。アクション自体が実行される前に呼び出されるように見えるため、常にデフォルト言語でエラーメッセージが表示されます!
フィールド宣言は次のようになります。
[Required(ErrorMessageResourceName = "validazioneRichiesto", ErrorMessageResourceType = typeof(Resources.Resources))]
public string nome { get; set; }
それで、私が電話をかけることができる合理的な場所はありますか?
Controller コンストラクターで Data Annotation Model Binder を初期化します。
public CardController() : base() {
ModelBinders.Binders.DefaultBinder =
new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
}
したがって、Session はコントローラーのコンストラクターで常に null であり、データ注釈がフィールドを検証した後にアクション オーバーライドが呼び出されるため、CurrentCulture と CurrentUICulture をどこで設定してローカライズされたエラーを取得できますか?
CurrentCulture と CurrentUiCulture を Application_* (例: Application_AcquireRequestState または Application_PreRequestHandlerExecute) に入れてみましたが、効果がないようです...