私のウェブサイトで言語を変更したいと思います。私はハンドラを使用してそれを行うことができると思ったので、ドロップダウンはhttp://domain.com/Handler.ashx?language=en-US、f.iになるでしょう。ASHXハンドラでThread.CurrentThread.CurrentCultureを変更する
だから、それはこのコードを持っている、ハンドラを呼び出します。
string selectedLanguage = context.Request.QueryString["language"];
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
context.Response.Redirect(context.Request.UrlReferrer.AbsoluteUri.ToString());
をしかし、それが戻ったときに、Thread.CurrentThread.CurrentCultureは初期値だったPT-BR、に設定されています。
私の質問は:ハンドラのスレッドは、コンテンツを読み込むaspxページとは異なりますか?そして、あなたは回避策として何を提案しますか?
は
ありがとうございます。私の望むように働いた。 ちょうど好奇心から:あなたはこの場合に何をお勧めしますか? ty again –
ローカリゼーションとカルチャ情報は、セッションレベルで処理しようとするものです。このハンドラ・アプローチを使用すると、このハンドラを介して実行されるすべてのリクエストの問題が修正されますが、不要な緊張と混乱がコードに加わります。あなたのページ(またはあなたのマスターページ)の上に置き、セッションに保存された値にスレッドカルチャを設定し、ユーザがドロップダウンから項目を選択したときにその値を変更する、セッション全体の問題を解決しました。 理解できない場合があります... – LorenVS
さて、この解決策は機能します。しかし、私がリンクをクリックするたびに、それは文化を単に「再開」します。元の答えに述べたのと同じ理由だと思います。私はセッションレベルの試みに行くつもりです。 –