2010-04-03 110 views
0

我有多语言的asp.net网站。 有一个masterpage和default.aspx。点击按钮后更改CulturalInfo

我在主页上放了两个按钮 - 一个点击当我想把语言改成英文,第二个打磨。当然,我想点击这些按钮后更改语言(和所有的变化应该在页面上自动显示)

这里是两个代码:在default.aspx.cs

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); 
} 

我有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(); 
} 

我添加的资源文件,并在一个标签i显示了实际的文化:

Welcome.Text = “文化:” + System.Globalization.CultureInfo.Curre ntCulture.ToString();

问题是,当我运行这个应用程序,并点击例如英语按钮(默认语言是波兰语),不起作用。如果我第二次单击它或按F5,则会应用更改,并在文化标签中显示为en-US。 如果我想将语言改回波兰语(它在第二次点击(或单击并刷新)之后起作用),Tsame会发生。

我到底做错了什么?

回答

2

我怀疑问题可能出在您使用Server.Transfer的按钮点击事件。你有尝试过使用Response.Redirect吗?

+0

感谢的,它帮助! – Bart 2010-04-04 07:05:54

0

当你使用Server.Transfer时,一切都发生在同一个Web请求中 - 它只是一个内部服务器处理重定向。 尝试使用Response.Redirect而不是Server.Transfer。这将强制客户端浏览器调用另一个请求,然后将cookie发送到Web服务器。

0

你为什么使用Cookies?为什么不会话?我认为Session更方便,你不会有这个问题。当Server.Transfer之后InitializeCulture()启动时,它仍然是没有英文Cookie的请求。你把它放在响应中,但响应仍然在这里,在服务器端。
关于您的国际化解决方案。通常建议在URL中嵌入语言环境。考虑一个英国用户点击英文按钮,然后发送链接给朋友。他的朋友打开链接,无法理解一个字。他没有英文Cookie,所以他正在查看波兰页面。
希望这有助于

0

使用

Response.Redirect("Default.aspx"); 

到位

Server.Transfer(Request.Path);