我正在尝试以编程方式设置网站的文化,因此当用户单击按钮时,他们可以将页面上的文字从英语更改为西类牙语。这是我的代码:

protected void btnChangeLanguage(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo("es");
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es);
}

<asp:Label ID="lblDisplay" runat="server" meta:ResourceKey="lblDisplay" />

<asp:Button ID="btnChangeLanguage" runat="server" Text="Change Language"
        OnClick="btnChangeLanguage_Click" />

我有一个Default.aspx.resx文件,其键/值是:lblDisplay.text/English
和一个Default.aspx.es.resx文件,其键/值是:lblDisplay.text/Espanol

我无法将我的标签文本从“英语”更改为“西类牙语”。有人看到我在做什么错吗?

最佳答案

ASP.Net 线程用于一个请求的生命周期,而不是用户的整个 session 。更糟糕的是,有时框架会回收同一个线程来处理额外的请求,而不是将它返回到池中并获得一个新的请求(这没什么大不了的,因为下一个请求将再次初始化文化,但仍然如此)。

相反,您需要覆盖页面的 InitializeCulture() 方法。请参阅此链接以获取更多详细信息:
http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

10-07 18:31