程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET2.0:利用Localization實現本地化

ASP.NET2.0:利用Localization實現本地化

編輯:.NET實例教程

ASP.Net2.0:利用Localization實現本地化


摘要:

隨著計算機網絡的發展,一些商業機構也開始向國際市場邁進。因此這些商業的機構的網站也開始面向全世界的用戶,要求網站具有多語言的選擇,實現本地化。在.NET1.1框架下面,如果你要實現本地化,你可能要借助某些插件,甚至要編寫一連串的代碼;但是在.Net2.0框架底下,你會發現一切原來是那麼的簡單~~!

主要內容:

1. 簡單例子
2. 進一步認識Localization
3. 語言轉換
4. 解決方案

一. 簡單例子

下面通過一個簡單的例子來說明利用Localization來實現本地化是那麼的簡單,首先我們打開Visual Studio 2005,新建一個名叫Localization的工程(名字就無關緊要了,隨你喜歡~~),如下所示:
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片



然後我們在Default.ASPx這張頁面上放一些控件,例如我們在頁面上放一個按鈕,一個標簽一個文本框,添加完之後的頁面就好像下面的一樣:
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

接下來的一步主要是負責生成本地資源,我們點擊“工具->生成本地資源(R)”,
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

於是我們的項目中多了一個文件夾App_LocalResources,裡面包含一個文件Default.ASPx.resx,而這個文件就是用來編輯保存我們想要顯示的一些文字資源,
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片



例如我們為我們添加的控件輸入以下信息:
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

在完成以上步驟之後,我們就可以看到效果了。
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

在以上的步驟中,我們沒有手工編寫任何代碼,而由.Net2.0自動實現綁定過程。而頁面跟以往的不同就是Html代碼發生了變化:


<%@ Page Language="C#" AutoEventWireup="true"  
CodeFile="Default.ASPx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" 學網,收藏本篇文章 [1] [2] [3]  [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]

ass="a">UICulture="auto" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xHtml1-transitional.dtd"><Html XMLns="http://www.w3.org/1999/xHtml" ><head id="Head1" runat="server"> <title>無標題頁</title></head><body> <form id="form1" runat="server"> <div> <ASP:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource1" Text="Button" /> <ASP:TextBox ID="TextBox1" runat="server" meta:resourcekey="TextBox1Resource1">學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]

t"></ASP:TextBox> <ASP:Label ID="Label1"

runat="server" meta:resourcekey="Label1Resource1" Text="Label"></ASP:Label></div> </form></body></Html>


除了Page裡面增加了Culture="auto" meta:resourcekey="PageResource1" UICulture="auto"等屬性設置外,我們添加的控件也相應的多了meta:resourcekey這個屬性,而.Net2.0就是根據這些屬性來進行語言綁定。

在上述的簡單項目中,我們只提供了一種語言,還沒達到本地化的要求,於是我們向App_localresources這個目錄手工增加一個資源文件Default.ASPx.en-us.resx文件(其中英文[美國]的語言代碼是"en-us"),我們向裡面添加一些key/value對,如下所示:
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片 文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]



然後我們去修改IE的Internet選項的語言,添加“英文(美國)[en-us]”,並且把它移動到最上面:
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

再運行一次我們的項目,你會發現簡單的本地化已經實現,
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

至此,通過一個簡單的例子,我們已經初步認識了.Net2.0是如何實現利用Localization來實現本地化的。但是如果我們要構建一個優秀的國際化網站或軟件,歡迎光臨學網,收藏本篇文章 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]

我們需要對Localization做進一步的認識。

二. 進一步認識Localization

到了這裡,你會發現上述的頁面中是每一個頁面對應一些屬於自己的資源文件,如果我們要求多張頁面或者全部頁面都要用同一個資源文件的時候,該怎麼做呢?很簡單,我們可以在項目中添加一個文件夾,名叫App_GlobalResources,這是系統默認的存放全局資源的目錄。例如我們在全局目錄中添加兩個文件,分別是global.resx和global.en-us.resx,
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

然後我們分別在裡面輸入一些對應的key/value值,至於怎麼應用我們的全局資源綁定到頁面中,我們有兩種方法:

一種是在HTML代碼裡面進行綁定,表達式是 <%$ resources: [applicationkey], resourcekey, [default] %>,例如我們在Default.ASPx多放一個按鈕,其Html代碼為:


<ASP:Button ID="Button2" runat="server" Text="<%$ resources: global, String1 %>


於是我們會得到以下的效果,可以看出資源已綁定到控件上。
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]



另一種方式則是在程序代碼進行綁定,由於.Net2.0框架會將全局資源文件編譯成一個類,也就是說我們剛才創建的global.resx文件將被編譯成一個類global,而資源文件裡面的所有key將成為類的屬性,以供在程序裡進行訪問。例如我們可以在程序裡這樣寫:


this.Button2.Text = Resources.global.String1;


