如果您建立的網頁將由使用不同語言的使用者閱讀,則必須為這些讀者提供用他們自己的語言查看網頁的方法。一種方法是分別用各語言重新建立頁面,但這種方法可能需要大量工作量、容易出錯並且在更改原始頁時很難維護。 ASP.NET 為您提供了一種方法,使用這種方法建立的頁可以根據瀏覽器的慣用語言設定或使用者明確選取的語言擷取內容和其他資料。內容和其他資料指的就是資源,此類資料可以儲存在資源檔或其他源中。
資源檔
在.net開發中資源檔是 XML 檔案,其中包含要轉換為不同語言或映像路徑的字串。資源檔包含鍵/值對,每一對都是一個單獨的資源。鍵名不區分大小寫。
NOTE: 雖然資源可以保護圖片、音頻等格式的檔案,但需要注意的是在資源檔中只儲存鍵/值對,由它指向特定的資源。
<data name="Image1" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\Image1.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value></data>
<data name="URL" xml:space="preserve"> <value>www.cnbooku.com</value> </data>
ASP.NET 中的資源檔具有 .resx 副檔名。在運行時,.resx 檔案將編譯進一個程式集內,該程式集有時稱為附屬組件。由於 .resx 檔案是用與 ASP.NET 網頁相同的方式動態編譯的,因此不必建立資來源程式集。編譯過程將多個語言類似的資源檔壓縮在同一程式集內。 您需要為每種語言(如英語和法語)或每種語言和地區性(如英語 [英國]、英語 [美國])分別建立一個資源檔。每個本地化資源檔都有相同的鍵/值對;
本地化資源檔與預設資源檔的唯一區別就是前者所包含的資源可能少於後者。然後,語言回退處理非特定資源或預設資源的載入。 在建立資源檔時,首先開始建立基檔案 .resx。對於要支援的每種語言,分別建立一個新檔案,該檔案具有同一基本檔案名稱但包含語言或語言及地區性(地區性名稱)。
AppFolder_labels.resx 基資源檔。該檔案是預設或後備資源檔,也就是說如果找不到指定的地區檔案則預設載入基資源檔。
AppFolder_labels.en-us.resx 美國英語的資源檔。
AppFolder_labels.zh-cn.resx 簡體中文的資源檔。
AppFolder_labels.de.resx 德語的資源檔。
在運行時,ASP.NET 使用與 CurrentUICulture 屬性的設定最為匹配的資源檔。線程的 UI 文化特性根據頁的 UI 文化特性進行設定。例如,如果當前的 UI 文化特性是德語,則 ASP.NET 使用 AppFolder_labels.de.resx 檔案的已編譯版本。如果當前的 UI 文化特性沒有匹配項,則 ASP.NET 會使用資源後備;首先用特定地區性的資源,接著用非特定地區性,最後用預設資源檔。在本例中,預設資源檔是 AppFolder_labels.resx。
為 ASP.NET 網站建立資源檔
在 ASP.NET 中,可以建立具有不同範圍的資源檔。可以建立全域資源檔,這意味著可以從位於網站中的任意頁或代碼讀取這些資源檔。也可以建立本地資源檔,這些檔案儲存體單個 ASP.NET 網頁(.aspx 檔案)的資源。
全域資源檔
將資源檔放入應用程式根目錄的保留檔案夾 App_GlobalResources 中,即可建立全域資源檔。App_GlobalResources 檔案夾中的任何 .resx 檔案都具有全域範圍。此外,ASP.NET 還產生了一個強型別對象,這為開發人員提供了一種以編程方式訪問全域資源的簡單方法。如果在上面的資源檔中建立字元資源 key = URL_BAODR 則在代碼中可以如下法調用。
Resources.AppFolder_labels.URL_BAODR 其中 Resources 是ASP.NET 資源檔的名稱空間, AppFolder_labels 是 ASP.NET 自動根據資源檔建立的類, URL_BAODR 是key名表現為類中的屬性。
本地資源檔
本地資源檔是只應用於一個 ASP.NET 頁的檔案(帶有 .aspx、.ascx、.master 等副檔名的 ASP.NET 頁)。本地資源檔所放入的檔案夾具有 App_LocalResources 保留名稱。App_LocalResources 檔案夾可以存在於應用程式的任何檔案夾中,這與 App_GlobalResources 根資料夾不同。通過資源檔名將一組資源檔與特定的網頁相關聯。 例如,如果在 App_LocalResources 檔案夾中有一個名為 Default.aspx 的頁,則可以建立下列檔案:
Default.aspx.resx 預設的本地資源檔,如果找不到語言匹配項,則該檔案為後備資源檔。
Default.aspx.es.resx 西班牙語的資源檔,不包含地區性資訊。
Default.aspx.es-mx.resx專用於西班牙語(墨西哥)的資源檔。
檔案的基名稱與頁檔案名稱相同,後跟語言和地區性名稱,最後以副檔名 .resx 結尾。
在全域和本地資源檔之間選擇
在 Web 應用程式中,可以任意組合使用全域和本地資源檔。通常情況下,當您希望在各頁之間共用資源時,應向全域資源檔添加這些資源。全域資源檔中的資源還是強型別的,用於以編程方式訪問。
缺點是:但如果將所有本地化資源都儲存在全域資源檔中,則這些檔案會變得很大。此外,如果多個開發人員要處理不同的頁但在同一個資源檔中工作時,全域資源檔也會更難於管理。
本地資源檔使得單個 ASP.NET 網頁的資源比較容易管理,但您不能在各頁之間共用資源。此外,如果有許多頁必須本地化為多種語言,則可能會建立大量本地資源檔。如果網站是具有許多檔案夾和使用多種語言的大型網站,則使用本地資源可能快速地在應用程式定義域中擴充程式集的數量。
在對預設資源檔變更時,無論它是本地資源檔還是全域資源檔,ASP.NET 都重新編譯資源並重新啟動 ASP.NET 應用程式,這可能會影響網站的整體效能。添加附屬資源檔將不會導致重新編譯資源,但 ASP.NET 應用程式仍將重新啟動。
注意:只有全域資源檔支援連結資源。