3

Web サイトにアクセスするユーザーごとに、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

上記の 3 つのイベントすべてで、ページが読み込まれるたびに Cookie の値を「EN」に設定します。そうであってはなりません。ユーザーが他の言語を選択する場合、言語を HttpCookie("Language") に設定する必要があります。

4

2 に答える 2

2

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 に答える