C# 单击按钮后更改文化信息

C# 单击按钮后更改文化信息,c#,asp.net,multilingual,cultureinfo,C#,Asp.net,Multilingual,Cultureinfo,我有多语言的asp.net网站。 有一个母版页和default.aspx 我在母版页上放了两个按钮,一个是在我想把语言改成英语时点击,另一个是波兰语。当然,我想在单击这些按钮后更改语言(所有更改都会自动显示在页面上) 以下是两者的代码: protected void EnglishButton_Click(object sender, ImageClickEventArgs e) { string selectedLanguage = "en-US"; //Sets the co

我有多语言的asp.net网站。 有一个母版页和default.aspx

我在母版页上放了两个按钮,一个是在我想把语言改成英语时点击,另一个是波兰语。当然,我想在单击这些按钮后更改语言(所有更改都会自动显示在页面上)

以下是两者的代码:

protected void EnglishButton_Click(object sender, ImageClickEventArgs e)
{
    string selectedLanguage = "en-US";
    //Sets the cookie that is to be used by InitializeCulture() in content page
    HttpCookie cookie = new HttpCookie("CultureInfo");
    cookie.Value = selectedLanguage;
    Response.Cookies.Add(cookie);
    Server.Transfer(Request.Path);
}

protected void PolishButton_Click(object sender, ImageClickEventArgs e)
{
    string selectedLanguage = "pl-PL";
    //Sets the cookie that is to be used by InitializeCulture() in content page
    HttpCookie cookie = new HttpCookie("CultureInfo");
    cookie.Value = selectedLanguage;
    Response.Cookies.Add(cookie);
    Server.Transfer(Request.Path);
}
在default.aspx.cs中,我使用了InitializeCulture():

我添加了资源文件,并在一个标签中显示了实际的区域性:

Welcome.Text=“Culture:+System.Globalization.CultureInfo.CurrentCulture.ToString()

问题是,当我运行此应用程序并单击例如英语按钮(默认语言为波兰语)时,没有任何效果。如果我再次单击它或按F5键,将应用更改,并且在标签中,区域性显示为en US。 如果我想将语言更改回波兰语(它在第二次单击(或单击一次并刷新)后工作),则会发生Tsame


我做错了什么?

当您使用服务器时。将同一个web请求中发生的所有事情传输到服务器。这只是一个内部服务器处理重定向。
尝试使用Response.Redirect而不是Server.Transfer。这将强制客户端浏览器调用另一个请求,然后cookie将被发送到web服务器。

我怀疑问题可能是您使用服务器时出现的。传入您的按钮单击事件。您尝试过使用Response.Redirect吗?

为什么要使用Cookies?为什么不参加会议?我认为这次会议更方便,你不会有那个问题。当InitializeCulture()在Server.Transfer之后启动时,它仍然是相同的请求,仍然没有英文Cookie。您将其置于响应中,但响应仍在服务器端。
关于您的国际化解决方案。通常建议在URL中嵌入区域设置。考虑一个英语用户点击了英语按钮,然后发送一个链接给一个朋友。他的朋友打开链接,一个字也听不懂。他没有英文版的曲奇,所以他正在查看波兰语页面。
希望这有助于使用

Response.Redirect("Default.aspx");
代替

Server.Transfer(Request.Path); 
Server.Transfer(Request.Path);