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