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 变量中的某个位置,例如:

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

这似乎是一个回发处理的问题。HTTP 连接本质上是无状态的。


很抱歉之前的回复,这只是一个测试。我刚刚回忆起回发问题。

通过使用 slfan 的代码并将 drop box 事件拦截方法更改为:

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

它似乎工作正常,即使在选择特定日期时也能保持所选文化。

于 2013-09-08T16:34:18.663 回答
0

我不认为这个例子是正确的。这个

protected void language_Drp_SelectedIndexChanged(object sender, EventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(this.language_Drp.SelectedValue);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(this.language_Drp.SelectedValue);
Label1.Text = System.DateTime.Now.ToString();
}

应该改成这个

protected override void InitializeCulture()
{
    if (this.language_Drp.SelectedValue != null)
    {
        UICulture = this.language_Drp.SelectedValue ;
        Culture = this.language_Drp.SelectedValue ;

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

这段代码来自这里。我还没有测试过它,可能需要一些调整,但它至少应该能让你上路。

于 2013-09-08T16:36:07.257 回答