按钮点击后更改CulturalInfo

时间:2010-04-03 21:21:02

标签: c# asp.net multilingual cultureinfo

我有多语言的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。

我做错了什么?

4 个答案:

答案 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);