1

Webアプリケーションに関しては、私は初心者です。しかし、私はASP.NET 2.0を使用してそれを学ぶために最善を尽くしており、長い投稿をお詫びします。

マスターページ(M1)と3つの異なるコンテンツページC1、C2、C3があり、基本的にマスターページM1を使用してそれぞれのコンテンツをコンテンツプレースホルダーに入力します。

すべてのWebフォームはローカライズされ、適切な言語のリソース文字列がリソース(xml)ファイルに追加されます(例:Resource.en-US.xml、Resource.de-DE.xmlなど)。最後に、リソースはコードで参照されます。適切な現在の文化と現在のuicultureを設定した後。

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
//where the btnSubmit is a control on the form
btnSubmit.Text = rm.GetString("Submit", Thread.CurrentThread.CurrentCulture);

ここで質問があります。ユーザーがasp:imageを使用してasp:linkbuttonとして使用できるマスターページの表示言語を変更するオプションを含めました。ユーザーが目的の言語のリンクボタンをクリックするたびに、コンテンツページコントロールには、選択したカルチャに対応するコンテンツ文字列全体が表示されます。

  1. どうすればこれを達成できますか?

  2. 選択した言語を含めるためにセッション変数を実装する必要がありますか?または、Cookieに保存することも機能しますか?

私が試したこと

マスターページの読み込みイベント。基本的にCurrentThreadのカルチャプロパティとuicultureプロパティを設定し、選択した言語をセッション変数内に格納するメソッドSetCultureSpecificInformationを呼び出してみました。

また、asp:linkbuttonOnClickイベントハンドラーでの同様の実装。この場合、セッション変数を変更します。

最後に、コンテンツWebページのOnPage_Loadイベントでセッション変数を参照します。

しかし、どういうわけか、上記のアプローチは望ましい結果を生み出していません。言語の切り替えには一貫性がありません。同じものを実装するための十分な設計アプローチで私を助けることができる人は誰でも。

前もって感謝します

4

2 に答える 2

3

Global.asaxファイルを追加します。次のコードを記述します。

 void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Code that runs on application startup
        HttpCookie cookie = HttpContext.Current.Request.Cookies["CultureInfo"];
        if (cookie != null && cookie.Value != null)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
        }
        else
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");
        }
    }

そしてマスターページページで

protected void ddlanguage_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["language"] = ddlanguage.SelectedValue;

        //Sets the cookie that is to be used by Global.asax
        HttpCookie cookie = new HttpCookie("CultureInfo");
        cookie.Value = ddlanguage.SelectedValue;
        Response.Cookies.Add(cookie);

        //Set the culture and reload for immediate effect.
        //Future effects are handled by Global.asax
        Thread.CurrentThread.CurrentCulture = new CultureInfo(ddlanguage.SelectedValue);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(ddlanguage.SelectedValue);

        if (cookie.Value == "en")
        {
            Session["ddindex"] = 0;
        }

        else if (cookie.Value == "fr")
        {
           Session["ddindex"] = 1;
        }

        else if (cookie.Value == "de")
        {
           Session["ddindex"] = 2;
        }
        Server.Transfer(Request.Path);
    }
}
于 2012-06-26T06:51:43.157 に答える
0

私の場合、マスター ページからカルチャを設定するためにいくつかのボタンを使用し、マスター ページの分離コードでこのコードを使用しました。

 protected void IdiomButton_Click(object sender, ImageClickEventArgs e)
    {
        ImageButton theButton = (ImageButton)sender;
        Session["culture"] = theButton.ID == "ItalianButton" ? CultureInfo.CreateSpecificCulture("it-IT") : CultureInfo.CreateSpecificCulture("en-US");
        Response.Redirect(Request.RawUrl);
    }

次に、使用したすべての子ページで:

protected override void InitializeCulture()
    {
        if (Session["culture"] != null)
            System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(Session["culture"].ToString());
        else
            System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("it-IT");
    }
于 2016-10-11T14:53:58.260 に答える