[英]ModelState ErrorMessage Culture Localization
我已經閱讀了這些問題,但並沒有解決我的問題。
我的問題: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.CurrentUICulture
或Thread.CurrentThread.CurrentCulture
時為時已晚。
觸發OnActionExecuting
,程序集區域性已設置了ModelState
錯誤。
解決方案1
在基本控制器中重寫Initialize(System.Web.Routing.RequestContext requestContext)
方法,並在Thread.CurrentThread.CurrentUICulture
和Thread.CurrentThread.CurrentCulture
設置所需的區域性。
解決方案2
在Global.asax
重寫Application_BeginRequest(object sender, EventArgs e)
並在Thread.CurrentThread.CurrentUICulture
和Thread.CurrentThread.CurrentCulture
設置所需的區域性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.