亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

ASP.NET 2.0 本地化功能:本地化 Web 應用程序

系統(tǒng) 2150 0

適用于:
Microsoft ASP.NET 2.0
Microsoft Visual Studio .NET
Microsoft Visual Studio 2005
本地化

摘要: 隨著越來越多的公司拓展海外業(yè)務,通過 Microsoft ASP.NET 創(chuàng)建全球化的 Web 應用程序顯得日益重要。ASP.NET 1.1 通過 ResourceManager 類支持創(chuàng)建本地化的 Web 站點。通過改進的運行時和工具支持,ASP.NET 2.0 使得提供對多語言和區(qū)域的支持更加容易。

下載本文的源代碼

*
本頁內容
使用 .NET 1.x 進行本地化 使用 .NET 1.x 進行本地化
ASP.NET 2.0 新本地化功能簡介 ASP.NET 2.0 新本地化功能簡介
生成本地資源 生成本地資源
共享的應用程序資源 共享的應用程序資源
隱式本地化表達式 隱式本地化表達式
顯式本地化表達式 顯式本地化表達式
本地化 HTML 元素和靜態(tài)文本 本地化 HTML 元素和靜態(tài)文本
資源本地化和部署 資源本地化和部署
運行時資源提供程序 運行時資源提供程序
首選的語言選擇 首選的語言選擇
小結 小結
其他資源 其他資源

自從 10 年前出現(xiàn) Internet 以來,企業(yè)團體已不斷地開拓國際化的市場。企業(yè)不僅通過自己的 Web 站點擁有了全球化的網絡呈現(xiàn)方式,而且越來越多的企業(yè)也正在發(fā)布和/或許可企業(yè)級 Web 應用程序以便最終能向全世界的客戶提供服務。由于大多數(shù)客戶喜歡在本國語言和環(huán)境下開展業(yè)務,因此有必要準備本地化的 Web 站點和應用程序。毫無疑問,不論哪種部署模型(智能客戶端、Web 站點和應用程序、Web 服務),具體而言就是體系結構和設計,本地化任務都需要付出時間和精力。有效的開發(fā)工具能影響體系結構的好壞,但奇怪的是,對于開發(fā)用于 Web 應用程序本地化的工具這一領域而言,仍然進步不足。結果許多企業(yè)求助于更傳統(tǒng)、更麻煩的本地化方法,而花費了大量時間和金錢。

Microsoft ASP.NET 2.0 版本承諾更好地轉變 Web 開發(fā)人員實現(xiàn)本地化的方式。通過使用更多 Microsoft Visual Studio .NET 環(huán)境內置的工具、新的運行時功能以及一個新的特定于本地化需求的編程 API,開發(fā)人員能夠更迅速地從 ASP.NET 頁面分離可本地化的內容,減少為訪問可本地化內容編寫的代碼,擴展?jié)M足額外需求的環(huán)境,同時綜合利用一個一致的編程模型。本文將帶領您體驗新改進的準備本地化應用程序的 ASP.NET 開發(fā)。

使用 .NET 1.x 進行本地化

.NET Framework 1.x 引入一個新的本地化體系結構,它提供語言支持的非插入漸進式部署,方法是將其拖放到新的附屬程序集(或只含資源程序集)中。這種輪輻式部署范例允許開發(fā)人員依靠公共語言運行庫來管理通過 ResourceManager 類精確選擇的可本地化內容。 ResourceManager 的一個優(yōu)點是它與一個封裝的資源回調機制進行交互,根據(jù)應用程序的運行時語言設置查找最合適語言,因此加載每個 ResourceSet 來檢索可本地化內容的過程無需開發(fā)人員編寫代碼進行管理。

Windows 或 Web 應用程序可以使用資源來本地化 Windows 窗體,但是 Visual Studio 2003 使 Windows 開發(fā)人員本地化 Windows 窗體的工作變得更加容易。當一個窗體的 Localizable 屬性設置為 true 時,則用于可本地化的 form control 屬性的資源將自動生成。屬性值被壓入默認資源以備后來進行翻譯,通過這些資源,生成的代碼在運行時使用 ResourceManager 類的實例填充控件。 ResourceManager 先考慮正在執(zhí)行線程的 CurrentUICulture 設置,然后嘗試在 ResourceSet 中查找匹配語言的資源,最后求助于資源的回調過程。

請在 此處 閱讀有關資源回調過程的信息。

.NET Framework 也包含許多與語言有關的類,在生成諸如格式化日期、時間和貨幣值等輸出結果時考慮 CurrentUICulture ,從而進一步減少開發(fā)人員所需的工作量。

請從 MSDN 參考資源 中閱讀與語言有關的類的更多信息。

盡管附屬程序集的部署模型、資源管理器以及與語言有關的類也能應用于 ASP.NET 應用程序,可是缺少供開發(fā)人員使用的工具將這個模型集成到 Web 窗體的編程范例中。目前,為 Web 頁面生成資源實體、在運行時訪問這些資源以及為每個請求設置正確的語言需要人工完成。因此 Web 應用程序本地化沒有過多考慮將資源作為一個集成部分。本地化 Web 內容傳統(tǒng)上造成了重復整個特定語言的網站,從而就地本地化靜態(tài)內容以及為任何共享代碼編寫自定義代碼來管理本地化數(shù)據(jù)源的檢索。ASP.NET 2.0 極大地改進了該方法。

