發(fā)布日期: 2006-08-22 | 更新日期: 2006-08-22
Ted Pattison下載本文的代碼:
BasicInstincts2006_08.exe (878KB)
本頁(yè)內容
控制頁(yè)面級別的區域性設置使用配置文件跟蹤語(yǔ)言首選項ASP.NET 2.0 中的資源文件使用本地資源在 DLL 項目中嵌入資源顯示本地化圖像總結在上一期專(zhuān)欄文章中,我介紹了資源文件在 .NET 開(kāi)發(fā)中的使用。我將一個(gè) Windows® Forms 應用程序進(jìn)行了國際化,并將其本地化以適用于使用不同語(yǔ)言的用戶(hù)。本月我將討論 ASP.NET 2.0 中網(wǎng)站的本地化。
我假設您熟悉區域性 UI 和區域性設置、CultureInfo 對象、資源文件、ResourceManager 類(lèi)和自動(dòng)生成的強類(lèi)型化資源類(lèi)。并且,我還假設您基本了解 Microsoft® .NET Framework 是從默認程序集、還是從本地化衛星程序集加載資源的確定機制。如果您需要更多有關(guān)這些主題的背景知識,可先讀一下我在 2006 年 5 月發(fā)表的 Basic Instincts(英文)專(zhuān)欄文章,然后再繼續閱讀本文。
控制頁(yè)面級別的區域性設置
利用 ASP.NET 2.0 可輕松地逐頁(yè)更改區域性設置。您只需將 UICulture 和 Culture(區域性)屬性添加到 .aspx 等類(lèi)似頁(yè)面內的 Page 指令即可。
<%@ Page UICulture="fr" Culture="fr-BE" %>
在頁(yè)面生命周期的早期,一個(gè)以這些屬性設置運行的 .aspx 頁(yè),將使用合適的 CultureInfo 對象初始化當前線(xiàn)程的 CurrentUICulture 屬性和 CurrentCulture 屬性。在測試期間,如果將以上所示屬性添加到一個(gè) .aspx 文件,然后再添加一個(gè)內置的 ASP.NET Web 控件(如 Calendar(日歷)控件),您會(huì )立即看到一切運轉正常,如圖 1 所示。左側的 Calendar(日歷)控件已呈現在區域性設置為 en-US 的頁(yè)面上,而右側的 Calendar(日歷)控件則呈現在區域性設置為 fr-BE 的頁(yè)面上。
圖 1 本地化的日歷控件
然而,在大多數生產(chǎn)網(wǎng)站中,像這樣將特定區域性設置硬編碼到頁(yè)面中是行不通的。而使用不同語(yǔ)言的用戶(hù)將看到同一頁(yè)面的不同的本地化內容。如果您向 UICulture 和 Culture(區域性)屬性都分配一個(gè)“auto”值,則 ASP.NET 將基于每個(gè)請求自動(dòng)為您初始化區域性設置。
<%@ Page UICulture="auto" Culture="auto" %>
ASP.NET 通過(guò)檢查瀏覽器發(fā)送的 HTTP 標題來(lái)初始化這些設置。通過(guò)更改 Internet Options(Internet 選項)對話(huà)框中的語(yǔ)言首選項設置,您可以在 Internet Explorer® 中測試頁(yè)面的不同本地化版本。
通常,您會(huì )想要站點(diǎn)中的所有頁(yè)面都符合相同的區域性設置。您可以為 UICulture 和 Culture(區域性)屬性分配一個(gè)站點(diǎn)范圍的“auto”值,這樣就不必分別為每個(gè)頁(yè)面進(jìn)行分配了。只需將以下元素添加到位于站點(diǎn)的根處的 web.config 文件中即可:
<globalization uiCulture="auto" culture="auto" />
除了自動(dòng)設置以外,您還可以為 ASP.NET 指定一個(gè)默認區域性(如果它無(wú)法找到 HTTP 標題來(lái)確定用戶(hù)的首選區域性):
<globalization uiCulture="auto:en" culture="auto:en-US" />
返回頁(yè)首使用配置文件跟蹤語(yǔ)言首選項
雖然自動(dòng)設置的確會(huì )使事情變輕松,但它對于用戶(hù)來(lái)說(shuō)并不總是那么方便。例如,假設某位用戶(hù)更愿意閱讀英語(yǔ)版的技術(shù)類(lèi)網(wǎng)站和法語(yǔ)版的商業(yè)類(lèi)網(wǎng)站。當他在兩個(gè)站點(diǎn)之間來(lái)回轉換時(shí),需要不斷地更改瀏覽器設置,他會(huì )感到非常煩惱。該用戶(hù)將非常喜歡能夠讓其選擇語(yǔ)言首選項的網(wǎng)站。
要了解如何生成能夠使用戶(hù)更輕松地在不同語(yǔ)言間來(lái)回切換的 UI 和支持性實(shí)現,可以下載本月的代碼示例 - 一個(gè)名為 LitwareWebApp 的 ASP.NET 2.0 網(wǎng)站。它的 UI 如圖 2 所示。
圖 2a 英語(yǔ)版本
圖 2b 本地化版本
LitwareWebApp 站點(diǎn)使用 ASP.NET 2.0 中引入的新的配置文件功能,來(lái)跟蹤用戶(hù)的語(yǔ)言首選項。您可以添加一個(gè)名為 LanguagePreference 的基于字符串的配置文件屬性,通過(guò)將以下元素添加到站點(diǎn)的 web.config 文件,來(lái)支持匿名識別:
<configuration><system.web><anonymousIdentification enabled="true"/><profile><properties><add name="LanguagePreference" type="string"defaultValue="Auto" allowAnonymous="true" /></properties></profile></system.web></configuration>
LitwareWebApp 站點(diǎn)被設計為具有“母版頁(yè)”內的標準布局,該“母版頁(yè)”包含一個(gè)名為 lstLanguage 的 RadioButtonList 控件。請注意,該控件不僅顯示友好的語(yǔ)言名稱(chēng)(如美國英語(yǔ)和比利時(shí)法語(yǔ)),而且還會(huì )使用 SelectedValue 屬性跟蹤真正的區域性名稱(chēng)(如 en-US 和 fr-BE)。當用戶(hù)更改語(yǔ)言首選項時(shí),lstLanguage 控件的 SelectedIndexChanged 事件會(huì )引發(fā)并執行以下代碼來(lái)更新 LanguagePreference 配置文件屬性:
Profile.LanguagePreference = lstLanguage.SelectedValueResponse.Redirect(Me.Request.Url.AbsolutePath)
如果調用 Response.Redirect,則會(huì )強制發(fā)生一次從瀏覽器到 Web 服務(wù)器的新往返程,從而在使用所需的語(yǔ)言首選項設置了配置文件屬性后,重新啟動(dòng)頁(yè)面的生命周期。
之后要處理的事情是以編程方式,于合適的時(shí)間在頁(yè)面生命周期內調整區域性設置。在 ASP.NET 2.0 中執行此操作的正確方法是替換名為 InitializeCulture 的 Page 類(lèi)。頁(yè)面生命周期已被設計為,在頁(yè)面本身或其任何子控件使用本地化資源進(jìn)行任何工作前,始終調用 InitializeCulture。
示例站點(diǎn)的設計要求您向站點(diǎn)內的各頁(yè)面添加一個(gè)替換的 InitializeCulture 實(shí)現。不幸的是,您無(wú)法在“母版頁(yè)”級別上替換 InitializeCulture 方法,因為 MasterPage 類(lèi)不會(huì )從 Page 類(lèi)繼承。另外,為網(wǎng)站內的各頁(yè)面分別替換 InitializeCulture 方法非常冗長(cháng)乏味。會(huì )導致許多重復實(shí)現,從而引發(fā)嚴重的維護問(wèn)題。
一個(gè)用于初始化區域性設置的站點(diǎn)范圍的更有效方法是,創(chuàng )建一個(gè)公共的 Page 派生基類(lèi),然后讓所有 .aspx 頁(yè)文件從該類(lèi)繼承,我在 LitwareWebApp 示例站點(diǎn)中就是這么做的。我的名為 LitwarePage(請參閱
圖 3)的 Page 派生基類(lèi)是在名為 LitwarePage 的源文件中定義的,并且已被添加到 App_Code 目錄,這樣一來(lái)它就可以由 ASP.NET 自動(dòng)編譯并可用于當前網(wǎng)站中的其他代碼。
創(chuàng )建了 Page 派生基類(lèi)后,即可將 .aspx 頁(yè)定義更新為從該類(lèi)而不是從標準 Page 類(lèi)派生。例如,您可以在 default.aspx.vb 內對局部類(lèi)進(jìn)行此類(lèi)修改。
Partial Class _Default : Inherits LitwarePage'*** 頁(yè)面類(lèi)定義位于此處End Class
此時(shí),我擁有一個(gè)可以跟蹤用戶(hù)語(yǔ)言首選項并可基于每個(gè)請求初始化區域性設置的網(wǎng)站?,F在,我必須使用資源文件為 ASP.NET 2.0 網(wǎng)站本地化字符串文字,以便能夠滿(mǎn)足使用不同語(yǔ)言的用戶(hù)的需求。
返回頁(yè)首ASP.NET 2.0 中的資源文件
由于在默認情況下,Visual Studio® 2005 不使用項目來(lái)管理 ASP.NET 2.0 網(wǎng)站,所以將不會(huì )存在項目級別的資源文件,就像 Windows Forms 應用程序或類(lèi)庫 DLL 中那樣。相反,您必須顯式創(chuàng )建資源文件并將其添加到您的網(wǎng)站。而且,您還必須使用隨 ASP.NET 2.0 引入的特殊文件夾:包含全局資源的資源文件應被添加到 App_GlobalResources 文件夾,而特定于某個(gè)文件的本地資源則應被添加到 App_LocalResources 文件夾。全局資源就是那些來(lái)自于頁(yè)面及其他文件(如站點(diǎn)圖)、可以在站點(diǎn)范圍基礎上使用的資源。支持本地資源的 ASP.NET 文件類(lèi)型包含頁(yè)(.aspx 文件)、母版頁(yè)(.master 文件)和用戶(hù)控件(.ascx 文件)。
不同于 ASP.NET 2.0 的另一點(diǎn)是,您不必像在開(kāi)發(fā)國際化的 Windows Forms 應用程序時(shí)那樣提前編譯資源。相反,ASP.NET 運行時(shí)會(huì )準時(shí)將全局和本地資源文件編譯到 DLL 中,就像 .aspx 文件那樣。這是一種強大的功能,因為公司只需將 .resx 文件 XCOPY 到一個(gè) Web 生產(chǎn)服務(wù)器上,即可為新語(yǔ)言添加本地化支持。
讓我們在使用 Visual Studio 2005 的 ASP.NET 2.0 站點(diǎn)中,來(lái)完成一個(gè)創(chuàng )建和使用全局資源文件的示例。您可以先選擇 Add New Item(添加新項)命令,然后再選擇 Resource File(資源文件),來(lái)創(chuàng )建一個(gè)新的全局資源文件。
當您單擊 Add(添加)按鈕創(chuàng )建一個(gè)新的全局資源文件時(shí),Visual Studio 2005 會(huì )用一個(gè)對話(huà)框對您進(jìn)行提示,建議您將新的資源文件放置在 App_GlobalResources 目錄內。單擊 Yes(是)。如果您將其置于他處,則 ASP.NET 便不會(huì )將資源文件自動(dòng)編譯到 DLL 中。
在 ASP.NET 中使用資源文件與在 Windows Forms 應用程序中相同。首先創(chuàng )建一個(gè)資源文件,其字符串文字已本地化為默認區域性設置。在我們的示例網(wǎng)站中,有一個(gè)用于該目的的全局資源文件,該文件的名稱(chēng)為 Litware.resx,如圖 4 所示。在您添加了所有采用默認區域性設置的指定字符串后,即可復制該資源文件并將其重命名,例如重命名為 Litware.fr.resx 以提供法語(yǔ)的本地化字符串。您還可以復制該法語(yǔ)資源文件并將其重命名為 Litware.fr-BE.resx,以維護已局部本地化為比利時(shí)法語(yǔ)的字符串。
圖 4 本地化資源
在資源文件中添加和維護指定字符串非常容易,因為 Visual Studio 2005 提供了方便易用的資源編輯器,如圖 5 所示。請記住,資源文件并不僅限于本地化字符串。您可以添加其他類(lèi)型的資源,如圖像文件、級聯(lián)樣式表和客戶(hù)端 JavaScript 文件。
圖 5 Visual Studio 2005 資源編輯器
現在,我們來(lái)創(chuàng )建從全局資源文件檢索指定字符串的頁(yè)面。這做起來(lái)非常容易,就像是在開(kāi)發(fā)一個(gè)國際化的 Windows Forms 應用程序時(shí),無(wú)需直接對 .NET 提供的 ResourceManager 類(lèi)進(jìn)行編程。因為 ASP.NET 和 Visual Studio 2005 可以在后臺為每個(gè)全局資源文件生成一個(gè)強類(lèi)型化資源類(lèi),并通過(guò) IntelliSense® 使其變?yōu)榭捎谩?div style="height:15px;">
可通過(guò)一個(gè)駐留在名為 Resources(資源)的頂級命名空間內的強類(lèi)型化類(lèi),來(lái)訪(fǎng)問(wèn)您添加到全局資源文件中的指定字符串。它使用一行代碼,將一個(gè)本地化的字符串分配給控件的屬性值:
lblApplicationName.Text = Resources.Litware.ApplicationName
除了以編程的方式訪(fǎng)問(wèn)外,ASP.NET 2.0 還引入聲明性語(yǔ)法,您可以使用它將指定的字符串綁定到頁(yè)或控件的屬性。該語(yǔ)法涉及使用美元符號 ($),其后緊跟資源命名空間、資源文件名和字符串名:
<%$ Resources:Litware, ApplicationName %>
例如,如果您想將名為 ApplicationName 的字符串綁定到 .aspx 頁(yè)內一個(gè)標簽的 Text 屬性,您可以像這樣編寫(xiě)標記:
<asp:Label ID="lblApplicationName" runat="server"Text="<%$ Resources:Litware, ApplicationName %>" />
Visual Studio 2005 還提供一個(gè)名為 Expression Builder 的方便易用的工具,如圖 6 所示。該實(shí)用程序可幫助您生成將資源文件中指定字符串綁定到控件或頁(yè)屬性時(shí)所需的語(yǔ)法。在您用指定的字符串添加了一個(gè)或多個(gè)全局資源文件后,即可通過(guò)將 .aspx 頁(yè)置于設計視圖,并通過(guò) Property(屬性)表訪(fǎng)問(wèn) Expressions 屬性,來(lái)訪(fǎng)問(wèn) Expression Builder。
圖 6 Expression Builder
請注意,聲明性資源綁定表達式不僅限于 .aspx 文件、.ascx 文件和 .master 文件。也可用于本地化 Web.sitemap 文件中定義的站點(diǎn)圖中的字符串文字。
圖 7 顯示來(lái)自 LitwareWebApp 網(wǎng)站中站點(diǎn)圖的 XML,它用于本地化該站點(diǎn)導航菜單中顯示的鏈接標題。
返回頁(yè)首使用本地資源
本地資源文件包含用于站點(diǎn)內基于文件的單獨項的資源,如頁(yè)、母版頁(yè)或用戶(hù)控件。每個(gè)本地資源文件都必須正確命名并添加至 App_LocalResources 文件夾,以由 ASP.NET 進(jìn)行編譯。
本地資源文件的命名,應與它要為之提供資源的基于文件的項一致。例如,包含用于 AddCustomer.aspx 頁(yè)的默認區域性資源的本地資源文件,應命名為 AddCustomer.aspx.resx。包含法語(yǔ)資源的本地資源文件應命名為 AddCustomer.aspx.fr.resx。
在您將指定的字符串添加到本地資源文件后,即可通過(guò)三種方式從頁(yè)面或用戶(hù)控件內訪(fǎng)問(wèn)它們。第一,您可以通過(guò)編程方式進(jìn)行訪(fǎng)問(wèn)。第二,您可以使用顯式語(yǔ)法,以聲明的方式綁定到其上。第三,您可以使用隱式語(yǔ)法,以聲明的方式綁定到其上。下面開(kāi)始逐個(gè)探討這些方法。
假設您已創(chuàng )建了一個(gè)本地資源文件,來(lái)本地化頁(yè)面 AddCustomer.aspx 上顯示的所有控件標題。要本地化該頁(yè)提交按鈕上顯示的標題,您可以創(chuàng )建一個(gè)名為 btnSubmit.Text 的本地化字符串。在將該指定字符串添加到本地資源文件后,您即可通過(guò)以下調用 GetLocalResourceObject 方法和將返回值轉換為字符串的代碼來(lái)進(jìn)行訪(fǎng)問(wèn):
'*** AddCustomer.aspx.vb 內的代碼btnSubmit.Text = _Me.GetLocalResourceObject("btnSubmit.Text").ToString()
此代碼不如以前顯示的代碼好,以前顯示的代碼是從使用強類(lèi)型化類(lèi)的全局資源訪(fǎng)問(wèn)指定的字符串。本地資源文件沒(méi)有相關(guān)聯(lián)的強類(lèi)型化類(lèi),所以您無(wú)法從 IntelliSense 中獲益,而且必須在調用 GetLocalResourceObject 時(shí),顯式地轉換基于對象的返回值。
如果您要使用顯式聲明性綁定語(yǔ)法,則其使用方式與使用全局資源時(shí)大致相同。唯一不同的是您使用本地資源時(shí),可以忽略資源文件的名稱(chēng):
<asp:Button ID="btnSubmit" runat="server"Text="<%$ Resources:btnSubmit.Text %>" />
隱式聲明性綁定語(yǔ)法是功能最強大的選項。首先將名為 meta:resourcekey 的特殊屬性添加到控制標記,或添加到一個(gè) ASP.NET 指令,如 Page、Master 或 Control。例如,如果您想通過(guò) .aspx 文件中的 Button(按鈕)控件來(lái)使用隱式聲明性綁定語(yǔ)法,您可以像這樣編寫(xiě)標記:
<asp:Button ID="btnSubmit" runat="server"meta:resourcekey="btnSubmit" />
在您添加了 meta:resourcekey 屬性后,就只剩一件事需要考慮了,即確保本地資源文件中的字符串具有正確的名稱(chēng)。在我的示例中,ASP.NET 會(huì )自動(dòng)加載名為 btnSubmit.Text 的本地化字符串,并將其分配給名為 btnSubmit 的控件的 Text 屬性。
關(guān)鍵在于,隱式綁定的基礎是,創(chuàng )建的字符串應具有與 meta:resourcekey 屬性定義的目標和屬性的名稱(chēng)相匹配的名稱(chēng)。本示例中,由于 meta:resourcekey 是面向 btnSubmit 的,所以只需將更多指定的字符串添加到本地資源文件中,這樣您不僅可以綁定到 Text,而且還可以綁定到其他幾個(gè)屬性值,如圖 8 所示。
圖 8 添加指定的字符串
請注意,Visual Studio 2005 可以在設計視圖編輯器中打開(kāi)頁(yè)、用戶(hù)控件或母版頁(yè)時(shí),在 Tools(工具)菜單中提供一個(gè)名為 Generate Local Resource(生成本地資源)的方便易用的命令。該命令可自動(dòng)創(chuàng )建默認區域性的本地資源文件。還可在頁(yè)面中添加 meta:resourcekey 屬性,并在本地資源文件中創(chuàng )建相應的字符串值,來(lái)充當 meta:resourcekey 屬性項目的目標。
最后,請注意:有一個(gè)名為 Localize(本地化)控件的 ASP.NET 2.0 新組件,可以使您本地化 .aspx 頁(yè)上的任何元素。它提供一種不由其基類(lèi)提供的設計時(shí)間功能:Literal(文字)控件;尤其是,Localize(本地化)控件提供了靜態(tài)內容的設計時(shí)間編輯,以便您能夠在頁(yè)面設計模式下工作時(shí)查看默認值。
返回頁(yè)首在 DLL 項目中嵌入資源
我將暫時(shí)撇開(kāi)國際化和本地化主題,先討論一種在類(lèi)庫 DLL 中使用嵌入資源的新 ASP.NET 技術(shù)。該技術(shù)允許您在 DLL 中嵌入圖像文件、級聯(lián)樣式表文件和 JavaScript 文件,并通過(guò) DLL 在托管 Web 服務(wù)器上加以提供。
請注意,該技術(shù)需要使用一個(gè)面向 ASP.NET 2.0 網(wǎng)站的類(lèi)庫 DLL。這一新功能是由 ASP.NET 團隊特別添加的,目的是為服務(wù)器端的控件創(chuàng )建者提供一種更好的方式,使他們可以在分配自定義控件和 Web 部件的同時(shí)分配資源文件。不必將資源文件與 DLL 一起分配,也不必確保他們被復制到托管 Web 服務(wù)器上一個(gè)可訪(fǎng)問(wèn)的路徑,資源文件現在可以在 DLL 內自行分配,并可通過(guò)運行時(shí)由 ASP.NET 生成的 URL 加以提供。
LitwareWebApp 網(wǎng)站包含一個(gè)名為 LitwareWebComponents 的類(lèi)庫 DLL 項目,該項目演示了這一技術(shù)。在該項目?jì)?,有一個(gè)名為 LitwareSlogan.png 的圖像文件已被作為資源嵌入。您可以通過(guò)將文件的“生成操作”更改為“嵌入的資源”,將資源嵌入到一個(gè)程序集中,如圖 9 所示。
圖 9 嵌入資源
要提供對 DLL 內一個(gè)嵌入的資源文件的基于 Web 的訪(fǎng)問(wèn),您必須添加一個(gè)名為 WebResource 的程序集級別的屬性。當您添加 WebResource 屬性時(shí),必須包含資源文件的限定名及其 MIME 類(lèi)型。在 Visual Basic® 類(lèi)庫 DLL 項目中,限定資源文件名包含項目名。
'*** 在 AssemblyInfo.vb 內Imports System.Web.UI<Assembly: WebResource( _"LitwareWebComponents.LitwareSlogan.png", "image/png")>
WebResource 屬性允許您為 ASP.NET 運行時(shí)提供所需的元數據,以通過(guò)使用可在運行時(shí)生成的 URL,從 DLL 中檢索資源文件。要從服務(wù)器端控件內的代碼生成資源文件的 URL,您可以調用一個(gè)名為 GetWebResourceUrl 的方法,如
圖 10 所示。
這是使該技術(shù)得以運行的后臺情況。一個(gè)對 GetWebResourceUrl 的調用生成一個(gè)指向名為 WebResource.axd 的內置 HTTP 處理程序的 URL。這個(gè)動(dòng)態(tài)生成的 URL 還包含一個(gè)查詢(xún)字符串,來(lái)識別目標 DLL 的名稱(chēng)和嵌入的資源文件。通過(guò)加載一個(gè)名為 AssemblyResourceLoader 的自定義 HttpHandler 類(lèi),ASP.NET 運行時(shí)可以響應 WebResource.axd 的請求。
當調用 AssemblyResourceLoader 類(lèi)以從 DLL 加載資源文件時(shí),它可以讀取由 WebResource 屬性提供的元數據。AssemblyResourceLoader 類(lèi)已被實(shí)現以從 DLL 的圖像中提取請求資源文件,并將其引流回調用程序。AssemblyResourceLoader 類(lèi)甚至提供緩存算法,可在它被加載到前端 Web 宿主內存后,在多個(gè)請求中重復使用同一資源文件。
返回頁(yè)首顯示本地化圖像
雖然使用嵌入的資源文件和 WebResource 屬性會(huì )具有強大的功能,但是仍然存在一些明顯的局限性。首先,您只能在面向 ASP.NET 2.0 網(wǎng)站的 DLL 項目?jì)仁褂迷摷夹g(shù)。您無(wú)法在 ASP.NET 2.0 網(wǎng)站內直接使用該技術(shù)。第二,該技術(shù)實(shí)際上并不支持任何形式的本地化。如果您的網(wǎng)站具有諸如圖形圖像和級聯(lián)樣式表等已經(jīng)本地化的資源文件,則您將不得不采用其他方法。
LitwareWebApp 網(wǎng)站顯示一個(gè)名為 LitwareSlogan.png 的圖形圖像。該網(wǎng)站可依據當前用戶(hù)更喜歡英語(yǔ)還是法語(yǔ)來(lái)顯示不同版本的圖像。盡管 ASP.NET 2.0 不直接支持本地化圖像文件,但它也不需要過(guò)多的自定義代碼來(lái)完成所需的效果。
您可以將本地化版本的圖像文件添加到本地化版本的全局資源文件,并以此作為開(kāi)始。例如,英語(yǔ)版本的 LitwareSlogan.png 已被添加到名為 Litware.resx 的全局資源文件,而法語(yǔ)版本的 LitwareSlogan.fr.png 則已添加到 Litware.fr.resx。這兩個(gè)資源文件中的資源擁有一個(gè)相同的名稱(chēng):LitwareSlogan。
當不同本地化版本的全局資源文件中含有本地化版本的圖像文件時(shí),您可以使用名為 LitwareSlogan.ashx 的自定義處理程序文件,基于用戶(hù)的語(yǔ)言首選項來(lái)有條件地進(jìn)行加載,如
圖 11 所示。
LitwareSlogan.ashx 中定義的自定義處理程序類(lèi)可使用您以前在自定義 InitializeCulture 方法中看到的類(lèi)似邏輯,在從全局資源文件中檢索圖像文件以前,初始化當前線(xiàn)程的 CurrentUICulture 設置。您可能會(huì )注意到,要加載正確的資源文件,您必須初始化當前線(xiàn)程的 CurrentUICulture 屬性,但不必初始化 CurrentCulture 屬性。
在該自定義處理程序正確初始化了 CurrentUICulture 設置之后,它即可通過(guò) Litware.resx 的強類(lèi)型化資源類(lèi)來(lái)訪(fǎng)問(wèn)圖像文件。然后,便只需將圖像文件的數位編寫(xiě)到 HTTP 響應流。顯示本地化圖像的最后步驟是,將 LitwareSlogan.ashx URL 分配到站點(diǎn)內任何頁(yè)面上一個(gè)圖像控件的 ImageUrl 屬性。
返回頁(yè)首總結
ASP.NET 2.0 使國際化網(wǎng)站和資源變得更加容易。通過(guò)檢查瀏覽器發(fā)送的 HTTP 標題,可在網(wǎng)站內輕松地初始化頁(yè)面的區域性設置。而且,還可輕松地設計更加復雜的機制,使用戶(hù)能夠通過(guò)配置所需的語(yǔ)言首選項來(lái)個(gè)性化其體驗。
請將您要提交給 Ted 的問(wèn)題和意見(jiàn)發(fā)送至
instinct@microsoft.com。
Ted Pattison 身為作者兼培訓人員的 Ted Pattison 最近成立了 Gorilla Training,該公司致力于提供有關(guān) SharePoint 技術(shù)的、極具實(shí)力的開(kāi)發(fā)人員培訓。Ted 還在為 Microsoft Press 編寫(xiě)一本名為 Inside Windows SharePoint Services 3.0 的書(shū)。
本文摘自
2006 年 8 月出版的
《MSDN Magazine》。