簡體   English   中英

ModelState ErrorMessage文化本地化

[英]ModelState ErrorMessage Culture Localization

HttpPost上的ModelState驗證文化

來自ModelState的錯誤消息未本地化

我已經閱讀了這些問題,但並沒有解決我的問題。

我的問題:ModelState驗證錯誤消息始終為英文。 本地化不起作用。

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());
    }
}

我需要在模型狀態錯誤開始之前設置區域性,但是我不知道該怎么做

您將無法通過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設置所需的區域性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM