ASP.NET 新特性之本地化

http://msdn.microsoft.com/library/en-us/dnvs05/html/ASP2local.asp 

摘要:

由於越來越多的跨國公司需要跨語言的WEB應用,所以本地化工作變得尤其重要,在ASP.NET 1.1 中我們使用ResourceManager 類來實現這個工作,而2.0中提供了更加方便的方法和工具來實現

點擊這裏下載源代碼.

 

導言:

現在很多跨國的商務需求都需要實現多語言,對客戶來說他們始終想看到網站是用他們所熟悉的語言來顯示的,他們不會關注網站使用的是什麼技術,而現在的開發工具或者開發技術並沒有在本地化方面做的很好,我們還需要花大量的時間和精力去做本地化的工作。ASP.NET2.0的出現大大簡化了這個過程,配合VS.NET2005新的特性,我們可以很方便得來自動剝離網站的語言元素,很容易去實現多版本網站,而且許多針對本地化的API同樣也可以方便得幫助我們完成這個過程

 

.NET 1.1中的本地化:

1.1中我們使用ResourceManager來實現這個過程,或許對於WINFORM來說這個過程還比較簡單,但是VS.NET2003並沒有給我們WEBFORM下的本地化工作帶來什麼自動化,我們還需要花很多精力在重複複製代碼上,點擊這裏查看1.1的實現方法

 

.NET 2.0 中的本地化:

2.0中的本地化還是基於1.1的,但是卻提供了很多自動化工作:

1、自動生成頁面資源文件

2、方便的編程實現資源文件的訪問

3、自動爲頁面裝載合適的語言

4、控件和資源文件自動匹配

5、強類型的資源文件

6、資源文件編輯器

7、資源文件使用表達式

8、資源Provider模型

 

本地資源文件實現:

VS.NET 2005 菜單-ToolsGenerate Local Resource,所產生的資源文件將會放在/App_LocalResources下面



上圖顯示了,不僅ASPX文件,用戶控件和MASTER頁都會自動產生資源文件,自動產生的資源文件名將是原文件名加上.resx,頁面上的所有服務器控件,用戶控件和在服務器端運行的HTML控件都會被自動加在資源文件中,下圖顯示了一個LINKBUTTON的資源文件




可以看到,只有TESTTOOLTIP這些涉及到語言的屬性被加入了資源文件



 

 

再切換回視圖狀態可以看到一些屬性右邊有紅色標記,這表明這個屬性綁定的是本地資源,通常這些都是IDE自動爲你做的,再看看上面的AlternateText後面有一個藍色標記,這表示這個資源是全局的資源

 

全局資源的實現:

在我們的項目中通常有很多重複的東西,比如MasterPage,用戶控件,菜單,甚至還有一些提示信息等這些東西如果包含在多個頁面,我們每次都需要重複製作他們的資源文件,這非常不科學,所以我們要手動的來制定全局資源。這個時候先要建立一個/App_GlobalResources目錄然後在下面添加資源文件,先看看IDE提供給我們的資源文件編輯器



非常多種的類型,我們訪問全局資源不需要考慮太多,比如說一個資源文件是Flags.resx,試試在編譯器內輸入Resources.Flags,當再次按下.的時候,智能感應出來了




 

可見這些資源文件都被編譯成了強類型的類,比如說圖片資源我們得到的類型是System.Drawing.Bitmap

 

本地資源訪問:

通常我們使用meta:resourcekey來指定控件的資源,如果說一個控件的資源前綴是LinkButtonResource1的話,那麼它的Text屬性的資源就是LinkButtonResource1.Text,這個是生成資源文件的時候IDE自動做的,如果我們需要在程序中訪問本地資源可以按照下面的例子:

LinkButton button1 = new LinkButton();

this.lnkSelectCulture = button1;

button1.ID = "lnkSelectCulture";

button1.PostBackUrl = "selectculture.aspx";

button1.Text = ((string)

  base.GetLocalResourceObject("LinkButtonResource1.Text"));

button1.ToolTip = ((string)

  base.GetLocalResourceObject("LinkButtonResource1.ToolTip"));

當然,如果你不想你的控件使用資源文件可以按照下面的例子修改:

<asp:LinkButton id=lnkSelectCulture PostBackUrl="selectculture.aspx"

  runat="server" meta:localize="false">Change Culture

  Settings</asp:LinkButton>

 

全局資源訪問:

使用下面的格式來定位全局資源

<%$ resources: [applicationkey], resourcekey%>

比如從Glossary.resx讀取資源例子如下

<asp:ImageButton ID="btnIDesign" Runat="server"

  ImageUrl="~/Images/idesignlogo.jpg"

  AlternateText='<%$ Resources:Glossary, MissionSatatement%>'

PostBackUrl="http://www.idesign.net"

  meta:resourcekey="ImageButtonResource1" />

當然你也可以直接用IDE的表達式對話框直接來選擇




 

用程序讀取方式如下:

ImageButton button1 = new ImageButton();

// other initialization code

button1.ID = "btnIDesign";

button1.AccessKey = (string)

  base.GetLocalResourceObject("ImageButtonResource1.AccessKey");

button1.AlternateText = (string) base.GetGlobalResourceObject("Glossary",

  "MissionStatement");

button1.ImageUrl = (string)

   base.GetLocalResourceObject("ImageButtonResource1.ImageUrl");

button1.ToolTip = (string)

  base.GetLocalResourceObject("ImageButtonResource1.ToolTip");

button1.Visible = (bool)

  base.GetLocalResourceObject("ImageButtonResource1.Visible",

  typeof(Control), "Visible");

本地化HTML控件和文本:

Html控件:html控件不能用前面說的兩種表達式來指定資源,除非是讓它runat=server,不過對於頁面的title比較特殊,它也會作爲頁面的一個對象自動生成本地資源

<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" meta:resourcekey="PageResource1" %>

不過,我們也可以爲它制定全局資源

<head runat="server">

  <title><asp:Literal Text='<% $ Resources: Glossary, DefaultPageTitle %>' runat="server"></asp:Literal></title>

</head>

本地化文本:

對於項目中很多靜態的文本,我們可以使用Localize控件來包含這些文字,其實這個控件和Literal相似,但是它能在設計模式下隨意修改裏面的文字內容,看下怎麼訪問本地資源和全局資源

<asp:Localize id="welcomeContent" runat="server"

  meta:resourcekey="welcome">Welcome!</asp:Localize>

<asp:Localize id="welcomeContent" runat="server" text='<%$ resources: Glossary,

  welcomeText%>'>Welcome!</asp:Localize>

多語言實現:


 

從默認的資源文件複製一個新的的資源文件,只要在resx前面加上地區代號,逐項編輯即可,如下設置後瀏覽器會自動根據設置(工具-選項-語言)調用新的資源文件

<%@ Page UICulture="auto" Culture="auto">

當然你也可以通過web.config文件指定一種語言

<system.web>

<globalization culture="es-ES" uiCulture="es">

</system.web> 

發佈了29 篇原創文章 · 獲贊 0 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章