后面的 MSDN 文章 討論用于 ASP.NET 1.1 本地化的結構化方法。

ASP.NET 2.0 新本地化功能簡介

ASP.NET 2.0 在 .NET 1.x 本地化功能的基礎上構建,專門改進了工作流和 Web 開發(fā)人員可用的功能。下面總結了促進下一代本地化支持的設計目標:

?

為 Web 應用程序提供支持資源生成的工具。

?

為資源訪問提供新的聲明性和運行時編程構造。

?

簡化對頁面請求應用正確語言和自動實例化 ResourceManager 的過程。

?

支持 XCOPY 部署和小型商業(yè)網站的編譯步驟移除。

?

支持具有使用和管理各方面資源的可擴展性的企業(yè)級開發(fā)版.

?

確保 ASP.NET 控件和其他可應用性運行時組件和適配器集成式地支持新本地化功能。

Visual Studio 2005 和 ASP.NET 2.0 集成的新功能確保能簡化 Web 應用程序本地化,它提供工具從 Web 頁面提取可本地化內容,為補充無狀態(tài)請求模型的資源使用提供集成的運行時支持,通過先進的聲明性構造將資源綁定到頁面輸出,為往返過程提供自動選擇語言的新方法。下面的功能專門用于支持這些目標:

Strongly Typed Resources — 處于 .NET Framework 2.0 版本核心地位的是強類型資源支持,它為開發(fā)人員提供智能感知,從而簡化運行時訪問資源所需的代碼。

Managed Resource Editor — Visual Studio .NET 2.0 包含一個新的資源編輯器,用于更好地創(chuàng)建和管理資源實例,例如字符串、圖像、外部文件和其他復雜類型等等。

Resource Generationfor Web Forms — Windows 窗體開發(fā)人員已經受益于自動的國際化。現(xiàn)在,Visual Studio 2005 將支持快速的國際化,自動生成 Web 窗體、用戶控件和主頁面的資源。

Improved Runtime Support — ResourceManager 實例由運行時管理,服務器代碼可通過更多可訪問的編程接口輕松訪問它。

Localization Expressions — 用于 Web 頁面的先進聲明性表達式將資源實體映射到控件屬性、HTML 屬性或靜態(tài)的內容區(qū)域。這些表達式也可擴展,從而提供了其他方法來控制將本地化內容添加到 HTML 輸出的過程。

Automatic Culture Selection — 每次 Web 請求的語言選擇能夠自動連接到瀏覽器偏愛來管理。

Resource Provider Model — 一個新的資源提供程序模型允許開發(fā)人員發(fā)布可選數(shù)據(jù)源(例如,平面文件和數(shù)據(jù)庫表格)的資源,而訪問這些資源的編程模型保持一致。

這些靈活的功能足以為亟需可靠且有效的解決方案的小型企業(yè)提供出盒支持,還仍然以附加的可擴展性滿足大型組織應用多種部署體系結構的復雜需求。改進的新模型綜合利用了 Web 應用程序的資源,聯(lián)合了 Windows 窗體編程模型,還考慮了開發(fā)周期和 Web 的運行時需求。以下各部分內容詳細介紹了在 Beta 1 版本中實現(xiàn)的這些新功能,也評論了期望在 Beta 2 版本中實現(xiàn)的改進。

生成本地資源

.NET 資源實現(xiàn)了為特定語言和語言區(qū)域選擇性地替換內容,因此同一個代碼基能夠支持多種語言。然而,為 Web 頁面生成資源需要大量的人工勞動,因此很難調動開發(fā)人員為 Web 應用程序使用這種方法的積極性。ASP.NET 2.0 提供一種簡單的方法為 Web 頁面自動生成資源,同時支持各種復雜的內容代理,包括 HTML 元素和屬性、靜態(tài)內容和服務器控件。

為特定的 Web 窗體生成資源,需要從 Visual Studio 2005 的“Tools”菜單選擇 Generate Local Resource ,然后為 Design View 中打開的任何頁面(包括 Web 窗體、用戶控件和主頁面)創(chuàng)建本地資源。這個步驟自動生成一組頁面的默認 .NET XML 資源,將其放置在為本地資源建立的名為 \LocalResources 的專用子目錄下(在 Beta 2 中此目錄名將改變)。

ASP.NET 2.0 本地化功能:本地化 Web 應用程序的新方法

1. Web 窗體、用戶控件和主頁面能在 Visual Studio .NET 2.0 內部國際化。這個特定視圖顯示為一些頁面生成的默認資源。

本地資源存儲在 .resx 文件中,文件的命名規(guī)則對應本地資源所服務的頁面(參見圖 1)。例如,為名為 site.master 的主頁面生成資源后,新的名為 site.master.resx 的 .resx 文件出現(xiàn)在 \LocalResources 中。對于名為 default.aspx 的 Web 窗體而言,生成的資源存儲在名為 default.aspx.resx 的文件中。

