1

当谈到 Web 应用程序时,我是个菜鸟。但我正在尽我最大的努力使用 ASP.NET 2.0 来学习它,对于这篇长篇文章感到抱歉。

我有一个母版页(M1)和 3 个不同的内容页 C1、C2、C3,它们基本上使用母版页 M1 在内容占位符中填充其各自的内容。

所有网络表单都已本地化,并在资源 (xml) 文件中添加了适当的语言资源字符串,例如:Resource.en-US.xml、Resource.de-DE.xml 等。最后在代码中引用了资源在设置适当的当前文化和当前 uiculture 之后。

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
//where the btnSubmit is a control on the form
btnSubmit.Text = rm.GetString("Submit", Thread.CurrentThread.CurrentCulture);

现在问题来了,我在母版页中包含了一个选项,可以更改用户可用的母版页中的显示语言,作为带有 asp:image 的 asp:linkbutton。每当用户单击所需语言的链接按钮时,内容页面控件应显示与所选文化相对应的整个内容字符串。

  1. 我如何做到这一点?

  2. 我是否必须实现 Session 变量以包含所选语言?或者存储在 Cookie 中也可以完成这项工作?

我试过的

在母版页加载事件上。我尝试调用一个方法SetCultureSpecificInformation,它基本上设置 CurrentThread 的文化和 uiculture 属性,并将所选语言存储在会话变量中。

在 asp:linkbutton OnClick 事件处理程序上也有类似的实现。在这种情况下,它会修改会话变量。

最后引用内容网页 OnPage_Load 事件上的会话变量。

但不知何故,上述方法并没有产生预期的结果。语言切换不一致。任何可以帮助我提供足够好的设计方法来实现相同功能的人。

提前致谢

4

2 回答 2

3

添加Global.asax文件:编写这段代码

 void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Code that runs on application startup
        HttpCookie cookie = HttpContext.Current.Request.Cookies["CultureInfo"];
        if (cookie != null && cookie.Value != null)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
        }
        else
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");
        }
    }

在 Masterpage 页面上

protected void ddlanguage_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["language"] = ddlanguage.SelectedValue;

        //Sets the cookie that is to be used by Global.asax
        HttpCookie cookie = new HttpCookie("CultureInfo");
        cookie.Value = ddlanguage.SelectedValue;
        Response.Cookies.Add(cookie);

        //Set the culture and reload for immediate effect.
        //Future effects are handled by Global.asax
        Thread.CurrentThread.CurrentCulture = new CultureInfo(ddlanguage.SelectedValue);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(ddlanguage.SelectedValue);

        if (cookie.Value == "en")
        {
            Session["ddindex"] = 0;
        }

        else if (cookie.Value == "fr")
        {
           Session["ddindex"] = 1;
        }

        else if (cookie.Value == "de")
        {
           Session["ddindex"] = 2;
        }
        Server.Transfer(Request.Path);
    }
}
于 2012-06-26T06:51:43.157 回答
0

在我的例子中,使用了几个按钮来从母版页设置文化,然后在母版页的代码中使用此代码:

 protected void IdiomButton_Click(object sender, ImageClickEventArgs e)
    {
        ImageButton theButton = (ImageButton)sender;
        Session["culture"] = theButton.ID == "ItalianButton" ? CultureInfo.CreateSpecificCulture("it-IT") : CultureInfo.CreateSpecificCulture("en-US");
        Response.Redirect(Request.RawUrl);
    }

然后在我使用的每个子页面中:

protected override void InitializeCulture()
    {
        if (Session["culture"] != null)
            System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(Session["culture"].ToString());
        else
            System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("it-IT");
    }
于 2016-10-11T14:53:58.260 回答