私は mvc の最初のローカリゼーション プロジェクトに取り組んでおり、優れた Griffin.MvcContrib を使用して作業を開始しています。
Griffin を使用して言語の変更とページ ビューを処理し、データベース リソースを介してモデルと検証を処理するカスタム プロバイダーをセットアップしました。
検証は、次のように FluentValidation で行われます。
RuleFor(x => x.Bin)
.Length(0, 50)
.WithMessage(localizationService.GetResource("Inspection.Bin.Length"));
サーバー側のエラーは翻訳されておらず、クライアント側のエラーのみが翻訳されていることに気付くまで、すべてがうまく機能しているように見えました。長い調査の結果、問題は、サーバー側の検証が完了した後にスレッド カルチャが設定されていることだと思われます。この別の投稿でも同じことが起こっていると思います。
ModelState.Value.Culture に MVC3 グローバリゼーションが設定されていません
これまでに機能させるために私が行ったことは、Global.asax ファイルに以下を配置することだけです。
protected void Application_BeginRequest(object sender, EventArgs e)
{
string CookieName = "GriffinLanguageSwitcher";
HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
if (currentContext.Request.Cookies[CookieName] != null)
{
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture =
new CultureInfo(currentContext.Request.Cookies[CookieName].Value);
}
}
うまくいくようです。ユーザーが言語を切り替えたときの検証については心配していません。現在の言語を取得し、サーバー側のエラーを翻訳しているようです。
しかし、これはこの問題を解決するための許容可能な方法ですか、それとも何か他のことをすべきですか. ありがとう。