Visual Studio 設計器檢查頁面和它的控件(ASP.NET 服務器控件、自定義控件和設置為 runat="server" 的 HTML 控件)— 查找標記為 LocalizableAttribute 的屬性 — 并填充這些資源:

    [Localizable(true)]
public virtual string Text
{
     get {...}
     set {...}
}

  

每個控件的可本地化屬性自動壓入資源,以關鍵字唯一標識每個屬性。關鍵字包含一個標識頁面控件名和屬性名的前綴。除非在控件聲明中指定屬性值,否則每個屬性值均設置為控件的默認值。下列 LinkButton 聲明為 PostBackUrl Text 屬性指定了一個值:

    <asp:LinkButton id=lnkSelectCulture PostBackUrl="selectculture.aspx" 
  runat="server">Change Selected Culture</asp:LinkButton>

  

圖 2 顯示的是為宿主頁面生成本地資源后,為 LinkButton 生成的資源(參見示例項目中的 cultureinfo.ascx)。資源存儲在資源文件中(參見 cultureinfo.ascx.resx),默認情況下排除諸如 PostBackUrl 這樣的非可本地化屬性。


2. ASP.NET 服務器控件、自定義服務器控件和服務器端運行 (runat=“server”) HTML 控件的可本地化屬性生成本地資源。

生成資源時,控件聲明也被修改,以便聲明性地使屬性與資源實體相關聯(lián)。一些新的聲明性表達式也為頁面解析器所識別,它們觸發(fā)代碼生成,在運行時使用資源值填充控件屬性。聲明性本地化表達式是 ASP.NET 2.0 的一種新構造,類似數(shù)據(jù)綁定語句,是為訪問資源而專門設計的。這些表達式具有兩種形式:隱式和顯示。隱式表達式在本地資源生成時自動插入,而且支持在單個聲明語句中將多個資源實體映射到一組控件屬性中。顯式表達式是開發(fā)人員添加的用于進一步控制頁面本地化的聲明。

下列由 meta:resourcekey 標識的隱式表達式是為 LinkButton 聲明而生成的,現(xiàn)在,它為這個控件設置了資源關鍵字前綴:

    <asp:LinkButton id=lnkSelectCulture PostBackUrl="selectculture.aspx" 
  runat="server" meta:resourcekey="LinkButtonResource1">
  Change Selected Culture</asp:LinkButton>

  

控件屬性的資源實體使用這個前綴后,運行時將自動映射到正確的控件屬性。控件聲明中的每個屬性值保持原封不動,其中也包括那些壓入資源的值。這些默認值將出現(xiàn)在 Design View 中,為頁面內的控件提供上下文。解析頁面時,本地化表達式生成的代碼將資源應用到控件屬性。開發(fā)人員無需編寫代碼將 ResourceManager 實例化,以便在運行時訪問這些本地資源。

運行時資源值優(yōu)先,無資源值時由默認值代替。這對 Web 開發(fā)人員而言非常有用,因為在站點部署完成之前,他們就可以查看頁面內容。在 Properties Window 中,本地化后的內容由特殊圖標進行標記,表示它們的值是從資源中提取的。圖 3 顯示一個 ASP.NET ImageButton 控件,其中一些屬性綁定到共享資源(以藍色標識),另一些綁定到本地資源(以紅色標識)。使用表達式綁定屬性的內容將在后面部分深入討論。

ASP.NET 2.0 本地化功能:本地化 Web 應用程序的新方法

3. Properties Window 視圖中,很容易定位由特殊圖標標識的本地化內容。

到目前為止,討論的焦點是生成本地資源。默認情況下,它既為可本地化控件屬性生成隱式本地化表達式和資源,也將屬性綁定到共享應用程序資源。此外,它也可能為非可本地化控件屬性、其他 HTML 元素和靜態(tài)內容自動生成本地資源。將顯式本地化表達式應用到這些頁面和控件元素就可以實現(xiàn)。換句話說,開發(fā)人員能夠聲明性地標識出需要本地化的內容,以便頁面的資源生成中包含這些內容或選擇性地從替代源中提取。

共享的應用程序資源

為每個頁面自動生成本地資源會造成實體重復和多余的翻譯工作。幸運的是,ASP.NET 2.0 內部擁有一個為主頁面和用戶控件建立的重用模型,它支持標題、菜單、提要欄以及 HTML 其他部分在 Web 窗體間共享。每個主頁面、用戶控件和 Web 窗體擁有自己的本地資源集合,這樣就減少了資源重復。而且,在所有頁面之間進行合并和共享時,資源實體,例如詞條、錯誤信息和功能驅動程序(例如,方向屬性)將非常有用。

