ModelState中的ErrorMessage文化本土化

ModelState中的ErrorMessage文化本土化

问题描述:

ModelState Validation Culture on HttpPostModelState中的ErrorMessage文化本土化

Error messages from ModelState not get localized

我已阅读这些问题,他们并没有解决我的问题。

我的问题:ModelState验证errorMessages始终是英文。本地化不起作用。

LocalizationAttribute.cs文件

public class LocalizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.RouteData.Values["lang"] != null && 
      !string.IsNullOrWhiteSpace(filterContext.RouteData.Values["lang"].ToString())) 
     { 
      // set the culture from the route data (url) 
      string lang = filterContext.RouteData.Values["lang"].ToString(); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang); 
      Thread.CurrentThread.CurrentCulture = new CultureInfo(lang); 
      CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(lang); 
      CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo(lang); 
      filterContext.HttpContext.Session.Add("Culture", new CultureInfo(lang)); 
     } 
     else 
     { 
      // get the browser culture 
      string langHeader = filterContext.HttpContext.Request.UserLanguages[0]; 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader); 
      Thread.CurrentThread.CurrentCulture = new CultureInfo(langHeader); 
      filterContext.RouteData.Values["lang"] = langHeader; 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

的Web.config

<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="false" /> 

的Global.asax.cs

public class MvcApplication : HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     AutoMapperConfiguration.Configure(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     // Set the view engine 
     ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new MyCustomViewEngine(SiteSettings.Theme)); 
    } 
} 

个FilterConfig.cs

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
     filters.Add(new LocalizationAttribute()); 
    } 
} 

我需要的ModelState错误开始前设置的文化,但我不知道该怎么做

你不会达到你想要什么LocalizationAttribut。因为,在OnActionExecuting(ActionExecutingContext filterContext)方法中设置Thread.CurrentThread.CurrentUICulture或Thread.CurrentThread.CurrentCulture时,为时已晚。当OnActionExecuting被激发时,模型状态错误已经由程序集文化设置。 第一种解决方案是重写基础控制器中的Initialize(System.Web.Routing.RequestContext requestContext)方法,并在Thread.CurrentThread.CurrentUICulture和Thread.CurrentThread.CurrentCulture中设置想要的文化。第二个解决方案是覆盖Global.asax中的Application_BeginRequest(对象发件人,EventArgs e)