简体   繁体   中英

How to change language for an application from masterpage using ressource files in ASP.Net

I have an appplication in ASP.Net with C#. In the masterpage in aspx file I have 3 image buttons with 3 languages: english, french, romanian:

<asp:ImageButton ID="ImgRo" ImageUrl="~/Images/Romania Flag.png" runat="server" 
                 Height="25px" ToolTip="RO" style="border-color:black; 
                 background-color:black" OnClick="ImgRo_CLick"/>|
<asp:ImageButton ID="ImgEn" ImageUrl="~/Images/United States Flag.png" runat="server" 
                 Height="25px" ToolTip="EN" style="border-color:black; 
                 background-color:black" OnClick="ImgEn_CLick"/>|
<asp:ImageButton ID="ImgFr" ImageUrl="~/Images/France Flag.png" runat="server" 
                 Height="25px" ToolTip="FR" style="border-color:black; 
                 background-color:black" OnClick="ImgFr_CLick"/>|

When I click one of each I have events to save chosen language on session :

protected void ImgRo_CLick(object sender, EventArgs e)
{
    SaveLanguage("Ro");
}
protected void ImgEn_CLick(object sender, EventArgs e)
{
    SaveLanguage("En");
}
protected void ImgFr_CLick(object sender, EventArgs e)
{
    SaveLanguage("fr-Fr");
}

protected void SaveLanguage(string language)
{
    Session[AppDefs.LANGUAGE] = language;
    Thread.CurrentThread.CurrentCulture = new CultureInfo(language);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
}

public string GetLanguage()
{

    if (Session[AppDefs.LANGUAGE] != null)
    {
        return Session[AppDefs.LANGUAGE].ToString();
    }
    else
    {
        return "en";
    }
}

In the master page I open login page and then other pages. How can I change UICulture for all pages when I choose from master page ?

I try in login page on preinit event this, but doesn't work:

protected void Page_PreInit(object sender, EventArgs e)
{
   UICulture = Master.GetLanguage();//"fr-FR"
}

Thanks

Storing the culture name in a session variable is a good start, but you have to change the threading cultures in CurrentThread for each request. Try the following code in PreInit:

var language = Master.GetLanguage();
Thread.CurrentThread.CurrentCulture = new CultureInfo(language);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM