0

ModelState Validation Culture on HttpPostModelState ErrorMessage Культура Локализация

Error messages from ModelState not get localized

Я прочитал эти вопросы, и они не решить мою проблему.

Моя проблема: Ошибка проверки моделиStateMessages всегда на английском языке. Локализация не работает.

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. Потому что слишком поздно, когда вы устанавливаете метод Thread.CurrentThread.CurrentUICulture или Thread.CurrentThread.CurrentCulture в методе OnActionExecuting (ActionExecutingContext filterContext). Когда OnActionExecuting запускается, ошибки ModelState уже устанавливаются культурой сборки. Первое решение - переопределить метод Initialize (System.Web.Routing.RequestContext requestContext) в базовом контроллере и установить желаемую культуру в Thread.CurrentThread.CurrentUICulture и Thread.CurrentThread.CurrentCulture. Второе решение - переопределить Application_BeginRequest (отправителя объекта, EventArgs e) в Global.asax

Смежные вопросы