了解 ASP.NET AJAX 當地語系化

作者:Scott Cate

當地語系化是將特定語言和文化特性的支援設計及整合至應用程式或應用程式元件的程式。 Microsoft ASP.NET 平臺藉由整合標準 .NET 當地語系化模型,為標準 ASP.NET 應用程式提供廣泛的當地語系化支援;Microsoft AJAX 架構會利用整合模型來支援可執行當地語系化的各種案例。

簡介

Microsoft 的 ASP.NET 技術帶來物件導向和事件驅動程式設計模型,並結合編譯器代碼的優點。 不過,其伺服器端處理模型具有技術固有的幾個缺點,其中許多功能可由 System.Web.Extensions 命名空間中包含的新功能解決,其封裝.NET Framework 3.5 中的 Microsoft AJAX 服務。 這些延伸模組可啟用許多豐富的用戶端功能,先前是 ASP.NET 2.0 AJAX 延伸模組的一部分,但現在是 Framework 基類庫的一部分。 此命名空間中的控制項和功能包括部分轉譯頁面,而不需要完整頁面重新整理、透過用戶端腳本存取 Web 服務的能力, (包括 ASP.NET 程式碼剖析 API) ,以及設計來鏡像 ASP.NET 伺服器端控制項集中看到的許多控制項配置。

本白皮書會檢查 Microsoft AJAX Framework 和 Microsoft AJAX 腳本程式庫中的當地語系化功能,在當地語系化支援的商業需求中,以及檢閱.NET Framework所提供 Web 應用程式中當地語系化的已整合式支援。 Microsoft AJAX 腳本程式庫會利用 .net 應用程式已使用的 .resx 檔案格式,以提供整合式 IDE 支援和可共用的資源類型。

本白皮書是以 Microsoft Visual Studio 2008 的 Beta 2 版本為基礎。 本白皮書也假設您將使用 Visual Studio 2008,而非 Visual Web Developer Express,並且會根據 Visual Studio 的使用者介面提供逐步解說。 某些程式碼範例會利用 Visual Web Developer Express 中可能無法使用的專案範本。

當地語系化的需求

特別是對於企業應用程式開發人員和元件開發人員而言,能夠建立可察覺文化特性和語言差異的工具變得越來越必要。 設計能夠適應用戶端地區設定的元件會增加開發人員生產力,並減少元件適應全球運作所需的工作量。

當地語系化是將特定語言和文化特性的支援設計及整合至應用程式或應用程式元件的程式。 Microsoft ASP.NET 平臺藉由整合標準 .NET 當地語系化模型,為標準 ASP.NET 應用程式提供廣泛的當地語系化支援;Microsoft AJAX 架構會利用整合模型來支援可執行當地語系化的各種案例。 透過 Microsoft AJAX 架構,腳本可以藉由部署至附屬元件,或使用靜態檔案系統結構來當地語系化。

使用附屬元件內嵌腳本

與標準.NET Framework當地語系化策略一致,資源可以包含在附屬元件中。 附屬元件提供數個優於二進位檔的傳統資源包含優點 - 任何指定的當地語系化都可以更新,而不需要更新較大的映射,只要將附屬元件安裝到專案資料夾中即可部署其他當地語系化,而且可以部署附屬元件,而不需要重載主要專案元件。 特別是在 ASP.NET 專案中,這很有説明,因為它可以大幅減少累加式更新所使用的系統資源數量,而且最少會中斷生產網站使用量。

腳本會內嵌到元件中,方法是將它們包含在 Managed .resx (或編譯的 .resources) 檔案中,這些檔案會在編譯時期包含在元件中。 然後,其資源會透過 AJAX 執行時間產生的程式碼,透過元件層級屬性提供給腳本應用程式使用

內嵌腳本檔案的命名慣例

Microsoft AJAX 架構腳本管理支援各種選項,可用於部署和測試腳本,並提供指導方針來協助這些選項。

為了協助偵錯:

