【发布时间】:2014-03-04 12:23:03
【问题描述】:
我正在尝试在网站上为用户实现文化切换,他可以从下拉列表中选择他喜欢的语言。
problem and solution posted here 似乎是一个很好的起点,所以我将代码实现到我的 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)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookie.Value);
Thread.CurrentThread.CurrentCulture = new CultureInfo(cookie.Value);
}
else
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
}
}
因此,如果未设置 cookie,请将区域性设置为 de-DE。在此之后,我将第二段代码复制到我的主站点的Page_Load 方法中:
if (!Page.IsPostBack)
{
if (Session["ddindex"] != null)
{
ddlanguage.SelectedValue = Session["ddindex"].ToString();
ddlanguage.SelectedIndex = Convert.ToInt32(Session["ddindex"].ToString());
//display current values in dummy label - remove later on.
currentCulture.Text = Thread.CurrentThread.CurrentCulture.ToString() + " " + Thread.CurrentThread.CurrentUICulture;
}
else
{
ddlanguage.SelectedValue = Thread.CurrentThread.CurrentCulture.Name;
}
}
加上 DropdDownBox 的 SelectedIndexChanged 方法:
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-US")
{
Session["ddindex"] = "0";
}
else if (cookie.Value == "de-DE")
{
Session["ddindex"] = "1";
}
Server.Transfer(Request.Path);
}
还有标记:
<asp:DropDownList ID="ddlanguage" runat="server"
OnSelectedIndexChanged="ddlanguage_SelectedIndexChanged"
AutoPostBack="true">
<asp:ListItem Selected="False" Value="en-US" Text="English"></asp:ListItem>
<asp:ListItem Selected="False" Value="de-DE" Text="Deutsch"></asp:ListItem>
</asp:DropDownList>
我在我的资源中为一些 <asp:Hyperlinks> 设置了一些值,这些值在调用网站时会从德语正确翻译成英语。
但是,在通过asp:dropdownbox 切换当前选择的文化时,文化会停留在 en-US(我的开发机器上的默认浏览器文化)。标签 currentCulture.Text 也保留在 en-US 上,所有翻译仍然是英文。
我在这里可能做错了什么?
【问题讨论】:
标签: c# asp.net .net webforms globalization