【问题标题】:language changing on second click第二次点击改变语言
【发布时间】:2011-05-16 13:55:23
【问题描述】:

要更改语言,我单击执行如下操作的 imageButton:

SetCulture(Session, "en-GB");

该功能实现如下:

public static void SetCulture(HttpSessionState session, string locale)
{
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale);
      Thread.CurrentThread.CurrentCulture = new CultureInfo(locale);

      session["currentLocale"] = locale;
}

另外,我的 .aspx 页面属于 LocalizedPage 类型,它会覆盖 InitializeCulture:

protected override void InitializeCulture()
{            
    if (Session["currentLocale"] != null)
    {
         //changes the cultures of the current Thread
         CurrentUICulture = new CultureInfo((string)Session["currentLocale"]);
         CurrentCulture = new CultureInfo((string)Session["currentLocale"]);                
    }
    base.InitializeCulture();

}

现在,问题是我必须在 imageButton 上单击两次才能更改语言。如何在第一次点击时更改语言?

请注意,我对 ASP.NET 比较陌生,所以它可能是一个简单的解决方案

【问题讨论】:

  • 你是怎么解决这个问题的。我也有同样的问题

标签: c# asp.net localization globalization


【解决方案1】:

InitializeCulture() 是 one of the first things,在页面加载时发生:

调用 InitializeCulture 方法 在页面生命周期的早期, 在创建控件之前或 为页面设置属性。 因此,要读取的值是 从控件传递到页面,你 必须直接从 使用 Form 集合请求。

当您尝试使用 Button 更改区域性时,在区域性初始化之后,这段代码会很好地运行到页面生命周期中。

一键改变文化的最简单方法是在SetCulture()之后通过重定向到自身重新加载页面:

Response.Redirect(Request.RawUrl);

【讨论】:

    【解决方案2】:

    我以前遇到过这个问题。您可能正在使用母版页,并且某些方法在母版页中执行,而另一些则在内页中执行。

    问题在于加载的顺序。这意味着:一些代码在您的 SetCulture(Session, "en-GB"); 之前运行。

    在这种情况下,请先尝试调试以找出正在运行的内容,然后再修复它。

    【讨论】:

      【解决方案3】:

      您是否尝试过从SetCulture() 内部调用InitializeCulture()?

      【讨论】:

        【解决方案4】:

        按钮点击的事件处理程序可能会在页面初始化后触发,因此解决此问题的最简单方法(不一定是最优雅的)是更改 Session 状态中的文化,然后立即发出重定向到同一页面。即

        SetCulture(Session, "en-GB");
        Response.Redirect(Request.RawUrl);
        

        这应该会导致浏览器重新请求页面。

        【讨论】:

          【解决方案5】:

          在按钮单击事件中更改文化后,使用下面的代码行将用户重定向到同一页面。

          Responce.Redirect(Request.UrlReferrer.AbsolutePath);  
          

          【讨论】:

            【解决方案6】:

            最简单的解决方案是在点击处理程序中设置一个Response.Redirect(Request.RawUrl);,在设置文化之后。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-03
              • 1970-01-01
              • 2013-04-20
              • 2022-07-05
              • 1970-01-01
              • 2013-06-08
              相关资源
              最近更新 更多