每個頁面的本地資源通過設計器自動生成,而共享的應用程序資源則需要手動創(chuàng)建。這就意味著將一個新的應用程序資源添加到解決方案中,將其放置在為共享資源指定的名為 \Resources 的專用目錄下(在 Beta 2 中此目錄將更改)。這與 1.x 應用程序生成共享資源的方法一致,然而,新的資源編輯器簡化了創(chuàng)建和編輯資源實體,共享資源通過智能感知支持進行了強類型化。共享資源也參與新頁面的解析和 ASP.NET 2.0 的運行時模型。它們能夠通過顯式本地化表達式綁定到頁面,這時, ResourceManager 自動進行實例化和緩存,開發(fā)人員不必管理運行時訪問資源的生命周期。

圖 2 和 圖 4. 顯示 Visual Studio 2005 的一個新 Managed Resource Editor。圖 2 是資源字符串編輯器,它與 Visual Studio 中的資源編輯器相似。圖 4 說明了編輯器支持的預定義資源種類列表,包括字符串、圖標、其他圖像文件類型、音頻文件類型以及含 XML 的其他文件。除了資源編輯器支持的這些預定義類型,以編程方式將其他復雜類型插入資源也是可能實現(xiàn)的。這時,基礎資源文件是基于 XML 的。

ASP.NET 2.0 本地化功能:本地化 Web 應用程序的新方法

4. Managed Resource Editor 集成支持多種預定義數(shù)據(jù)類型,提供替換視圖,此處顯示的是 Images 資源種類的縮略圖。

通過編輯器插入的基于文件的資源(例如,圖像、聲音和 XML 文件),在默認情況下定義為 ResxFileRef 實體。例如,下列代碼分別為一個外部圖像和一個 XML 文件創(chuàng)建資源實體:

    <data name="Spain" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\Images\Spain.gif;System.Drawing.Bitmap, 
     System.Drawing, Version=2.0.3600.0, Culture=neutral, 
     PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="supportedCultures" type="System.Resources.ResXFileRef, 
  System.Windows.Forms">
    <value>..\Xml\supportedCultures.xml;System.String, mscorlib, 
     Version=2.0.3600.0, Culture=neutral, 
     PublicKeyToken=b77a5c561934e089;iso-8859-1</value>
</data>

  

資源編譯器解析每個文件引用,運行時將引用的文件載入流,并將其轉換成正確的數(shù)據(jù)類型。圖像轉換后的類型是 System.Drawing.Bitmap ,而 XML 默認情況下返回 System.String 類型。對于預編譯的 Web 應用程序而言,資源是嵌入到輸出程序集中的。這意味著實際文件無需與網站一起部署。資源和相關文件也能夠部署為完整運行時編譯,這與 ASP.NET 2.0 的新編譯模型一致(有關更多信息,請參見 本文 )。

共享資源最顯著的優(yōu)點是編譯后的強類型類使資源關鍵字能夠直接訪問實體。例如,名為 Flags.resx 的共享應用程序資源以運行時類型 Resources.Flags 來訪問。內部的 Resources 類型都支持智能感知,如果類型轉換器可用,則資源項將以本機數(shù)據(jù)類型返回。圖 5 所示圖像的數(shù)據(jù)類型是 System.Drawing.Bitmap


5. 共享資源編譯到強類型資源中,通過內部的 Resources 對象訪問。

基于圖像的資源對 Web 控件開發(fā)人員而言很有用,因為它能封裝控件使用的嵌入式圖形。然而,它對 Windows 窗體開發(fā)人員而言更有用,開發(fā)人員能夠很容易地使用二進制圖像格式進行顯示。總之,強類型資源和智能感知提高了運行時訪問資源的效率。例如,圖 5 也闡釋了一個強類型 Glossary 資源如何使檢索命名的字符串值變得更容易。

本地資源和共享資源都能夠以聲明方式或編程方式訪問,以便生成本地化內容。這些技術將在以下部分討論。

隱式本地化表達式

正如之前提到的,本地資源生成時將觸發(fā)頁面控件聲明修改。默認行為是將隱式本地化表達式添加到服務器控件,由解析時屬性 meta:resourcekey 表示。

    <asp:LinkButton id=lnkSelectCulture PostBackUrl="selectculture.aspx" 
  runat="server" meta:resourcekey="LinkButtonResource1">
  Change Culture Settings</asp:LinkButton>

  

這個表達式為控件屬性相關的所有資源實體設置了預期的前綴 —— 因此使用術語 隱式表達式 。自動的資源生成只考慮可本地化屬性,但是實際上任何資源實體,只要使用此前綴加上一個合法的屬性名,都能綁定到編譯過的頁面代碼中的該屬性。在上面的示例中, LinkButtonResource1 是資源關鍵字前綴,圖 2 顯示的資源為應用到同一個控件實例(即 LinkButtonResource1.Text )的所有屬性使用了這個前綴。

這條聲明性的語句( meta:resourcekey )通知 ASP.NET 頁面解析器生成代碼,用于從默認本地資源檢索屬性值。結果代碼最終在 GetPageResourceObject (在 Beta 2 中此方法名可能更改)的幫助下使用運行時方法訪問資源。在提供的示例代碼中,編譯的 cultureinfo.ascx 頁面使用以下代碼來創(chuàng)建和實例化 LinkButton lnkSelectCulture

    LinkButtonbutton1 = new LinkButton();
