2010-12-20 4 views
0

asp.net을 사용하고 있으며 사용자가 웹 사이트에서 사용할 문화권을 스스로 설정할 수있게하려고합니다. Global.asax에에서asp.net에서 쿠키를 사용하여 문화권을 설정하고 업데이트하지 않았습니다.

protected void Page_Load(object sender, EventArgs e) { 

    if (Request.QueryString["setLanguage"] != null) 
    { 
     HttpCookie languageCookie = new HttpCookie("language"); 
     languageCookie.Value = Request.QueryString["setLanguage"]; 
     languageCookie.Expires = DateTime.Now.AddDays(10); 
     Response.SetCookie(languageCookie); 
    } 
} 

가이 같은 쿠키를 사용합니다 :

protected void Application_BeginRequest(object sender, EventArgs e) { 
    HttpCookie languageCookie = System.Web.HttpContext.Current.Request.Cookies["language"]; 
    if (languageCookie.Value != null) 
    { 
     System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(language); 
     System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); 
    } 
} 

문제는 내가 응답에 쿠키를 설정 한 후이다 MasterPage에서 나는 언어 쿠키를 설정하기 위해 다음과 같은 코드가 있습니다. SetCookie 새 언어를 얻으려면 페이지를 새로 고침해야합니다. 사용자가 새 언어를 설정했을 때 페이지가 새 언어로 직접 다시로드 될 때 코드를 어떻게 만들 수 있습니까?

답변

1

당신은

Response.Redirect(Request.PathAndQuery); 

을 왜 그냥 쿠키를 설정 한 후 언어를 설정할 수 없습니다? BeginRequest 이벤트를 사용하여 게시되는 특정 입력을 확인하고 언어 설정을위한 대체 조건으로 사용할 수도 있습니다.

+0

감사 Asp.Net MVC를 사용하는 경우! Application_BeginRequest로 옮겼습니다. 쉬운 해결책을 생각하지 않았습니다. – Martin

1

나는 사용자가 선택한 언어에서 동일한 문제가있었습니다. 위해서는 당신이이 사이트의 모든 페이지에 작업을 위해서는

protected override void InitializeCulture() 
{ 
    HttpCookie languageCookie = System.Web.HttpContext.Current.Request.Cookies["language"]; 

    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(language); 
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); 

} 

에 그것을해야 할 일을, 나는 System.Web.UI.Page에서 상속 거기

를 구현하는 클래스를 생성
public class myBasePage : System.Web.UI.Page 
{ 
    protected override void InitializeCulture() 
    { 
    HttpCookie languageCookie = System.Web.HttpContext.Current.Request.Cookies["language"]; 

    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(language); 
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); 

    base.InitializeCulture(); 
    } 
} 

그때부터 모든 페이지는 myBasePage에서 상속받습니다.

이렇게하면 서버 (포스트 백) 컨트롤을 사용하여 언어를 설정하고 페이지가 다시로드되고 언어가 설정됩니다.

0

당신은

//A foreigner, has possibly brew a cookie for me 
public class SpeakNativeTongueAttribute : ActionFilterAttribute, IActionFilter 
{ 
    const string cookieName = "culture"; 

    void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var cookieKeys = filterContext.RequestContext.HttpContext.Request.Cookies.AllKeys; 

     if (cookieKeys.Contains(cookieName)) 
     { 
      //eat the cookie 
      var theCultureCookie = filterContext.RequestContext.HttpContext.Request.Cookies[cookieName]; 
      var theCulture = theCultureCookie.Value; 

      //say thanks in native tongue 
      System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(theCulture); 
      System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(theCulture); 
     } 
     else 
     { 
      //Didn't receive a cookie, don't speak their language, those bastards! 

     } 
    } 
} 
관련 문제