2017-05-19 16 views
0

クッキーに言語を保存する必要があります。クッキーから言語と読み込み言語を変更する 以下のコードはうまく機能しますが、どこにどのように保存できますかASP.NET MVCクッキーに複数の言語を保存する方法

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

そして、ここでどのようにユーザー:

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


     } 
     ); 

ActionFilterAttribute:クッキーにとクッキー

から読み取るこれは敗走です言語を変更:Asp.Net

<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この回答には、あなたの言語のクッキーの追加と読み取り方法に関する情報が含まれています。 – kkakkurt

+0

@kkakkurt、ありがとうございます。私は上記の解決策を試した。残念ながら私は私のシナリオではうまくいきませんでした。私はちょうど私のシナリオと一致するクッキーの言語を保存して読む必要があります。ありがとうございました – Alex

答えて

0

あなたはこのようにクッキーを設定することができます。

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; 
    } 
関連する問題