this.lnkSelectCulture= button1;
button1.ID = "lnkSelectCulture";
button1.PostBackUrl= "selectculture.aspx";
button1.AccessKey = ((string) 
 base.GetPageResourceObject("LinkButtonResource1.AccessKey"));
button1.SoftkeyLabel = ((string) 
. base.GetPageResourceObject("LinkButtonResource1.SoftkeyLabel"));
button1.Text = ((string) 
 base.GetPageResourceObject("LinkButtonResource1.Text"));
button1.ToolTip = ((string) 
 base.GetPageResourceObject("LinkButtonResource1.ToolTip"));
button1.Visible = ((bool) 
 base.GetPageResourceObject("LinkButtonResource1.Visible", 
 typeof(Control), "Visible"));

  

隱式本地化表達式在生成頁面資源時應用到所有服務器控件聲明。您能夠使用下面的替代語法取消這個行為,它指示出該控件不應該進行本地化:

    <asp:LinkButton id=lnkSelectCulture PostBackUrl="selectculture.aspx" 
  runat="server" meta:localize="false">Change Culture 
  Settings</asp:LinkButton>

  

對本地化策略不重要的個別控件屬性可以使用圖 2 顯示的 Managed Resource Editor 手動將其從本地資源中移除。這將減少頁面解析器生成的將本地資源實體應用到控件屬性的代碼數(shù)量,因為代碼只反映頁面的默認本地資源中存在的那些實體。這也意味著添加到本地化資源的附加關鍵字值在運行時將不會應用,因為沒有生成代碼來實現(xiàn)這一點。

這類本地化表達式綜合利用了與 .NET Framework 2.0 一起發(fā)布的新 Expression Builder。隱式本地化表達式從單個聲明語句生成代碼來填充所有可本地化的服務器控件屬性,為開發(fā)人員節(jié)省了時間。同時也刪除了目前 1.x Web 應用程序所需的一個手動步驟,即通常需要自定義數(shù)據(jù)綁定語句或自定義代碼從本地化資源或數(shù)據(jù)源提取值。下面將預覽如何為靜態(tài)文本和具體控件屬性(包括那些沒有 LocalizableAttribute 標記的屬性)自動生成附加資源。

顯式本地化表達式

盡管為可本地化控件屬性自動生成資源非常容易,可是開發(fā)人員也需要一個支持本地化特定屬性值和其他內容塊的解決方案。顯式本地化表達式以聲明方式將特定資源實體分配到服務器控件屬性和其他 HTML 元素。例如,下面的 ImageButton 控件聲明使用了一個顯式表達式來設置 AlternateText 屬性:

    <asp:ImageButton id="btnIDesign" Runat="server" 
  ImageUrl="~/Images/idesignlogo.jpg" 
  AlternateText='<%$ Resources: MissionStatement %>' 
  PostBackUrl="http://www.idesign.net" />

  

顯式本地化表達式使用以下語法:

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

  

上例省略了 applicationkey ,因為 MissionStatement 值從本地資源提取。 resourcekey 值標識提取的資源實體,而 default 值表示設計器默認值。設計器默認值僅在設計時存在,供開發(fā)人員或 Web 設計者編輯頁面布局。

顯式表達式也能夠通過圖 6 所示的“Properties”窗口中的 Expressions 對話框生成。這個對話框支持創(chuàng)建顯式表達式值,從而將控件屬性綁定到本地資源或共享資源。

ASP.NET 2.0 本地化功能:本地化 Web 應用程序的新方法

6. 使用 Expressions 對話框,開發(fā)人員能直觀地將資源映射到屬性,并生成顯式本地化表達式。

通過該對話框,開發(fā)人員能使用“Properties”窗口創(chuàng)建顯式表達式,就像設置其他控件屬性一樣。如果 Expression Properties 中省略 ClassName(請參見圖 6),下拉列表將顯示可用的本地資源關鍵字(假定已經創(chuàng)建了資源)。否則,本地資源對應的顯式表達式將生成關鍵字與 ResourceKey 匹配的本地資源實體。這又一次減少了開發(fā)人員在運行時創(chuàng)建資源實體和生成填充屬性的代碼所需的工作量。

如果訪問共享資源, ClassName 應標識全局資源目錄下的一個合法資源文件名。與本地資源不同的是,共享資源對應的顯式表達式不自動生成這些資源。

隱式和顯式本地化表達式能混合使用,以便特定屬性從共享資源提取,而其他屬性從本地資源提取。下列代碼示例顯示的是, ImageButton 控件聲明從共享資源 (Glossary.resx) 獲取 AlternateText 屬性,所有其他屬性使用隱式表達式語法從本地資源提取:

    <asp:ImageButton ID="btnIDesign" Runat="server" 
  ImageUrl="~/Images/idesignlogo.jpg" 
  AlternateText='<%$ Resources:Glossary, MissionSatatement%>' 
PostBackUrl="http://www.idesign.net" 
  meta:resourcekey="ImageButtonResource1" /></td>

  

