【问题标题】:ModelState ErrorMessage Culture LocalizationModelState ErrorMessage 文化本地化
【发布时间】:2014-10-09 07:42:46
【问题描述】:

ModelState Validation Culture on HttpPost

Error messages from ModelState not get localized

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

我的问题:ModelState Validation 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());
    }
}

我需要在模型状态错误开始之前设置文化,但我不知道该怎么做

【问题讨论】:

    标签: asp.net asp.net-mvc localization culture defaultmodelbinder


    【解决方案1】:

    你不会通过LocalizationAttribute 实现你想要的,因为在OnActionExecuting(ActionExecutingContext filterContext) 方法中同时设置Thread.CurrentThread.CurrentUICultureThread.CurrentThread.CurrentCulture 为时已晚。

    OnActionExecuting 被解雇时,ModelState 错误已由程序集文化设置。

    解决方案 1

    覆盖基本控制器中的Initialize(System.Web.Routing.RequestContext requestContext) 方法,并在Thread.CurrentThread.CurrentUICultureThread.CurrentThread.CurrentCulture 中设置所需的文化。

    解决方案 2

    覆盖Global.asax 中的Application_BeginRequest(object sender, EventArgs e) 并在Thread.CurrentThread.CurrentUICultureThread.CurrentThread.CurrentCulture 中设置所需的文化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2015-04-20
      • 2012-06-10
      • 2023-03-20
      相关资源
      最近更新 更多