在說到ASP.NET多語系(1)---前端頁面多語系設置之后,就是要實現在后端設置具體的更改系統語言環境了。
首先添加Global.asax文件,直接選擇不用修改:
在Application_BeginRequest事件:
protected void Application_BeginRequest(object sender, EventArgs e) { string strUserLanaguage = "zh-TW";//默認語系 if (null != Request.Cookies["lanaguage"]) { strUserLanaguage=Request.Cookies["lanaguage"].Value;//設置語系 } else { if (null != Request.UserLanguages) strUserLanaguage = Request.UserLanguages[0];//瀏覽器默認語系 } SetApplicationLanaguage(strUserLanaguage); } #region 設定系統顯示語言 /// <summary> /// 設定系統顯示語言 /// </summary> /// <param name="userLanaguage">語系簡稱</param> private void SetApplicationLanaguage(string userLanaguage) { System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(userLanaguage); System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture; } #endregion
然后在登陸頁面的一個下拉框,形如:
<asp:DropDownList ID="ddlLanaguage" runat="server" AutoPostBack="true" onselectedindexchanged="ddlLanaguage_SelectedIndexChanged"> <asp:ListItem Text="簡體" Value="zh-CN"></asp:ListItem> <asp:ListItem Text="繁體" Value="zh-TW"></asp:ListItem> <asp:ListItem Text="英文" Value="en-us"></asp:ListItem> </asp:DropDownList>
后台事件:
protected void ddlLanaguage_SelectedIndexChanged(object sender, EventArgs e) { HttpCookie aHttpCookie = new HttpCookie("lanaguage"); aHttpCookie.Value = ddlLanaguage.SelectedValue; Response.Cookies.Remove("lanaguage"); Response.Cookies.Add(aHttpCookie); SetApplicationLanaguage(aHttpCookie.Value);
HttpCookie oHttpCookie = new HttpCookie("lanIndex");
oHttpCookie.Value = ddlLanaguage.SelectedIndex.ToString();
Response.Cookies.Add(oHttpCookie);
Response.Redirect(Request.Url.ToString());
} #region 設定系統顯示語言 private void SetApplicationLanaguage(string userLanaguage) { System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(userLanaguage); System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture; } #endregion
在Page_Load事件中:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //下拉框語系設置 if ( null != Request.UserLanguages) { if ("zh-CN" == Request.UserLanguages[0].ToString()) { ddlLanaguage.SelectedIndex = 0; } else if ("zh-TW" == Request.UserLanguages[0].ToString()) { ddlLanaguage.SelectedIndex = 1; } else //if("en-US" == Request.UserLanguages[0].ToString()) { ddlLanaguage.SelectedIndex = 2; } } if (null != Request.Cookies["lanIndex"]) { ddlLanaguage.SelectedIndex = Convert.ToInt32(Request.Cookies["lanIndex"].Value); }
//注意:如果瀏覽器未設置語系,那么頁面會根據操作系統語系顯示,此處未處理。 建議:使用在下拉框中添加一個空選項 } }
只不過仍有問題:
A.點擊下拉框網頁不會及時的變更為已選擇的語系而是上次選擇的語系(比如第一次瀏覽為簡體,然后選擇英文頁面無變化,第二次選擇繁體顯示為英文,再選擇簡體顯示為繁體,在選擇繁體顯示為簡體。。。)
問題已解決。