使用顯式本地化表達式后,詳細控制哪里、哪些屬性被本地化將可能實現(xiàn)。對于包含顯式和隱式表達式兩者的控件聲明,頁面資源按以下方式生成:

?

顯式表達式綁定的屬性,如果指定了一個共享資源,在本地資源生成中將省略。

?

用于本地資源的顯式表達式綁定的屬性,生成一個 default 值的 resourcekey 入口點。

?

其余未綁定顯式表達式的可本地化屬性,用控件聲明或控件的默認屬性值生成一個 resourcekey.propertyname 的入口點。

正如之前提到的,頁面解析時,聲明中的代碼自動生成,以便從共享或本地資源提取屬性值。在上面的示例代碼中,結果代碼創(chuàng)建了一個 ImageButton 控件,從 Glossary 共享資源設置 AlternateText 屬性,其余可本地化屬性通過本地資源設置:

    ImageButtonbutton1 = new ImageButton();
// other initialization code
button1.ID = "btnIDesign";
button1.AccessKey = (string) 
 base.GetPageResourceObject("ImageButtonResource1.AccessKey");
button1.AlternateText= (string) base.GetAppResourceObject("Glossary", 
 "MissionStatement");
button1.ImageUrl = (string)
  base.GetPageResourceObject("ImageButtonResource1.ImageUrl");
button1.ToolTip = (string) 
 base.GetPageResourceObject("ImageButtonResource1.ToolTip");
button1.Visible = (bool) 
 base.GetPageResourceObject("ImageButtonResource1.Visible", 
 typeof(Control), "Visible");

  

本地化 HTML 元素和靜態(tài)文本

使用隱式和顯式本地化表達式,使得為服務器控件屬性生成資源變得容易。但是,準備本地化一個頁面,也必須考慮諸如 HTML 頁標題、方向屬性和靜態(tài)內容等其他內容。本地化表達式也能應用到 @Page 指令和 HTML 其他部分,先于生成頁面資源,聲明性地標識其他本地化部分。

HTML 控件:

HTML 控件運行在服務器端 ( runat="server" ) 時,才能體現(xiàn)隱式或顯式表達式的優(yōu)點。一旦標記為服務器端控件,將自動生成應用于控件的可本地化屬性的本地資源。HTML 服務器控件與 ASP.NET、自定義服務器控件一樣,也能綁定到隱式或顯式表達式,后者可使用前面提到的 Expressions 對話框生成。

頁標頭的 HTML 元素也能聲明性地綁定到資源,對于頁標題和樣式表鏈接,這是有用的。HTML 頁標題元素很特殊,因為它也是一個 Page 屬性,能通過 @Page 指令設置。默認情況下,本地資源生成時,隱式表達式分配到每個頁面:

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

  

這條表達式也可以修改為顯式表達式,用于從共享資源(而非本地資源)提取值:

這些表達式都不能覆蓋 HTML 標頭的 < title > 元素值,但是沒有這些值,表達式也能夠直接應用到 < title > 元素,下面使用的是顯式表達式:

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

  

方向屬性

改進的方向設置支持是通過新提供的 Direction 屬性添加的,這個屬性由諸如 < asp:Panel > 一類的控件支持。因為使用一個根據(jù)語言標識應用程序的整體方向的共享資源,所以在默認的共享資源中能標識默認的 “LTR” 方向,并依據(jù)能夠指定 “LTR” 的語言覆蓋這個值。

為了控制瀏覽器滾動條的方向并設置站點的整體方向,下面的顯式表達式通過設計器默認值 “LTR” 從共享資源提取正確的值:

    <html runat="server" dir='<% $Resources: Common, Direction %>' >
...
</html>

  

panel 也可以用于設置所包含控件的方向:

    <asp:panel runat="server" direction='<% Resources: Common, Direction %>'>
...
</asp:panel>

  

有關 Visual Studio .NET 方向支持的更多信息,請訪問 此站點

靜態(tài)文本

本地化表達式用于設置控件屬性和其他 HTML 元素;但是,許多要進行本地化的 Web 頁面已經包含大量混有 ASP.NET 控件的靜態(tài)內容塊。新的 ASP.NET Localize 控件用于將靜態(tài)內容標記為可本地化,以便資源生成包含這部分靜態(tài)內容。如果控件中 meta:resourcekey 的指定先于生成資源命令的發(fā)布,則使用指定的關鍵字(同樣適應于其他控件):

    <asp:Localize id="welcomeContent" runat="server" 
  meta:resourcekey="welcome">Welcome!</asp:Localize>

  

以上示例為 Localize 控件的 Text 屬性生成了一個新的本地資源入口點,資源前綴是 "welcome" ( welcome.Text )。要從共享資源顯式填充靜態(tài)內容,可以通過一個顯式本地化表達式指定 Text 屬性:

    <asp:Localize id="welcomeContent" runat="server" text='<%$ resources: Glossary, 
  welcomeText%>'>Welcome!</asp:Localize>

  

與其他情況一樣,這些聲明性語句解析成代碼來請求資源設置控件屬性,這里是 Text 屬性。任何出現(xiàn)在控件聲明語句中的 HTML 標記都將包含在資源生成中,這使翻譯過程變得復雜,因此最好不要包含標記。