大家等會可以下載附件嘗試一下,看看效果是否一樣~~~~

另外,資源文件除了可以存放一些字符串之外,還可以存放圖片,聲頻,文件等等,
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

例如我們在資源文件中添加一些圖片資源,你可以將圖片設置為在編譯時鏈接或者嵌入到資源文件,
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片

而在程序代碼裡面,我們得到的將是System.Drawing.Bitmap類型的變量,至於添加其他類型的文件,得到的是什麼,這裡不多說了,大家自己探討一下吧。
單擊在新窗口中打開圖片,Ctrl+滾輪縮放圖片



三. 語言設置

大家是否覺得如果每次都要去Internet選項來進行語言的選擇會很麻煩,那麼如何在自己的項目中設置要顯示某一種語言呢?很簡單,通常我們有三種途徑。首先需要講兩個屬性,一個是Culture,這個決定各種數據類型是如何組織,如數字與日期;另一個是UICulture,這個就決定了采用哪一種本地化資源,也就是使用哪種語言。詳細請看MSDN~~~

1. 在具體頁面進行設置


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.ASPx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto&quo
t; %>

如上,由於將UICulture和Culture屬性都設置成auto,.Net2.0會根據你的Internet語言選項來確定加載哪些資源文件,當然你也可以將UICulture和Culture都設置成"en-us",那麼這張頁面所加載的就是英文的資源文件了。不過這樣寫很麻煩,每一張頁面都要寫,太繁瑣了,於是我們可以在web.config裡面設置我們所要的語言。

2. 在web.config裡面進行設置

<configuration>    <system.web>        <globalization culture="en-us" uiCulture="en-us"/>    </system.web></configuration>


通過這樣設置,項目中的全部頁面就會自動加載英文資源文件了,但要注意的一點是,如果在頁面中也設置了UICulture和Culture屬性,那麼它將覆蓋web.config裡面的設置。例如某張頁面的這兩個屬性設為"zh-cn",那麼這張頁面將顯示中文而不是英文。但還是覺得不好,因為頁面要加載的語言文件都寫死了,不靈活。

3. 在代碼裡面進行設置


復制  保存
using System.Globalization;using System.Threading;// Set the culture to the browser's accept languageThread.CurrentThread.CurrentCulture =     CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);// Set the user interface culture to the browser's accept languageThread.CurrentThread.CurrentUICulture =     學網,收藏本篇文章 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  [11] [12] [13]

>new CultureInfo(Request.UserLanguages[0]);


在程序代碼裡面進行設置,重載頁面的InitializeCulture事件,注意在代碼裡的語言設置,會覆蓋頁面的Html屬性或者web.config的設置。上述的Request.UserLanguages[0]是獲取Internet語言選項的第一種語言代碼。

四. 解決方案

經過上述的初步和進一步的認識,相信大家已經理解了Localization的原理以及實現方法,但真要在我們的系統中實現多語言,實現本地化,我們應該怎樣來架構呢?
通常我們為了減少重復代碼,我們一般是建立一個基頁面PageBase類,讓所有的頁面都繼承基頁面,在基頁面重寫InitializeCulture事件,而用戶所選擇的語言我們可以儲存在Session,CookIE,QueryString或者.Net2.0提供的profile裡面。 下面我們以存儲在Session為例,構建我們的基頁面,為簡單起見,我只是通過一個按鈕來選擇語言,真正實現的時候可能會用一個下拉框:

主頁面:


using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using Localization;/// <summary>/// 本地化/// kenneth/// 2006.07.16/// </summary>public partial class _Default : MyPageBase{    protected void Page_Load(object sender, EventArgs e)    {        this.Button2.Text = Resources.global.String1;    }    protected void Button2_Click(object sender,歡迎光臨學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]  [12] [13]

EventArgs e) { if (Session["PreferredCulture"].ToString().ToUpper() == "EN-US") Session["PreferredCulture"] = "zh-cn"; else if (Session["PreferredCulture"].ToString().ToUpper() == "ZH-CN") Session["PreferredCulture"] = "en-us"; //重定向頁面 Response.Redirect(Request.Url.PathAndQuery); }}


基頁面MyPageBase:


using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Threading;using System.Globalization;namespace Localization{    /// <summary>    /// MyPageBase 基類實現本地化 /// kenneth /// 2006.07.16 /// </summary> public class MyPageBase : System.Web.UI.Page { protected override void InitializeCulture() { // 用Session來存儲語言信息 if (Session["PreferredCulture"] == null) Session["PreferredCulture"] = Request.UserLanguages[0]; string UserCulture = Session[文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 

g class="s">"PreferredCulture"].ToString(); if (UserCulture != "") { //根據Session的值重新綁定語言代碼 Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserCulture); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture); } } }}


好了,終於寫完了,希望大家頂一下。這幾天攻了一下MSDN,寫出自己的心得,如有雷同,純屬巧合,謝謝支持!最後,給出自己的模板,供大家參考一下~~~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved