在程序启动时把en与cn的资源文件都加载进来,然后页面加载时候根据session/cookie选择加载en或者cn资源文件。
1.程序启动加载资源文件(en.xml,cn.xml)
protected void Application_Start(object sender, EventArgs e) { Local.LoadLanguage(GetAppSettings("Language_Name").Split(new char[] { '|' })[0].Split(new char[] { ',' }), GetAppSettings("Language_XML")); }
把xml内容加载到 Dictionary[lang][key];以备后面调用做准备
2.页面选择语言样式
<select class="language" name="language" id="language" onchange="change(this.options[this.options.selectedIndex].value);"> <option value="cn"><%=Local.Get("language") %></option> <option value="en"><%=Local.Get("language_en") %></option> <option value="cn"><%=Local.Get("language_cn") %></option> </select>
3.js代码(通过ajax无刷新发送请求)
<script type="text/javascript"> function change(value) { var str = value; ajaxHelp.ProcessGet("/language.aspx?flag=" + str, function (data) { window.location.reload(); }); } </script>
4.接收请求,处理逻辑(cookie)
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string flag = Request.GetQueryString("flag"); if (flag=="cn") { WriteCookie1("local", "cn", 60); } else if(flag=="en") { WriteCookie1("local", "en", 60); } Response.End(); } }
5.页面刷新时候调用的过程
<option value="cn"><%=Local.Get("language") %></option> local.cs public static string Get(string key) => Get(GetLang(), key); public static string GetLang() { string str = ""; if (GetCookie("local") != null) { str = GetCookie("local").Value; } return str; } public static string Get(string lang, string key) => Dictionary[lang][key];