Localize 控件比它的基類 Literal 控件優(yōu)越的是,運行時它的處理方式與 Literal 控件很像;然而,設計器會忽略它,并允許開發(fā)人員直接在 Design View 中編輯靜態(tài)內容(不像 Literal 控件,在 Design View 中它綁定到一個容器中)。

資源本地化和部署

新的聲明語句、頁面資源的自動生成和強類型共享資源都使開發(fā)人員準備本地化 Web 應用程序更輕松。存儲在 \LocalResources 和 \Resources 目錄(分別是本地資源和共享資源)下的默認資源能翻譯成支持的語言,翻譯后的資源復制到源目錄下。翻譯資源的命名規(guī)則遵循 1.x 使用的規(guī)則。翻譯后的 .resx 文件名包含語言代碼。圖 7 顯示的是一個示例工程的擴展視圖,其中的頁面資源翻譯成了西班牙語、法語和意大利語。

ASP.NET 2.0 本地化功能:本地化 Web 應用程序的新方法

7. 1.x 的資源命名規(guī)則一致,根據(jù)語言代碼命名 .resx 文件。

典型的 .NET Framework 1.x 應用程序發(fā)布時附帶本地化的附屬程序集,而 ASP.NET 2.0 還有新的可選部署集:

1.

ASP.NET 2.0 運行時繼續(xù)支持傳統(tǒng)的部署模型 — \bin 目錄包含本地程序集依賴項,每個支持語言的子目錄包含附屬(只含資源)程序集。

2.

ASP.NET 2.0 預編譯將 Web 頁(即頁面、用戶控件和主頁面)、本地資源和代碼分隔文件作為一個單獨文件進行處理 — 將它們編譯到可部署的程序集。共享資源也預編譯到用于部署的程序集。任何引用的資源入口點(例如,圖像或 XML 文件)編譯到程序集單元中。基本上而言,ASP.NET 2.0 Web 應用程序的預編譯就是一個二進制容器,通過封裝為源文件提供更高級別的保護。

3.

ASP.NET 2.0 也支持完整的運行時編譯。這意味著所有 Web 頁、代碼分隔文件、其他源代碼、資源(共享和本地)以及其他支持的應用程序文件都能以原始格式進行部署。然后,運行時編譯器負責解析頁面,隨時生成程序集。這個模型提供了最大化的靈活性,但是主要用于輕量型 Web 應用程序,這樣的應用程序頻繁更改,而且不要求高級別的源代碼安全。

4.

ASP.NET 2.0 發(fā)布時也可能實現(xiàn)混合多項功能。也就是說,將所有代碼分隔文件和其他資源編譯到用于部署的二進制程序集的同時,還能將頁面和資源部署成源。這樣可以靈活地為一個或多個頁面編輯頁面布局和資源內容或部署新的可本地化資源,而不會導致不受影響的應用程序集進行動態(tài)地重新編譯。

對于第二、三、四項,ASP.NET 2.0 編譯器自動將 \LocalResources 和 \Resources 目錄下的 .resx 源文件編譯到程序集。至于第三項和第四項,本地資源的編譯先于頁面的編譯,即第一次訪問頁面或修改了頁面源(或它的 .resx 文件)時進行的編譯。由于具有 .resx 的編譯提供程序,因此無需編譯步驟就能進行部署。

正如第一項提到的,用于 1.x 程序集的向后可編譯支持、非特定資源和相關附屬程序集仍然存在。這個部署模型不使用 2.0 的本地化表達式,而且訪問這些資源也不是通過默認的運行時資源提供程序模型進行的。使用表達式編譯程序和資源提供程序的可擴展模型,對綜合利用 2.0 提供的高效功能和 1.x 支持的資源部署將很有用處。

運行時資源提供程序

為了在 ASP.NET 1.x 應用程序中使用 ResourceManager ,需要在執(zhí)行數(shù)據(jù)綁定語句或應用從資源檢索值的其他機制之前,在代碼中實例化 ResourceManager 。訪問本地資源和共享資源時,ASP.NET .0 按需要自動實例化資源管理器,無需編寫代碼來管理此過程。因為使用聲明性語句以資源值填充控件屬性和 HTML 元素,所以不用編寫任何代碼來生成完全本地化的頁面!

默認的 ResourceProviderFactory 負責在設計時使用相關的設計器工廠實例化資源提供程序,在運行時為頁面和共享資源實例化資源提供程序。開發(fā)人員能編寫代碼來訪問本地資源的值,方法是使用 Beta 1 中 Page 對象公開的 GetPageResourceObject

    if (this.Context.User.Identity.IsAuthenticated)
