我正在学习Asp.Net全球化和本地化,我找到了this example。
示例工作正常,但是当我更改日历中的月份时,日历文本会自动更改为英语。
我用
尝试了<asp:Calendar ID="Calendar1" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="language_Drp_SelectedIndexChanged">
</asp:Calendar>
但我仍然有问题。任何人都可以帮助我吗?
答案 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。我没有对它进行测试,可能需要进行一些调整,但至少应该让你上路。