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

.NET中對資源文件的使用簡介

系統 1788 0

?

一、 ???????????? 資源文件簡介

?

1 resx 文件:

基于文本的格式是特定于 .NET 框架的 XML 格式,稱為 ResX .resx 文件)。不考慮其 XML 基礎,該格式不是專門為人工閱讀而設計的( XML 格式很少是這樣的)。但是, Visual Studio .NET 仍然為 .resx 文件提供了一個基本編輯器。

?

2 Resources 文件:

???????? .resources 擴展名來自于在將 .resx 文件作為資源嵌入之前 Visual Studio .NET 處理該文件時所使用的工具。工具名稱是 resgen.exe ,它用來將 .resx XML 格式“編譯”為二進制格式。可以手動將 .resx 文件編譯成 .resources 文件,如下所示:

C:\> resgen.exe Resource1.resx

在將 .resx 文件編譯成 .resources 文件以后,就可以使用 System.Resources 命名空間中的 ResourceReader 來枚舉它:

二、   資源文件應用簡介

(1) ??????? Windows Application 中的使用:

?

1. ??????? 首先注意的是,在 Windows Application 中的 resx 資源文件是和其中的 Form 相關聯的,及 Form.cs Form.Designer.cs Form.resx 文件是作為一個整體進行展示的(在資源管理器中),這里不涉及本地與全局資源文件夾的概念,及如果想導入已經生成的 Resources 文件的話,直接在工程上右鍵 add new Item 即可,選擇完相關的 Resources 文件,記住要將資源文件的屬性中的 Build Action 選擇為 Embadded resource (內嵌資源),這樣的話,資源就會在你編譯后直接嵌入到你的應用程序當中。

?

2. ??????? 具體應用代碼示例:

Assembly assembly = Assembly .GetExecutingAssembly();

??????????? ResourceManager rm = new ResourceManager ( "TestStrongName123.Form1" , assembly);

??????????? this .textBox1.Text = rm.GetString( "First" );

?

3. ??????? resources 文件與 resx 文件的區別,也可以從他們對資源的保存形式來判斷,前者會將所有的資源都保存到該文件中,而后者只是會保存對資源的引用

?

(2) ??????? ASP.NET Web Application 中的使用:

?

1. ??????? 在此處應用資源文件的時候可能與前面的使用方法略有不同,而且在 VS2005 中引入了新的使用方式,即資源文件夾的概念,即把全局資源與本地資源分別保存到 App_GlobalResources App_LocalResources 目錄中,只要放到這兩個目錄中的資源文件,可以再根據自己的分類繼續進行文件劃分,這個不影響工程找到資源文件,這里還要對資源文件的命名簡單介紹一下,全局資源只要保證其文件為 resx 文件即可,名字自己可以隨意,而后者的命名必須遵循一定的命名規則才可以,即:對應的頁面文件名 + .resx ”。

?

2. ??????? 具體應用代碼示例:

<1> 應用本地資源(字符串):

< asp : Literal ID ="Literal1" runat ="server" Text =" <% $Resources:LocalString1 %> "></ asp : Literal >

Literal2.Text = ( string ) this .GetLocalResourceObject( "LocalString2" );

<2> 應用全局資源(字符串):

< asp : Literal ID ="Literal3" runat ="server" Text =" <% $Resources:GlobalResource, GlobalString1 %> "></ asp : Literal >

Literal4.Text = ( string ) base .GetGlobalResourceObject( "GlobalResource" , "GlobalString2" );

<3> 獲取全局資源中的圖片:

Bitmap bm = null ;

bm = Resources. GlobalResource .GlobalSmallFail;

?

3. ??????? 其他一點說明:使用 web site 站點的時候,與這里的應用也是類似的,這里就不贅述了。

?

4. ??????? 針對公文系統來說,資源文件的使用比較局限,因為我們的公文系統采用的策略為使用客戶端控件,避免使用服務器端控件;再者,我們都餓應用無法提前欲知情況(也就是全球化的資源思路),所以,鑒于此,我們系統中應用資源文件的使用只能局限到對字符串等的使用,但是在圖片等方面可能無法達到我們的需求,使用圖片替換仍舊為我們的首選方案。

?

?

?

