【kein】ASP.Net本地化/國際化解決方案原理和程式碼示例
解決方案原理:
ASP.NET本地化支援
通過 CultureInfo 類可以訪問區域設定的屬性。
此外,ASP.NET 基於每個執行緒和請求跟蹤預設區域性的兩個屬性:用於區域設定相關函式預設值的 CurrentCulture,
和用於區域設定特定的資源資料查詢的 CurrentUICulture。
解決方案主要包含幾個部分組成:
1:客戶設定語言的控制元件,一般會包含在每個頁面,使得使用者可以隨時切換區域
控制元件ascx程式碼
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Text="English Version" Value="en-US">asp:ListItem>
<asp:ListItem Text="中 文 版" Value="zh-CN">asp:ListItem>
asp:DropDownList>
<asp:ListItem Text="English Version" Value="en-US">asp:ListItem>
<asp:ListItem Text="中 文 版" Value="zh-CN">asp:ListItem>
asp:DropDownList>
控制元件CS事件程式碼
1 protected void Page_Load(object sender, EventArgs e)
2 {
3 if (!Page.IsPostBack){
4 if (Request.Cookies[Settings.Default.Cookies_Language] == null || Request.Cookies[Settings.Default.Cookies_Language].Value == "")
5 {
6 foreach (ListItem li in DropDownList1.Items)
7 {
8 if (li.Value == "")
9 li.Selected = true;
10 }
11 }
12 else
13 {
14 foreach (ListItem li in DropDownList1.Items)
15 {
16 if (li.Value.ToLower() == Request.Cookies[Settings.Default.Cookies_Language].Value.ToLower())
17 li.Selected = true;
18 }
19 }
20 }
21 }
22
23 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
24 {
25 Response.Redirect("~/ChangeLanguage.aspx?Language=" + DropDownList1.SelectedValue + "&url=" + Server.UrlEncode(Request.Url.PathAndQuery) ,true);
26 }ChangeLanguage中間頁面程式碼:
27 public partial class ChangeLanguage : System.Web.UI.Page
28 {
29 protected void Page_Load(object sender, EventArgs e)
30 {
31 Response.Cookies["Language"].Value = Request["Language"];
32 Response.Cookies["Language"].Expires = DateTime.Now.AddDays(1000);
33
34 Response.Redirect(Server.UrlDecode(Request["url"]));
35 }
36 }
37
2 {
3 if (!Page.IsPostBack){
4 if (Request.Cookies[Settings.Default.Cookies_Language] == null || Request.Cookies[Settings.Default.Cookies_Language].Value == "")
5 {
6 foreach (ListItem li in DropDownList1.Items)
7 {
8 if (li.Value == "")
9 li.Selected = true;
10 }
11 }
12 else
13 {
14 foreach (ListItem li in DropDownList1.Items)
15 {
16 if (li.Value.ToLower() == Request.Cookies[Settings.Default.Cookies_Language].Value.ToLower())
17 li.Selected = true;
18 }
19 }
20 }
21 }
22
23 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
24 {
25 Response.Redirect("~/ChangeLanguage.aspx?Language=" + DropDownList1.SelectedValue + "&url=" + Server.UrlEncode(Request.Url.PathAndQuery) ,true);
26 }ChangeLanguage中間頁面程式碼:
27 public partial class ChangeLanguage : System.Web.UI.Page
28 {
29 protected void Page_Load(object sender, EventArgs e)
30 {
31 Response.Cookies["Language"].Value = Request["Language"];
32 Response.Cookies["Language"].Expires = DateTime.Now.AddDays(1000);
33
34 Response.Redirect(Server.UrlDecode(Request["url"]));
35 }
36 }
37
2:在每頁載入時會判斷當前使用者選擇的區域,一般在頁面的基類中實現。
當使用者初次進入網站識別客戶端瀏覽器,
當使用者曾經選擇了區域,載入選擇區域
1 /**////
2 /// 本地化
3 ///
4 protected override void InitializeCulture()
5 {
6 if (Request.Cookies[Settings.Default.Cookies_Language] != null && Request.Cookies[Settings.Default.Cookies_Language].Value != null && Request.Cookies[Settings.Default.Cookies_Language].Value != "")
7 {
8 setCulture();
9 }
10 else
11 {//設定Cookie
12 Response.Cookies[Settings.Default.Cookies_Language].Value =
13 (Request.Headers["accept-language"].Split(",".ToCharArray())[0]);
14 Response.Cookies[Settings.Default.Cookies_Language].Expires = DateTime.Now.AddDays(1000);
15 setCulture();
16 }
17 base.InitializeCulture();
18 }
19
20
21 private void setCulture()
22 {
23
24 try
25 {
26 String selectedLanguage = Request.Cookies[Settings.Default.Cookies_Language].Value;
27 UICulture = selectedLanguage;
28 Culture = selectedLanguage;
29
30 System.Threading.Thread.CurrentThread.CurrentCulture =
31 System.Globalization.CultureInfo.CreateSpecificCulture(selectedLanguage);
32 System.Threading.Thread.CurrentThread.CurrentUICulture = new
33 System.Globalization.CultureInfo(selectedLanguage);
34 }
35 catch //( Exception ex )
36 {
37 Response.Cookies.Clear();// [Settings.Default.Cookies_Language].d
38 //throw;
39 }
40 }
41
2 /// 本地化
3 ///
4 protected override void InitializeCulture()
5 {
6 if (Request.Cookies[Settings.Default.Cookies_Language] != null && Request.Cookies[Settings.Default.Cookies_Language].Value != null && Request.Cookies[Settings.Default.Cookies_Language].Value != "")
7 {
8 setCulture();
9 }
10 else
11 {//設定Cookie
12 Response.Cookies[Settings.Default.Cookies_Language].Value =
13 (Request.Headers["accept-language"].Split(",".ToCharArray())[0]);
14 Response.Cookies[Settings.Default.Cookies_Language].Expires = DateTime.Now.AddDays(1000);
15 setCulture();
16 }
17 base.InitializeCulture();
18 }
19
20
21 private void setCulture()
22 {
23
24 try
25 {
26 String selectedLanguage = Request.Cookies[Settings.Default.Cookies_Language].Value;
27 UICulture = selectedLanguage;
28 Culture = selectedLanguage;
29
30 System.Threading.Thread.CurrentThread.CurrentCulture =
31 System.Globalization.CultureInfo.CreateSpecificCulture(selectedLanguage);
32 System.Threading.Thread.CurrentThread.CurrentUICulture = new
33 System.Globalization.CultureInfo(selectedLanguage);
34 }
35 catch //( Exception ex )
36 {
37 Response.Cookies.Clear();// [Settings.Default.Cookies_Language].d
38 //throw;
39 }
40 }
41
3:當然是為每個頁面準備資原始檔。
這個是個體力活,
ASPNET.ascx.en.resx 表示英文的
ASPNET.ascx.zh.resx 這個表示中文的,當然還可以分為更加細的區域,比如zh-CN/zh-HK/zh-TW
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-407068/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Netsuite本地化解決方案UI
- iOS應用程式多語言&本地化解決方案iOS
- 基於後編譯的國際化解決方案編譯
- 前端系列——jquery.i18n.properties前端國際化解決方案“填坑日記”前端jQuery
- iOS 國際化 && 本地化iOS
- iOS國際化(本地化)iOS
- iOS元件化解決方案iOS元件化
- 智和網管平臺國產化解決方案
- Flask教程第十三章:國際化和本地化Flask
- ASP.NET 微軟Web應用示例程式走廊-專案解決方案ASP.NET微軟Web
- 微信小程式元件化解決方案wx-component微信小程式元件化
- 電池監控和最佳化解決方案Wattagio
- iOS語言國際化(本地化)iOS
- Django國際化與本地化指南Django
- 調取創藍253國際簡訊驗證碼-程式碼示例2
- 高併發優化解決方案優化
- ASP.NET設計國際電子商務專案中的本地化支援ASP.NET
- [小程式利器] miniapps 工程化解決方案APP
- 私有化部署的低程式碼平臺 更安全的資訊化解決方案
- Java國際化小小示例Java
- 應用整合虛擬化解決方案
- 簡單的ASP.NET Web API程式碼示例ASP.NETWebAPI
- Asp.net Core MVC 程式的國際化處理ASP.NETMVC
- 前端微服務化解決方案1-介紹前端微服務
- CSS3 動畫卡頓效能優化解決方案CSSS3動畫優化
- CSS3動畫卡頓效能優化解決方案CSSS3動畫優化
- 使用Gulp構建前端自動化解決方案前端
- ASP.NET CORE微信支付回撥示例程式碼ASP.NET
- Netflix推薦系統(Part Five)-國際化和本地化推薦
- iOS語言國際化/本地化-實踐總結iOS
- 【Kein】ASP.NET2.0中文驗證碼的實現程式碼ASP.NET
- WEB網站國際化的一種解決方案Web網站
- ASP.NET 2.0 本地化功能:本地化 Web 應用程式的新方法ASP.NETWeb
- zabbix開源監控解決方案-本地化
- 【VMware虛擬化解決方案】雙網隔離虛擬化桌面解決方案
- Comi - 小程式 markdown 渲染和程式碼高亮解決方案
- SAP智慧機器人流程自動化解決方案機器人
- Smartbi:智慧園區資料視覺化解決方案視覺化