如何使用ASP.Net中的ressource文件从母版页更改应用程序的语言

时间:2013-01-10 15:38:45

标签: c# asp.net

我在ASP.Net中使用C#进行了应用。 在aspx文件的母版页中,我有3个图像按钮,有3种语言:英语,法语,罗马尼亚语:

<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"/>|

当我点击其中一个时,我会在会话中保存所选语言的事件:

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

在母版页中,我打开登录页面,然后打开其他页面。当我从母版页中选择时,如何更改所有页面的UICulture?

我尝试在preinit事件的登录页面,但不起作用:

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

谢谢

1 个答案:

答案 0 :(得分:0)

将文化名称存储在会话变量中是一个良好的开端,但您必须为每个请求更改CurrentThread中的线程区域性。在PreInit中尝试以下代码:

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