ASP.NET 2.0 中的資源文件 ??

???????? 由于在默認情況下,Visual Studio? 2005 不使用項目來管理 ASP.NET 2.0 網站,所以將不會存在項目級別的資源文件,就像 Windows Forms 應用程序或類庫 DLL 中那樣。相反,您必須顯式創建資源文件并將其添加到您的網站。而且,您還必須使用隨 ASP.NET 2.0 引入的特殊文件夾:包含全局資源的資源文件應被添加到 App_GlobalResources 文件夾,而特定于某個文件的本地資源則應被添加到 App_LocalResources 文件夾。全局資源就是那些來自于頁面及其他文件(如站點圖)、可以在站點范圍基礎上使用的資源。支持本地資源的 ASP.NET 文件類型包含頁(.aspx 文件)、母版頁(.master 文件)和用戶控件(.ascx 文件)。

不同于 ASP.NET 2.0 的另一點是,您不必像在開發國際化的 Windows Forms 應用程序時那樣提前編譯資源。相反,ASP.NET 運行時會準時將全局和本地資源文件編譯到 DLL 中,就像 .aspx 文件那樣。這是一種強大的功能,因為公司只需將 .resx 文件 XCOPY 到一個 Web 生產服務器上,即可為新語言添加本地化支持。

讓我們在使用 Visual Studio 2005 的 ASP.NET 2.0 站點中,來完成一個創建和使用全局資源文件的示例。您可以先選擇 Add New Item(添加新項)命令,然后再選擇 Resource File(資源文件),來創建一個新的全局資源文件。

當您單擊 Add(添加)按鈕創建一個新的全局資源文件時,Visual Studio 2005 會用一個對話框對您進行提示,建議您將新的資源文件放置在 App_GlobalResources 目錄內。單擊 Yes(是)。如果您將其置于他處,則 ASP.NET 便不會將資源文件自動編譯到 DLL 中。

在 ASP.NET 中使用資源文件與在 Windows Forms 應用程序中相同。首先創建一個資源文件,其字符串文字已本地化為默認區域性設置。在我們的示例網站中,有一個用于該目的的全局資源文件,該文件的名稱為 Litware.resx,如圖 4 所示。在您添加了所有采用默認區域性設置的指定字符串后,即可復制該資源文件并將其重命名,例如重命名為 Litware.fr.resx 以提供法語的本地化字符串。您還可以復制該法語資源文件并將其重命名為 Litware.fr-BE.resx,以維護已局部本地化為比利時法語的字符串。

.NET中對資源文件的使用簡介_第1張圖片

圖 4 本地化資源

在資源文件中添加和維護指定字符串非常容易,因為 Visual Studio 2005 提供了方便易用的資源編輯器,如圖 5 所示。請記住,資源文件并不僅限于本地化字符串。您可以添加其他類型的資源,如圖像文件、級聯樣式表和客戶端 JavaScript 文件。

.NET中對資源文件的使用簡介_第2張圖片

圖 5 Visual Studio 2005 資源編輯器

現在,我們來創建從全局資源文件檢索指定字符串的頁面。這做起來非常容易,就像是在開發一個國際化的 Windows Forms 應用程序時,無需直接對 .NET 提供的 ResourceManager 類進行編程。因為 ASP.NET 和 Visual Studio 2005 可以在后臺為每個全局資源文件生成一個強類型化資源類,并通過 IntelliSense? 使其變為可用。

可通過一個駐留在名為 Resources(資源)的頂級命名空間內的強類型化類,來訪問您添加到全局資源文件中的指定字符串。它使用一行代碼,將一個本地化的字符串分配給控件的屬性值:

      lblApplicationName.Text = Resources.Litware.ApplicationName
    

除了以編程的方式訪問外,ASP.NET 2.0 還引入聲明性語法,您可以使用它將指定的字符串綁定到頁或控件的屬性。該語法涉及使用美元符號 ($),其后緊跟資源命名空間、資源文件名和字符串名:

      <%$ Resources:Litware, ApplicationName %>
    

例如,如果您想將名為 ApplicationName 的字符串綁定到 .aspx 頁內一個標簽的 Text 屬性,您可以像這樣編寫標記:

      <asp:Label ID="lblApplicationName" runat="server" 
      