發行 (生產) 腳本不應在 .debug 檔案名中包含限定詞。 設計用於偵錯的腳本應該包含在 .debug 檔案名中。

為了協助當地語系化:

中性文化特性腳本不應在檔案名中包含任何文化特性識別碼。 對於包含當地語系化資源的腳本,應該在檔案名中指定 ISO 語言代碼。 例如, es-CO 代表西班牙文、加拿大。

下表摘要說明檔案命名慣例與範例:

檔案名稱 意義
Script.js 版本文化特性中性腳本。
Script.debug.js 偵錯版本文化特性中性腳本。
Script.en-US.js 版本英文,美國腳本。
Script.debug.es-CO.js 偵錯版本西班牙文、加拿大腳本。

逐步解說:建立當地語系化的內嵌腳本

請注意:本逐步解說需要使用 Visual Studio 2008,因為 Visual Web Developer Express 不包含類別庫專案的專案範本。

  1. 建立已整合 ASP.NET AJAX Extensions 的新網站專案。 在名為 LocalizingResources 的方案內,建立另一個專案類別庫專案。
  2. 將名為 VerifyDeletion.js 的 Jscript 檔案新增至 LocalizingResources 專案,以及名為 DeletionResources.resx 和 DeletionResources.es.resx 的 .resx 資源檔案。 前者將包含文化特性中性資源;後者將包含西班牙文語言資源。
  3. 將下列程式碼新增至 VerifyDeletion.js:
function VerifyDeletion(fileName)
{
 if (confirm(Message.VerifyDelete.replace(/FILENAME/, fileName)))
 {
 Delete(fileName);
 return true;
 }
 return false;
}
function Delete(fileName)
{
 alert (Message.Deleted.replace(/FILENAME/, fileName));
}

對於不熟悉 JavaScript Regex 語法的那些文字,在上一個範例中,單一斜線內的文字 (/FILENAME/ 是) 代表 RegExp 物件的範例。 MSDN 程式庫包含廣泛的 JavaScript 參考,而且可以在線上找到 JavaScript 原生物件上的資源。

  1. 將下列資源字串新增至 DeletionResources.resx:

    VerifyDelete:您確定要刪除 FILENAME 嗎?

    已刪除:已刪除 FILENAME。

  2. 將下列資源字串新增至 DeletionResources.es.resx:

    VerifyDelete: Est seguro que desee quitar FILENAME?

    已刪除:FILENAME se ha quitado。

  3. 將下列幾行程式碼新增至 AssemblyInfo 檔案:

[assembly: System.Web.UI.WebResource("LocalizingResources.VerifyDeletion.js",
 "text/javascript")]
[assembly: System.Web.UI.ScriptResource("LocalizingResources.VerifyDeletion.js",
 "LocalizingResources.DeletionResources", "Message")]
  1. 將 System.Web 和 System.Web.Extensions 的參考新增至 LocalizingResources 專案。
  2. 從網站專案新增 LocalizingResources 專案的參考。
  3. 在 default.aspx 的 [網站] 專案下,使用下列其他標記更新 ScriptManager 控制項:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true">
 <Scripts>
 <asp:ScriptReference Assembly="LocalizingResources" Name="LocalizingResources.VerifyDeletion.js"/>
 </Scripts>
</asp:ScriptManager>
  1. 在 default.aspx 中,頁面上的任何位置都包含此標記:
