[英]How can I set the culture to the user selected culture for the login page?
我们网站的某些区域需要进行身份验证才能访问。
我们的网站可以选择从任何页面中选择用户的首选语言。
出于某种原因,即使重定向到登录页面后,即使选择了某种语言,该语言也会被设置为登录页面上的默认语言。
例如,如果用户在索引页面上(允许匿名)并且选择法语作为他们的语言,然后选择进入DB门户(需要登录),那么他们将被带到默认语言登录页面(英语)。 登录后语言是正确的。
应该发生的是:应该将用户重定向到以其所选语言显示的登录页面。
如果在登录页面上选择语言时,登录页面将更改语言。
这是登录名的配置:
<authentication mode="Forms">
<forms loginUrl="/Home/Login" />
</authentication>
路由配置:
routes.MapRoute(
name: "Localised",
url: "{language}/{controller}/{action}/{id}",
constraints: new {language = @"(\w{2})|(\w{2}-\w{2})" },
defaults: new {language = "en-GB", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "login",
url: "Home/Login",
defaults: new
{
language = CultureInfo.CurrentCulture.TwoLetterISOLanguageName,
controller = "Home",
action = "Login"
}
);
我正在使用这种方法进行本地化。
由于某种原因,即使语言是先前设置的,当前的区域性还是默认区域性。
如何配置路由以使用以前选择的区域性?
我当前的解决方案是在LocalizedControllerActivator.Create
方法中设置会话变量,以存储会话的区域性,然后在Login请求的处理程序中设置“当前区域性”:
public IController Create(RequestContext requestContext, Type controllerType)
{
string lang = requestContext.RouteData.Values["language"] as string ?? _DefaultLanguage;
if (lang != _DefaultLanguage)
{
try
{
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
// Store the culture in the session here
requestContext.HttpContext.Session["culture"] = Thread.CurrentThread.CurrentCulture;
}
catch (Exception)
{
throw new NotSupportedException(string.Format("ERROR: Invalid language code '{0}'.", lang));
}
}
return DependencyResolver.Current.GetService(controllerType) as IController;
}
public ActionResult Login(UserLogin user = null, string ReturnUrl = "/")
{
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = Session["culture"] as CultureInfo;
//do the rest of the login stuff below
// ...
return View();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.