我正在学习 Asp.Net 全球化和本地化,我发现了这个例子。
该示例工作正常,但是当我更改日历中的月份时,日历文本会自动更改为英文。
我试过了
<asp:Calendar ID="Calendar1" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="language_Drp_SelectedIndexChanged">
</asp:Calendar>
但我仍然有问题。谁能帮我?
我正在学习 Asp.Net 全球化和本地化,我发现了这个例子。
该示例工作正常,但是当我更改日历中的月份时,日历文本会自动更改为英文。
我试过了
<asp:Calendar ID="Calendar1" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="language_Drp_SelectedIndexChanged">
</asp:Calendar>
但我仍然有问题。谁能帮我?
你找到的例子不是一个很好的例子。在 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;
这似乎是一个回发处理的问题。HTTP 连接本质上是无状态的。
很抱歉之前的回复,这只是一个测试。我刚刚回忆起回发问题。
通过使用 slfan 的代码并将 drop box 事件拦截方法更改为:
protected void language_Drp_SelectedIndexChanged(object sender, EventArgs e)
{
Session["locale"] = this.language_Drp.SelectedValue;
InitializeCulture();
}
它似乎工作正常,即使在选择特定日期时也能保持所选文化。
我不认为这个例子是正确的。这个
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();
}
这段代码来自这里。我还没有测试过它,可能需要一些调整,但它至少应该能让你上路。