我有多语言的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():
protected override void InitializeCulture()
{
HttpCookie cookie = Request.Cookies["CultureInfo"];
// if there is some value in cookie
if (cookie != null && cookie.Value != null)
{
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(cookie.Value);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(cookie.Value);
}
else // if none value has been sent by cookie, set default language
{
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture("pl-PL");
Thread.CurrentThread.CurrentUICulture = new
CultureInfo("pl-PL");
}
base.InitializeCulture();
}
我添加了资源文件,并在一个标签中显示了实际文化:
Welcome.Text =“Culture:”+ System.Globalization.CultureInfo.CurrentCulture.ToString();
问题是当我运行这个应用程序并点击例如英文按钮(默认语言是波兰语),没有效果。如果我第二次点击它或按F5,则会应用更改,并且标签中的文化将显示为en-US。 如果我想将语言改回波兰语(它在第二次点击(或点击并刷新)之后有效),就会发生Tsame。我做错了什么?
答案 0 :(得分:2)
我怀疑问题可能在于您在按钮点击事件中使用Server.Transfer。您是否尝试过使用Response.Redirect?
答案 1 :(得分:0)
当您使用Server.Transfer时,所有内容都发生在同一个Web请求中 - 它只是一个内部服务器处理重定向。 尝试使用Response.Redirect而不是Server.Transfer。这将强制客户端浏览器调用另一个请求,然后cookie将被发送到Web服务器。
答案 2 :(得分:0)
你为什么使用Cookies?为什么不会话?我认为Session更方便,你不会遇到这个问题。当InitializeCulture()在Server.Transfer之后启动它仍然是相同的请求仍然没有英文Cookie。你把它放在响应中,但响应仍在这里,在服务器端 关于您的国际化解决方案。通常建议在URL中嵌入语言环境。考虑一位英语用户点击英语按钮,然后发送链接给朋友。他的朋友打开链接,无法理解一个字。他没有英文Cookie,所以他正在浏览波兰语页面 希望这有帮助
答案 3 :(得分:0)
使用
Response.Redirect("Default.aspx");
取代
Server.Transfer(Request.Path);