1

私は Asp.Net のグローバリゼーションとローカリゼーションを学んでおり、この例を見つけました。

例は正常に機能していますが、カレンダーの月を変更すると、カレンダーのテキストが自動的に英語に変更されます。

で試してみました

<asp:Calendar ID="Calendar1" runat="server" AutoPostBack="True" 
    OnSelectedIndexChanged="language_Drp_SelectedIndexChanged">
</asp:Calendar>

しかし、私はまだ問題を抱えています。誰でも私を助けることができますか?

4

3 に答える 3

2

あなたが見つけた例はあまり良いものではありません。ASP.NET でカルチャを設定する正しい場所は、メソッドをオーバーライドすることInitializeCultureです。私は通常、すべての Web フォームの共通の基本クラスにそのメソッドを実装します。

次のようなものを実装できます。

protected override void InitializeCulture()
{
    if (Session["locale"] != null)
    {
        string selectedLanguage = Session["locale"];

        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
    }
    base.InitializeCulture();
}

選択した言語をセッション変数のどこかに保存する必要があります。たとえば、次のようになります。

Session["locale"] = langDropdown.SelectedValue;
于 2013-09-08T16:46:37.997 に答える
0

ポストバック処理の問題のようです。HTTP 接続は本質的にステートレスです。


以前の回答で申し訳ありませんが、それは単なるテストでした。ポストバックの問題を思い出しました。

slfan のコードを使用し、ドロップ ボックスのイベント インターセプト メソッドを次のように変更します。

protected void language_Drp_SelectedIndexChanged(object sender, EventArgs e)
{
    Session["locale"] = this.language_Drp.SelectedValue;
    InitializeCulture();
}

特定の日付を選択しても、選択した文化を維持して、うまく機能しているようです。

于 2013-09-08T16:34:18.663 に答える