2017-05-19 59 views
0

我需要存儲的語言cookie時使用改變了語言和閱讀餅乾 語言下面的代碼的偉大工程,但我不知道在哪裏,我怎麼能存儲的語言在餅乾和曲奇從ASP.NET MVC如何保存在餅乾多語言

讀這是潰敗:

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> 
+1

http://stackoverflow.com/a/37458723/3401842此答案包含有關如何爲您的語言添加和讀取cookie的信息。 – kkakkurt

+0

@kkakkurt,謝謝你的幫助。我試着提到的解決方案。不幸的是我沒有與我的情況一起工作。我只需要在與我的場景匹配的Cookie中保存並閱讀語言。謝謝 – Alex

回答

0

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控制器的方法,並檢查它。

0
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; 
    }