0

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錯誤開始前設置的文化,但我不知道該怎麼做

回答

0

你不會達到你想要什麼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)