首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelState ErrorMessage文化定位

ModelState ErrorMessage文化定位
EN

Stack Overflow用户
提问于 2014-10-09 07:42:46
回答 1查看 2K关注 0票数 2

ModelState Validation Culture on HttpPost

Error messages from ModelState not get localized

我读过这些问题,但他们没有解决我的问题。

我的问题是: ModelState验证errorMessages总是使用英语。本地化不起作用。

LocalizationAttribute.cs文件

代码语言:javascript
复制
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

代码语言:javascript
复制
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="false" />

Global.asax.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new LocalizationAttribute());
    }
}

在启动模型状态错误之前,我需要设置区域性,但我不知道如何做

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-16 01:10:43

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

OnActionExecuting被触发时,程序集区域性已经设置了ModelState错误。

解决方案1

在基本控制器中重写Initialize(System.Web.Routing.RequestContext requestContext)方法,并在Thread.CurrentThread.CurrentUICultureThread.CurrentThread.CurrentCulture中设置想要的区域性。

解决方案2

Application_BeginRequest(object sender, EventArgs e)中重写Global.asax,并在Thread.CurrentThread.CurrentUICultureThread.CurrentThread.CurrentCulture中设置所需的区域性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26272913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档