繁体   English   中英

ASP.NET MVC如何在Cookie中保存多语言

[英]ASP.NET MVC How to Save multi language in Cookies

当使用更改语言并从Cookie读取语言时,我需要将语言存储在Cookie中以下代码可以很好地工作,但我不知道如何在Cookie中存储语言并从Cookie中读取语言

这是鲁特:

    routes.MapRoute(
      name: "DefaultLocalized",
      url: "{language}/{controller}/{action}/{id}",
      defaults: new
      {
          controller = "Home",
          action = "Index",
          id = UrlParameter.Optional,


      }
          );

ActionFilterAttribute:

    public class EnableMultiLanguage : ActionFilterAttribute
    {

        public EnableMultiLanguage()
        {
        }


        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string language = (string)filterContext.RouteData.Values["language"];
            if (!string.IsNullOrEmpty(language))
            {

                var cultureInfo = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(x => x.Name == language);

                if (cultureInfo == null)
                {
                    cultureInfo = new CultureInfo("en-US");
                }

                Thread.CurrentThread.CurrentCulture = cultureInfo;
                Thread.CurrentThread.CurrentUICulture = cultureInfo;
                filterContext.RouteData.Values["language"] = cultureInfo.Name;

            }
            else
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
                filterContext.RouteData.Values["language"] = "en-US";
            }
        }
    }
}

以及用户如何更改语言:

   <li>@Html.ActionLink("English", ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(), new { language = "en-US" }, null)</li>
   <li>@Html.ActionLink("French", ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(),new { language = "fr-FR" },null)</li>

Asp.Net中,您可以这样设置cookie:

HttpContext.Current.Response.Cookies.Add(new HttpCookie("languageKey", "languageValue"));

并得到它:

HttpCookie cultureCookie = HttpContext.Current.Request.Cookies["languageKey"];
var cultureName = cultureCookie.Value;

JavaScript中,您可以通过JQuery将其用于设置Cookie:

$.cookie("languageKey", "yourValue"); 

并得到它:

var languageValue = $.cookie("languageKey");

有一些方法可以在Asp.Net中使用它,但简单的一种方法是必须重写控制器的BeginExecute方法并在那里进行检查。

    public void OnAuthorization(AuthorizationContext filterContext)
    {
        var routes = filterContext.RouteData.Values;

        string culture = (routes["culture"] ?? defaultCulture).ToString();

        if (!filterContext.HttpContext.Request.Cookies.AllKeys.Contains("culture"))
        {
            HttpCookie StudentCookies = new HttpCookie("culture");
            StudentCookies.Value = culture;
            StudentCookies.Expires = DateTime.Now.AddYears(1);
            filterContext.HttpContext.Response.Cookies.Add(StudentCookies);
        }
        else
        {
            if (filterContext.HttpContext.Request.Cookies["culture"].Value != (routes["culture"] ?? "").ToString() && routes["culture"] != null)
            {
                filterContext.HttpContext.Response.Cookies["culture"].Value = (routes["culture"] ?? "").ToString();
            }
            if (routes["culture"] == null || routes["culture"] == UrlParameter.Optional)
            {
                culture = filterContext.HttpContext.Request.Cookies["culture"].Value;
            }
        }

        HelperClass.SetCulture(culture);


        if (!routes.ContainsKey("culture") || routes["culture"] == UrlParameter.Optional)
        {
            filterContext.Result = new RedirectResult("/" + culture + "/" + filterContext.HttpContext.Request.Url.LocalPath);
        }

        CultureInfo info = new CultureInfo(culture);
        Thread.CurrentThread.CurrentCulture = info;
        Thread.CurrentThread.CurrentUICulture = info;
        return;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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