0

私は 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);
            }
        }

うまくいくようです。ユーザーが言語を切り替えたときの検証については心配していません。現在の言語を取得し、サーバー側のエラーを翻訳しているようです。

しかし、これはこの問題を解決するための許容可能な方法ですか、それとも何か他のことをすべきですか. ありがとう。

4

0 に答える 0