代码之家  ›  专栏  ›  技术社区  ›  Dai Bok

如何将ASP.Net窗体身份验证全局化为多种语言?

  •  3
  • Dai Bok  · 技术社区  · 15 年前

    我希望有人能帮助解决这个问题?

    当前我的ASP.Net MVC网站使用窗体身份验证设置如下my web.config:

    <authentication mode="Forms">
      <forms loginUrl="en/User/Signin" timeout="2880" />
    </authentication>
    

    我们有一些路由规则使用url中的前缀/en/作为语言的标识符,但问题是如果有人访问我们的法语站点www.web.com/fr/Secure/privateData,它们被重定向到www.web.com/en/User/Signin,这反过来又将文化设定为英语。因此,在登录之后,用户可能需要将那里的语言改回法语。

    不好的!

    因此,如果网站需要支持更多语言,那么我需要在web配置中执行以下操作:

    <authentication mode="Forms">
        <%if (isGerman()) { %>
            <forms loginUrl="de/User/Signin" timeout="2880" />
        <%} else if (isFrench()) {%>
            <forms loginUrl="fr/User/Signin" timeout="2880" />
        <%} else { %>
            <forms loginUrl="en/User/Signin" timeout="2880" />
        <% } %>
    </authentication>
    

    多谢了!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Gertjan    15 年前

    你不能全球化一个登录页面,根据语言设置显示语言字符串吗?

    否则,您应该使用某种重定向,设置一个登录页并根据该页中的语言设置重定向到正确的页。但是,您可能需要向配置中添加额外的代码,告诉系统登录的语言版本在身份验证模式下不受保护(您可以排除/更改web.config中网站某些部分的设置),以防止无休止的循环。

        2
  •  1
  •   jim tollan    15 年前

    我做了一些非常类似的事情,并有一个basecontroller设置正确的登录语言。我现在没有代码,但大致是这样的:

        public string Lang { get; private set; } // at the top of the abstact basecontroller
    
        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {
            Lang = requestContext.RouteData.Values["lang"].ToString() ?? System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
            ViewData["Lang"] = Lang;
    
            base.Initialize(requestContext);
        }
    

    吉姆