3

我想为每个访问该网站的用户创建一个 cookie 并为其设置一个默认值。cookie 以英语启动网站,以后用户可以根据自己的喜好更改语言。

我在 global.asax 中这样做

        HttpCookie myCookie = new HttpCookie("Language"); 
        myCookie.Value = "EN";
        myCookie.Expires = DateTime.Now.AddDays(1d);
        HttpContext.Current.Response.Cookies.Add(myCookie);

我尝试在以下事件中使用上述代码,

Application_Start
Application_BeginRequest
Session_Start

在上述所有三个事件中,每次页面加载时都将 cookie 值设置为“EN”。不应该是这样。当用户选择其他语言时,语言必须设置为 HttpCookie("Language")。

4

2 回答 2

2

您应该首先检查cookie是否尚未定义..是否已经设置您无需再次设置..当用户选择一种新语言时,您应该重新定义它...一般算法,操作顺序是这样的

  • 如果用户正在更改语言
    • 将应用程序的语言更改为所选的
    • 将其保存到 cookie
  • 否则,如果之前的设置保留在 cookie 中
    • 将应用程序的语言更改为保留的
  • 否则就是新的访问
    • 将应用程序的语言更改为默认语言
    • 将 cookie 设置为默认值

这应该在每个请求中进行评估..因为用户可以在任何页面更改语言..所以放置代码的正确事件应该是Application_BeginRequest

这是您的代码..我将语言参数保存在中,CurrentUICulture因此不仅可以在应用程序的任何位置查询它,而且框架还使用它来自定义格式..我还假设用户可以传递一个名为lang包含他想要的语言..

void Application_BeginRequest(object sender, EventArgs e) 
{
    //if user is changing language
    if(!String.IsNullOrEmpty(HttpContext.Current.Request["lang"]))
    {
        String sLang =  HttpContext.Current.Request["lang"] as String;
        //change the language of the application to the chosen
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(sLang);
        //save it to cookie
        HttpCookie myCookie = new HttpCookie("Language"); 
        myCookie.Value = sLang;
        myCookie.Expires = DateTime.Now.AddDays(1d);
        HttpContext.Current.Response.Cookies.Add(myCookie);
    }
    //setting as been preserved in cookie
    else if(HttpContext.Current.Request.Cookies["Language"])
    {
        //change the language of the application to the preserved
        String sLang =  HttpContext.Current.Request.Cookies["lang"].value as String;
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(sLang);
    }
    else//new visit
    {
        //change the language of the application to the default
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");
        //set cookie to the default
        HttpCookie myCookie = new HttpCookie("Language"); 
        myCookie.Value = "en-us";
        myCookie.Expires = DateTime.Now.AddDays(1d);
        HttpContext.Current.Response.Cookies.Add(myCookie);
    }
}
于 2013-08-07T08:36:24.070 回答
0

您需要编写代码将 cookie 值更新为用户选择的值。当您说“当用户选择其他语言时”时,无论在哪里,您都需要从集合中检索该 cookie,并在那里更新 cookie 值。只有这样它才能按照您需要的方式工作。

于 2013-08-07T10:03:55.740 回答