<asp:Button ID="btnDelete" runat="Server" OnClientClick="VerifyDeletion('a.txt');" Text="Delete" />
  1. 按下 F5。 如果出現提示,請啟用偵錯。 載入頁面時,請按 [刪除] 按鈕。 請注意,除非您的電腦預設設定為偏好西班牙文語言資源,) 否則系統會以英文 (提示您進行確認。
  2. 關閉瀏覽器視窗並返回 default.aspx。 在標頭指示詞中 @Page ,將 Culture 和 UICulture 的 auto 取代為 es-ES。 再次按 F5 以再次在瀏覽器中啟動 Web 應用程式。 這次請注意,系統會提示您以西班牙文刪除檔案:

顯示 [Windows Internet Explorer] 對話方塊的螢幕擷取畫面,其中含有西班牙文語言提示,按一下 [O K]。

(按一下即可檢視完整大小的映射)

顯示以西班牙文刪除檔案提示的螢幕擷取畫面。

(按一下即可檢視完整大小的映射)

請注意,本逐步解說有數種變化。 例如,腳本可以在頁面載入期間以程式設計方式向 ScriptManager 控制項註冊。

包含靜態腳本檔案結構

使用靜態腳本檔案進行部署時,您會失去使用固有 .NET 當地語系化配置的一些優點。 主要可見的是,您會遺失從包含腳本資源檔所產生的自動類型;例如,在上述逐步解說中,資源是由 ScriptManager 控制項中稱為 Message 的自動產生類型所公開。

不過,使用靜態腳本檔案結構有一些優點。 更新不需要重新編譯和重新部署附屬元件,也可以使用靜態檔案結構來覆寫內嵌腳本,以整合可能尚未隨附于元件的次要功能片段。

Microsoft 建議在專案編譯期間自動產生腳本資源,以避免版本控制問題。 維護廣泛的腳本程式碼基底時,確保程式碼變更會反映在每個當地語系化的腳本中變得變得困難。 或者,您可以直接維護一個邏輯腳本和多個當地語系化腳本,在建置專案時合併檔案。

因為沒有以宣告方式包含的資源,所以應該藉由在執行時間將元素新增 <asp:ScriptElement> 為 ScriptManager 控制項標籤的 <Scripts> 子系,或以程式設計方式將物件新增 ScriptReferenceScripts 頁面上控制項的 屬性 ScriptManager ,來參考靜態腳本檔案。

ScriptManager 及其當地語系化角色

ScriptManager 可針對當地語系化應用程式啟用數個自動行為:

  • 它會根據設定和命名慣例自動找出腳本檔案;例如,它會在偵錯模式中載入已啟用偵錯的腳本,並根據瀏覽器的使用者介面選取專案載入當地語系化腳本。
  • 它會啟用文化特性的定義,包括自訂文化特性。
  • 它會透過 HTTP 啟用腳本檔案的壓縮。
  • 它會快取腳本,以有效率地管理許多要求。
  • 它會透過加密 URL 將間接存取層新增至腳本。

腳本參考可以透過程式設計方式或宣告式標記,新增至 ScriptManager 控制項。 使用內嵌在網站專案本身元件中的腳本時,宣告式標記特別有用,因為腳本的名稱可能不會隨著修訂推送而變更。

總結

隨著 Web 應用程式成長以觸及較大的物件,必須能夠觸達更廣泛的文化與社群,成為商務模型的核心;電子商務 Web 應用程式必須能夠處理外貨幣,內容管理系統不僅必須能夠呈現其內容,還必須以其他語言呈現流覽提示和表單欄位,而公司必須知道此需求可供存取。

.NET Framework內建支援豐富的當地語系化架構,利用附屬元件和 XML 資源 (.resx) 檔案,以呈現查閱資源字串和影像的統一方式。 ASP.NET AJAX 延伸模組,包括 Microsoft AJAX 架構和 Microsoft AJAX 腳本程式庫,在用戶端程式代碼中提供此程式設計模型的支援,讓您能夠輕鬆查閱資源字串。 附屬元件支援透過 ScriptResource.axd 自動包含腳本資源, (實際.js檔案) ,只要檔案名遵循指定的命名配置。 透過此支援,ASP.NET AJAX Extensions 可簡化腳本的當地語系化和應用程式的全球化。

簡歷

Scott Cate 自 1997 年以來一直與 Microsoft Web 技術合作,而且是 myKB.com (www.myKB.com) ,他專門撰寫著重于知識庫軟體解決方案的 ASP.NET 型應用程式。 Scott 可以透過電子郵件 scott.cate@myKB.com 或其部落格連絡,網址為 ScottCate.com