繁体   English   中英

如何将文化设置为用户为登录页面选择的文化?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM