天天看點

ASP.NET網站實作中英文轉換(本地化資源),轉

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

ASP.NET網站實作中英文轉換(本地化資源),轉

主要内容:

1. 簡單例子

2. 進一步認識Localization

3. 語言轉換

4. 解決方案

一. 簡單例子

下面通過一個簡單的例子來說明利用Localization來實作本地化是那麼的簡單,首先我們打開Visual Studio 2005,建立一個名叫Localization的工程(名字就無關緊要了,随你喜歡~~),如下所示:

ASP.NET網站實作中英文轉換(本地化資源),轉

然後我們在Default.aspx這張頁面上放一些控件,例如我們在頁面上放一個按鈕,一個标簽一個文本框,添加完之後的頁面就好像下面的一樣:

ASP.NET網站實作中英文轉換(本地化資源),轉

接下來的一步主要是負責生成本地資源,我們點選“工具->生成本地資源(R)”,

ASP.NET網站實作中英文轉換(本地化資源),轉

于是我們的項目中多了一個檔案夾App_LocalResources,裡面包含一個檔案Default.aspx.resx,而這個檔案就是用來編輯儲存我們想要顯示的一些文字資源,

ASP.NET網站實作中英文轉換(本地化資源),轉

例如我們為我們添加的控件輸入以下資訊:

ASP.NET網站實作中英文轉換(本地化資源),轉

在完成以上步驟之後,我們就可以看到效果了。

ASP.NET網站實作中英文轉換(本地化資源),轉

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

ASP.NET網站實作中英文轉換(本地化資源),轉
ASP.NET網站實作中英文轉換(本地化資源),轉

<%

ASP.NET網站實作中英文轉換(本地化資源),轉

@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" 

meta:resourcekey

="PageResource1" UICulture="auto" %>

ASP.NET網站實作中英文轉換(本地化資源),轉
ASP.NET網站實作中英文轉換(本地化資源),轉

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

ASP.NET網站實作中英文轉換(本地化資源),轉
ASP.NET網站實作中英文轉換(本地化資源),轉

<html xmlns="http://www.w3.org/1999/xhtml" >

ASP.NET網站實作中英文轉換(本地化資源),轉

<head runat="server">

ASP.NET網站實作中英文轉換(本地化資源),轉

    <title>無标題頁</title>

ASP.NET網站實作中英文轉換(本地化資源),轉

</head>

ASP.NET網站實作中英文轉換(本地化資源),轉

<body>

ASP.NET網站實作中英文轉換(本地化資源),轉

    <form id="form1" runat="server">

ASP.NET網站實作中英文轉換(本地化資源),轉

    <div>

ASP.NET網站實作中英文轉換(本地化資源),轉

        <asp:Button ID="Button1" runat="server" 

meta:resourcekey

="Button1Resource1" Text="Button" />

ASP.NET網站實作中英文轉換(本地化資源),轉

        <asp:TextBox ID="TextBox1" runat="server" 

meta:resourcekey

="TextBox1Resource1"></asp:TextBox>

ASP.NET網站實作中英文轉換(本地化資源),轉

        <asp:Label ID="Label1" runat="server" 

meta:resourcekey

="Label1Resource1" Text="Label"></asp:Label></div>

ASP.NET網站實作中英文轉換(本地化資源),轉

    </form>

ASP.NET網站實作中英文轉換(本地化資源),轉

</body>

ASP.NET網站實作中英文轉換(本地化資源),轉

</html>

ASP.NET網站實作中英文轉換(本地化資源),轉

除了Page裡面增加了 Culture="auto" 

meta:resourcekey

="PageResource1" UICulture="auto"等屬性設定外,我 們添加的控件也相應的多了

meta:resourcekey

這個屬性,而.NET2.0就是根據這些屬性來進行語言綁定。

在上述的簡單項目中,我們隻提供了一種語言,還沒達到本地化的要求,于是我們向 App_localresources這個目錄手工增加一個資源檔案Default.aspx.en-us.resx檔案(其中英文[美國]的語言代碼 是"en-us"),我們向裡面添加一些key/value對,如下所示:

ASP.NET網站實作中英文轉換(本地化資源),轉

然後我們去修改IE的Internet選項的語言,添加“英文(美國)[en-us]”,并且把它移動到最上面:

ASP.NET網站實作中英文轉換(本地化資源),轉

再運作一次我們的項目,你會發現簡單的本地化已經實作,

ASP.NET網站實作中英文轉換(本地化資源),轉

至此,通過一個簡單的例子,我們已經初步認識了.NET2.0是如何實作利用Localization來實作本地化的。但是如果我們要建構一個優秀的國際化網站或軟體,我們需要對Localization做進一步的認識。

二. 進一步認識Localization

到了這裡,你會發現上述的頁面中是每一個頁面對應一些屬于自己的資源檔案,如果我們要求多張 頁面或者全部頁面都要用同一個資源檔案的時候,該怎麼做呢?很簡單,我們可以在項目中添加一個檔案夾,名叫App_GlobalResources,這是 系統預設的存放全局資源的目錄。例如我們在全局目錄中添加兩個檔案,分别是global.resx和global.en-us.resx,

ASP.NET網站實作中英文轉換(本地化資源),轉

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

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

ASP.NET網站實作中英文轉換(本地化資源),轉

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

于是我們會得到以下的效果,可以看出資源已綁定到控件上。

ASP.NET網站實作中英文轉換(本地化資源),轉

另一種方式則是在程式代碼進行綁定,由于.NET2.0架構會将全局資源檔案編譯成一個類,也就是說我們剛才建立的global.resx檔案将被編譯成一個類global,而資源檔案裡面的所有key将成為類的屬性,以供在程式裡進行通路。例如我們可以在程式裡這樣寫:

ASP.NET網站實作中英文轉換(本地化資源),轉

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

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

ASP.NET網站實作中英文轉換(本地化資源),轉

另外,資源檔案除了可以存放一些字元串之外,還可以存放圖檔,聲頻,檔案等等,

ASP.NET網站實作中英文轉換(本地化資源),轉

例如我們在資源檔案中添加一些圖檔資源,你可以将圖檔設定為在編譯時連結或者嵌入到資源檔案,

ASP.NET網站實作中英文轉換(本地化資源),轉

而在程式代碼裡面,我們得到的将是System.Drawing.Bitmap類型的變量,至于添加其他類型的檔案,得到的是什麼,這裡不多說了,大家自己探讨一下吧。

ASP.NET網站實作中英文轉換(本地化資源),轉

三. 語言設定

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

1. 在具體頁面進行設定

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" 

meta:resourcekey

="PageResource1" UICulture="auto" %>

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

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

ASP.NET網站實作中英文轉換(本地化資源),轉

<configuration>

ASP.NET網站實作中英文轉換(本地化資源),轉

   <system.web>

ASP.NET網站實作中英文轉換(本地化資源),轉

      <globalization culture="en-us" uiCulture="en-us"/>

ASP.NET網站實作中英文轉換(本地化資源),轉

   </system.web>

ASP.NET網站實作中英文轉換(本地化資源),轉

</configuration>

ASP.NET網站實作中英文轉換(本地化資源),轉

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

3. 在代碼裡面進行設定

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Globalization;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Threading;

ASP.NET網站實作中英文轉換(本地化資源),轉
ASP.NET網站實作中英文轉換(本地化資源),轉

// Set the culture to the browser's accept language

ASP.NET網站實作中英文轉換(本地化資源),轉

Thread.CurrentThread.CurrentCulture = 

ASP.NET網站實作中英文轉換(本地化資源),轉

    CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

ASP.NET網站實作中英文轉換(本地化資源),轉
ASP.NET網站實作中英文轉換(本地化資源),轉

// Set the user interface culture to the browser's accept language

ASP.NET網站實作中英文轉換(本地化資源),轉

Thread.CurrentThread.CurrentUICulture = 

ASP.NET網站實作中英文轉換(本地化資源),轉

    new CultureInfo(Request.UserLanguages[0]);

ASP.NET網站實作中英文轉換(本地化資源),轉

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

四. 解決方案

經過上述的初步和進一步的認識,相信大家已經了解了Localization的原理以及實作方法,但真要在我們的系統中實作多語言,實作本地化,我們應該怎樣來架構呢?

通常我們為了減少重複代碼,我們一般是建立一個基頁面PageBase類,讓所有的頁面都繼 承基頁面,在基頁面重寫InitializeCulture事件,而使用者所選擇的語言我們可以儲存在 Session,Cookie,QueryString或者.NET2.0提供的profile裡面。 下面我們以存儲在Session為例,建構我們的基頁面,為簡單起見,我隻是通過一個按鈕來選擇語言,真正實作的時候可能會用一個下拉框:

首頁面:

ASP.NET網站實作中英文轉換(本地化資源),轉

using System;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Data;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Configuration;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.Security;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI.WebControls;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI.WebControls.WebParts;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI.HtmlControls;

ASP.NET網站實作中英文轉換(本地化資源),轉

using Localization;

ASP.NET網站實作中英文轉換(本地化資源),轉

/** <summary>

/// 本地化

/// kenneth

/// 2006.07.16

/// </summary>

ASP.NET網站實作中英文轉換(本地化資源),轉

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, 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); 

    }

}

ASP.NET網站實作中英文轉換(本地化資源),轉

基頁面MyPageBase:

ASP.NET網站實作中英文轉換(本地化資源),轉

using System;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Data;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Configuration;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.Security;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI.WebControls;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI.WebControls.WebParts;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Web.UI.HtmlControls;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Threading;

ASP.NET網站實作中英文轉換(本地化資源),轉

using System.Globalization;

ASP.NET網站實作中英文轉換(本地化資源),轉
ASP.NET網站實作中英文轉換(本地化資源),轉

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["PreferredCulture"].ToString();

            if (UserCulture != "")

            {

                //根據Session的值重新綁定語言代碼

                Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserCulture);

                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture);

            }

        }

    }

}

ASP.NET網站實作中英文轉換(本地化資源),轉

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

ASP.NET網站實作中英文轉換(本地化資源),轉

為了您的安全,請隻打開來源可靠的網址

打開網站    取消

來自: http://hi.baidu.com/visual200x/blog/item/578dce3769043bd7a2cc2b5f.html

轉載于:https://www.cnblogs.com/leya/archive/2010/07/30/1788686.html

繼續閱讀