Text="<%$ Resources:Litware, ApplicationName %>" />

Visual Studio 2005 還提供一個名為 Expression Builder 的方便易用的工具,如圖 6 所示。該實用程序可幫助您生成將資源文件中指定字符串綁定到控件或頁屬性時所需的語法。在您用指定的字符串添加了一個或多個全局資源文件后,即可通過將 .aspx 頁置于設計視圖,并通過 Property(屬性)表訪問 Expressions 屬性,來訪問 Expression Builder。

.NET中對資源文件的使用簡介_第3張圖片

圖 6 Expression Builder

請注意,聲明性資源綁定表達式不僅限于 .aspx 文件、.ascx 文件和 .master 文件。也可用于本地化 Web.sitemap 文件中定義的站點圖中的字符串文字。 圖 7 顯示來自 LitwareWebApp 網站中站點圖的 XML,它用于本地化該站點導航菜單中顯示的鏈接標題。

使用本地資源

本地資源文件包含用于站點內基于文件的單獨項的資源,如頁、母版頁或用戶控件。每個本地資源文件都必須正確命名并添加至 App_LocalResources 文件夾,以由 ASP.NET 進行編譯。

本地資源文件的命名,應與它要為之提供資源的基于文件的項一致。例如,包含用于 AddCustomer.aspx 頁的默認區域性資源的本地資源文件,應命名為 AddCustomer.aspx.resx。包含法語資源的本地資源文件應命名為 AddCustomer.aspx.fr.resx。

在您將指定的字符串添加到本地資源文件后,即可通過三種方式從頁面或用戶控件內訪問它們。第一,您可以通過編程方式進行訪問。第二,您可以使用顯式語法,以聲明的方式綁定到其上。第三,您可以使用隱式語法,以聲明的方式綁定到其上。下面開始逐個探討這些方法。

假設您已創建了一個本地資源文件,來本地化頁面 AddCustomer.aspx 上顯示的所有控件標題。要本地化該頁提交按鈕上顯示的標題,您可以創建一個名為 btnSubmit.Text 的本地化字符串。在將該指定字符串添加到本地資源文件后,您即可通過以下調用 GetLocalResourceObject 方法和將返回值轉換為字符串的代碼來進行訪問:

      '*** AddCustomer.aspx.vb 內的代碼
      
btnSubmit.Text = _
Me.GetLocalResourceObject("btnSubmit.Text").ToString()

此代碼不如以前顯示的代碼好,以前顯示的代碼是從使用強類型化類的全局資源訪問指定的字符串。本地資源文件沒有相關聯的強類型化類,所以您無法從 IntelliSense 中獲益,而且必須在調用 GetLocalResourceObject 時,顯式地轉換基于對象的返回值。

如果您要使用顯式聲明性綁定語法,則其使用方式與使用全局資源時大致相同。唯一不同的是您使用本地資源時,可以忽略資源文件的名稱:

      <asp:Button ID="btnSubmit" runat="server" 
      
Text="<%$ Resources:btnSubmit.Text %>" />

隱式聲明性綁定語法是功能最強大的選項。首先將名為 meta:resourcekey 的特殊屬性添加到控制標記,或添加到一個 ASP.NET 指令,如 Page、Master 或 Control。例如,如果您想通過 .aspx 文件中的 Button(按鈕)控件來使用隱式聲明性綁定語法,您可以像這樣編寫標記:

      <asp:Button ID="btnSubmit" runat="server" 
      
meta:resourcekey="btnSubmit" />

在您添加了 meta:resourcekey 屬性后,就只剩一件事需要考慮了,即確保本地資源文件中的字符串具有正確的名稱。在我的示例中,ASP.NET 會自動加載名為 btnSubmit.Text 的本地化字符串,并將其分配給名為 btnSubmit 的控件的 Text 屬性。

關鍵在于,隱式綁定的基礎是,創建的字符串應具有與 meta:resourcekey 屬性定義的目標和屬性的名稱相匹配的名稱。本示例中,由于 meta:resourcekey 是面向 btnSubmit 的,所以只需將更多指定的字符串添加到本地資源文件中,這樣您不僅可以綁定到 Text,而且還可以綁定到其他幾個屬性值,如圖 8 所示。