mnuLogin.Text = GetPageResourceObject("Login");
else
mnuLogin.Text = String.Format(GetPageResourceObject("LogoutUser", 
 this.Context.User.Identity.Name);

  

當依賴資源的 HTML 輸出需要運行時決策時,它能夠用于覆蓋聲明性本地化表達式。要訪問共享的頁面資源,可以使用 Page 對象公開的另一個方法:

    string cultures = 
 (string)this.GetAppResourceObject("supportedCultures");

  

對于共享資源而言,開發(fā)人員更傾向于綜合利用智能感知和強類型資源訪問,下面的示例是檢索一個存儲為 String 類型的 XML 資源:

    string cultures = Resources.Cultures.supportedCultures;

  

最終, GetPageResourceObject GetAppResourceObject 通過配置好的資源提供程序訪問正確的資源。如果創(chuàng)建了一個自定義資源提供程序,這些方法將能夠使用 GetAppResourceObject 從那些共享資源中進行檢索。

首選的語言選擇

ASP.NET 1.x 應用程序傳統(tǒng)上使用兩種主要的方法選擇每次請求的語言。對于在特定語言子目錄下復制整個站點的應用程序,由 web.config 中的 < globalization > 元素來標識從這些子目錄請求資源的運行時線程所使用的語言和 UI 語言:

    <system.web>
<globalization culture="es-ES" uiCulture="es">
</system.web>

  

這些聲明性設置對使用單一代碼基的應用程序沒用。而手動設置每個請求線程的語言需要運行時代碼,以便能為每個發(fā)出請求的用戶動態(tài)地選擇語言。用戶的首選語言能從數(shù)據(jù)庫配置文件、一個 HTTP cookie 或 Web 瀏覽器的語言設置中收集。無論如何,設置請求線程的 UI 語言決定了在運行時 ResourceManager 從哪一個本地化資源提取資源,而且正如之前提到的,語言設置影響與語言有關的格式。

ASP.NET 2.0 引入一個新功能,能根據(jù) Web 瀏覽器的偏愛自動選擇運行時的語言。 @Page 指令用于標識是否應該根據(jù)瀏覽器的偏愛執(zhí)行特定頁面,它也支持語言和 UI 語言的設置:

    <%@ Page uiCulture="auto" culture="auto">

  

應用程序的 web.config 文件也能將這項設置應用到整個應用程序中:

    <system.web>
<globalization culture="auto:en-US" uiCulture="auto:en">
</system.web>

  

如果 HTTP 頁眉不可用, auto 后的冒號允許您指定一個默認的語言。因為必須設置一個特定的語言,因此上面的示例將 en-US 作為顯示的語言。

最終結果是運行時自動檢測瀏覽器發(fā)送的 ACCEPT_LANG 頁眉,在頁面周期的早期,將線程設置為用戶語言首選列表中的第一個語言。如果為應用程序的用戶存儲了一個配置文件,或用戶能夠通過站點選擇特定的語言,那么開發(fā)人員必須編寫代碼來覆蓋運行時處理的 auto 設置。示例代碼說明了這種情況的一個使用技巧。

小結

為了更迅速地適應未來遍及全球市場的產品發(fā)布的要求,在開發(fā)周期早期就定義一個全球化策略勢在必行。使用 ASP.NET .0 這些新的本地化功能,開發(fā)人員能夠更輕松地貫徹執(zhí)行本地化應用程序的策略,與此同時,減少開發(fā)周期的系統(tǒng)開銷。頁面資源的自動生成和新的 Managed Resource Editor 使創(chuàng)建 Web 應用程序資源變得更自然。使用聲明性本地化表達式,可能確保本地化所有必要的頁面元素,并有助于自動生成適當?shù)捻撁尜Y源。一個新的運行時模型意味著開發(fā)人員能選擇不再編譯附屬程序集,不再實例化資源管理器,并且不用根據(jù)語言來設置請求線程。最終將有利于發(fā)布強健的具有單一代碼集的 Web 應用程序,從而降低發(fā)布應用于全球化市場的解決方案的成本和付出。

ASP.NET 2.0 本地化功能:本地化 Web 應用程序的新方法


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美大片在线观看成人 | 人人干操 | 久久riav国产精品 | 国产欧美日韩免费一区二区 | 亚洲欧美韩国 | a毛毛片| 老司机午夜精品视频 | 欧美一区二区三区在线可观看 | 午夜看看 | 伦理亚洲 | 四虎成人在线视频 | 日本一级特大毛片 | 亚洲精品久久九九热 | 草草操| 老司机精品在线观看 | 99久久香蕉国产线看观香 | 午夜在线视频网站 | 99热久久这里只有精品99 | 精品人人做人人爽久久久 | 一级高清毛片免费a级高清毛片 | 午夜毛片视频 | 国产午夜亚洲精品久久www | 日本伊人 | 五月色婷婷综合激情免费视频 | 91精品国产免费 | 精品99re66| 色人久久 | 国产国产成人精品久久 | 天天干天天草天天射 | 欧美毛片又粗又长又大 | 欧美日韩在线网站 | 欧美香蕉视频 | 国产综合另类小说色区色噜噜 | 久久亚洲私人国产精品va | 四虎永久在线观看免费网站网址 | 亚洲欧美自拍一区 | 成人夜夜| 就草草在线观看视频 | 亚洲性夜夜综合久久麻豆 | 国产精品午夜高清在线观看 | 一级淫片免费视频 |