Search code examples
c#asp.netglobalizationuiculture

Return to Current Culture when clicking any button in ASP.NET


All works fine when select any of the language in my login page through Corporation page but when I click any button in Corporation Page it returns in Default language(English).I want to maintain it in the language I chose

Please help.

Corporation.aspx.cs

 protected void Page_Load(object sender, EventArgs e)
        {


          if (!IsPostBack)
            {

                if (Session["language"] != null)
                {
                    string language = Session["language"].ToString();
                    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);

                }
                string Flag = Session["Flag"].ToString();
                if (Flag == "Y")
                {
                    Session["Flag"] = "N";
                    Server.Transfer(Request.Path);

                }
                Session["Flag"] = "Y";
           }
       }    

Login.aspx

  <div>
             <asp:DropDownList ID="ddlLang" runat="server"AutoPostBack="True"
             OnSelectedIndexChanged="ddlLang_SelectedIndexChanged">
             <asp:ListItem Text="English" Value="en-US"></asp:ListItem>
             <asp:ListItem Text="French" Value="fr-FR"></asp:ListItem>
             <asp:ListItem Text="Spanish" Value="es-ES"></asp:ListItem>
             <asp:ListItem Text="Chinese" Value="zh-SG"></asp:ListItem>
             </asp:DropDownList>
          </div>

Login.aspx.cs

  protected void Page_Load(object sender, EventArgs e)
       {
         if (!Page.IsPostBack)
         {
        if (Session["language"] != null)
                {
                    ddlLang.SelectedValue = Session["language"].ToString();
                    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture                                  (ddlLang.SelectedValue);
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(ddlLang.SelectedValue);
                }
                else
                {
                    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture                        (ddlLang.SelectedValue);
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(ddlLang.SelectedValue);
                }
               Session["Flag"] = "Y";
     }
   }





protected void ddlLang_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlLang.SelectedValue == "fr-FR")
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
                Session["language"] = ddlLang.SelectedValue;
                Server.Transfer(Request.Path);
            }
            if (ddlLang.SelectedValue == "zh-SG")
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-SG");
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-SG");
                Session["language"] = ddlLang.SelectedValue;
                Server.Transfer(Request.Path);
            }
            if (ddlLang.SelectedValue == "es-ES")
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("es-ES");
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES");
                Session["language"] = ddlLang.SelectedValue;
                Server.Transfer(Request.Path);
            }
            else
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
                Session["language"] = ddlLang.SelectedValue;
                Server.Transfer(Request.Path);
            }

        }

Solution

  • i think its a simple mistake

    if (!IsPostBack) in Corporation.aspx.cs will be executed only on first load. So basically all the settings are done only on the first load.

    After you hit some button on the page there will be a postback fired which will be do a Page_Load. But this time around since its a postback your language code is not executed...