.NET中對資源文件的使用簡介_第4張圖片

圖 8 添加指定的字符串

請注意,Visual Studio 2005 可以在設計視圖編輯器中打開頁、用戶控件或母版頁時,在 Tools(工具)菜單中提供一個名為 Generate Local Resource(生成本地資源)的方便易用的命令。該命令可自動創建默認區域性的本地資源文件。還可在頁面中添加 meta:resourcekey 屬性,并在本地資源文件中創建相應的字符串值,來充當 meta:resourcekey 屬性項目的目標。

最后,請注意:有一個名為 Localize(本地化)控件的 ASP.NET 2.0 新組件,可以使您本地化 .aspx 頁上的任何元素。它提供一種不由其基類提供的設計時間功能:Literal(文字)控件;尤其是,Localize(本地化)控件提供了靜態內容的設計時間編輯,以便您能夠在頁面設計模式下工作時查看默認值。

在 DLL 項目中嵌入資源

我將暫時撇開國際化和本地化主題,先討論一種在類庫 DLL 中使用嵌入資源的新 ASP.NET 技術。該技術允許您在 DLL 中嵌入圖像文件、級聯樣式表文件和 JavaScript 文件,并通過 DLL 在托管 Web 服務器上加以提供。

請注意,該技術需要使用一個面向 ASP.NET 2.0 網站的類庫 DLL。這一新功能是由 ASP.NET 團隊特別添加的,目的是為服務器端的控件創建者提供一種更好的方式,使他們可以在分配自定義控件和 Web 部件的同時分配資源文件。不必將資源文件與 DLL 一起分配,也不必確保他們被復制到托管 Web 服務器上一個可訪問的路徑,資源文件現在可以在 DLL 內自行分配,并可通過運行時由 ASP.NET 生成的 URL 加以提供。

LitwareWebApp 網站包含一個名為 LitwareWebComponents 的類庫 DLL 項目,該項目演示了這一技術。在該項目內,有一個名為 LitwareSlogan.png 的圖像文件已被作為資源嵌入。您可以通過將文件的“生成操作”更改為“嵌入的資源”,將資源嵌入到一個程序集中,如圖 9 所示。

.NET中對資源文件的使用簡介_第5張圖片

圖 9 嵌入資源

要提供對 DLL 內一個嵌入的資源文件的基于 Web 的訪問,您必須添加一個名為 WebResource 的程序集級別的屬性。當您添加 WebResource 屬性時,必須包含資源文件的限定名及其 MIME 類型。在 Visual Basic? 類庫 DLL 項目中,限定資源文件名包含項目名。

      '*** 在 AssemblyInfo.vb 內
      
Imports System.Web.UI
<Assembly: WebResource( _
"LitwareWebComponents.LitwareSlogan.png", "image/png")>

WebResource 屬性允許您為 ASP.NET 運行時提供所需的元數據,以通過使用可在運行時生成的 URL,從 DLL 中檢索資源文件。要從服務器端控件內的代碼生成資源文件的 URL,您可以調用一個名為 GetWebResourceUrl 的方法,如 圖 10 所示。

這是使該技術得以運行的后臺情況。一個對 GetWebResourceUrl 的調用生成一個指向名為 WebResource.axd 的內置 HTTP 處理程序的 URL。這個動態生成的 URL 還包含一個查詢字符串,來識別目標 DLL 的名稱和嵌入的資源文件。通過加載一個名為 AssemblyResourceLoader 的自定義 HttpHandler 類,ASP.NET 運行時可以響應 WebResource.axd 的請求。

當調用 AssemblyResourceLoader 類以從 DLL 加載資源文件時,它可以讀取由 WebResource 屬性提供的元數據。AssemblyResourceLoader 類已被實現以從 DLL 的圖像中提取請求資源文件,并將其引流回調用程序。AssemblyResourceLoader 類甚至提供緩存算法,可在它被加載到前端 Web 宿主內存后,在多個請求中重復使用同一資源文件。

顯示本地化圖像

