我一直在从事我的第一个 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);
}
}
它似乎工作。当用户切换他们的语言时,我不担心验证,现在它似乎拾取当前语言并翻译服务器端错误。
但这是解决此问题的可接受方式,还是我应该做其他事情。谢谢。