使用ASP.NET全球化无法更改月份

时间:2013-09-08 14:52:32

标签: asp.net .net globalization

我正在学习Asp.Net全球化和本地化,我找到了this example

示例工作正常,但是当我更改日历中的月份时,日历文本会自动更改为英语。

我用

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

但我仍然有问题。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

这似乎是回发治疗的问题。 HTTP连接本质上是无状态的。


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

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

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

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

答案 2 :(得分: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();
}

此代码来自here。我没有对它进行测试,可能需要进行一些调整,但至少应该让你上路。