雖然使用嵌入的資源文件和 WebResource 屬性會具有強大的功能,但是仍然存在一些明顯的局限性。首先,您只能在面向 ASP.NET 2.0 網站的 DLL 項目內使用該技術。您無法在 ASP.NET 2.0 網站內直接使用該技術。第二,該技術實際上并不支持任何形式的本地化。如果您的網站具有諸如圖形圖像和級聯樣式表等已經本地化的資源文件,則您將不得不采用其他方法。

LitwareWebApp 網站顯示一個名為 LitwareSlogan.png 的圖形圖像。該網站可依據當前用戶更喜歡英語還是法語來顯示不同版本的圖像。盡管 ASP.NET 2.0 不直接支持本地化圖像文件,但它也不需要過多的自定義代碼來完成所需的效果。

您可以將本地化版本的圖像文件添加到本地化版本的全局資源文件,并以此作為開始。例如,英語版本的 LitwareSlogan.png 已被添加到名為 Litware.resx 的全局資源文件,而法語版本的 LitwareSlogan.fr.png 則已添加到 Litware.fr.resx。這兩個資源文件中的資源擁有一個相同的名稱:LitwareSlogan。

當不同本地化版本的全局資源文件中含有本地化版本的圖像文件時,您可以使用名為 LitwareSlogan.ashx 的自定義處理程序文件,基于用戶的語言首選項來有條件地進行加載,如 圖 11 所示。

LitwareSlogan.ashx 中定義的自定義處理程序類可使用您以前在自定義 InitializeCulture 方法中看到的類似邏輯,在從全局資源文件中檢索圖像文件以前,初始化當前線程的 CurrentUICulture 設置。您可能會注意到,要加載正確的資源文件,您必須初始化當前線程的 CurrentUICulture 屬性,但不必初始化 CurrentCulture 屬性。

在該自定義處理程序正確初始化了 CurrentUICulture 設置之后,它即可通過 Litware.resx 的強類型化資源類來訪問圖像文件。然后,便只需將圖像文件的數位編寫到 HTTP 響應流。顯示本地化圖像的最后步驟是,將 LitwareSlogan.ashx URL 分配到站點內任何頁面上一個圖像控件的 ImageUrl 屬性。

總結

ASP.NET 2.0 使國際化網站和資源變得更加容易。通過檢查瀏覽器發送的 HTTP 標題,可在網站內輕松地初始化頁面的區域性設置。而且,還可輕松地設計更加復雜的機制,使用戶能夠通過配置所需的語言首選項來個性化其體驗。

=======================================================================

我的例子如下:

1:在VS2005建好Resource.resx文件.
lb1_name="name"

lb1_.value="jingqiu"

2:在.CS中
using System.Resources;

this.Label1.Text = Resources.Resource.lb1_name.ToString();
?this.Label2.Text = Resources.Resource.lb1_sex.ToString();

.NET中對資源文件的使用簡介


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本欧美大片 | 国产精品天天影视久久综合网 | 欧美一级看片a免费视频 | 久久免费高清视频 | 亚洲第一伊人 | 日本一级成人毛片免费观看 | 午夜dy888理论不卡达达兔 | 国产欧美日韩精品a在线观看 | 亚洲jizzjizz中国妇女 | 成人a毛片视频免费看 | 欧美婷婷 | 99视频在线看观免费 | 久久久久久久久久久96av | www欧美| 久久香蕉国产线看观看99 | 中文字幕一区视频 | 热久久99影院 | 伊人一本之道 | 亚洲欧美日韩国产一区图片 | 大学生一级毛片免费看真人 | 精品中文字幕乱码一区二区 | 中文字幕在线视频在线看 | 青草视频在线观看免费资源 | 久久精品国产无限资源 | 精品日韩一区二区三区视频 | 亚洲 国产 路线1路线2路线 | 91最新免费观看在线 | 色综合久久伊人 | 日本一级毛片高清免费观看视频 | 久久久久久久九九九九 | 97超精品视频在线观看 | 夜夜撸日日干 | 免费一级成人毛片 | 精品美女视频在线观看2023 | 青青青国产精品手机在线观看 | 久久青草免费91观看 | 在线观看中文字幕国产 | 亚洲精品一级一区二区三区 | 日本不卡一区二区三区 最新 | 免费鲁丝片一级在线观看 | 色综合久久久久久中文网 |