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