共用方式為


ASP.NET 應用程式中的資源

更新:2007 年 11 月

在建立 ASP.NET 應用程式的附屬組件後,必須將其置於 Common Language Runtime 能夠找到並使用的特定位置。在 ASP.NET 應用程式和 ASP.NET 控制項中的附屬組件目錄結構,與 Windows 架構應用程式中的附屬組件目錄結構不同。ASP.NET 應用程式可以包含組件。然而,因為 ASP.NET 網頁會動態轉換成組件,組件名稱無法預先知道,並且不能套用標準附屬組件組態。這個章節描述如何在 ASP.NET 網頁和 ASP.NET 控制項中使用資源。

注意事項:

建立和編譯在 ASP.NET 應用程式中使用資源的程序,與建立 Windows 架構應用程式資源的程序完全相同。如需這個流程的詳細資訊,請參閱建立資源檔封裝和部署資源以及建立附屬組件

ASP.NET 網頁中的資源

若要在 ASP.NET 網頁中使用資源,首先要建立平行的主要組件來儲存您應用程式的資源。這個組件將包含應用程式的預設或中性資源。其次,建立附屬組件,包含您應用程式所支援各個文化特性的當地語系化資源。安裝主要組件到應用程式的 bin 目錄內,和附屬組件到預期的子目錄中。

注意事項:

當您使用這個模型在 ASP.NET 應用程式中部署資源時,所有組件都會陰影複製到全域組件快取中,以排除潛在的鎖定問題。

下列用於 ASP.NET 網頁上的程式碼範例,建立 ResourceManager 以擷取適當的資源。

<%
    Dim a As Assembly = Assembly.Load("myApp")
    Dim rm As ResourceManager = New ResourceManager("myApp", a)
    Response.Write(rm.GetString("string"))
    %>
<%
    Assembly a = Assembly.Load("myApp");
    ResourceManager rm = new ResourceManager("myApp", a);
    Response.Write(rm.GetString("string"));
    %>

您可以在先前範例的數行程式碼之後接著在您所指定之文化特性中建立 CultureInfo 物件並使用 CultureInfo 的值初始化 CurrentUICulture 屬性的程式碼,來明確指定用以在 .aspx 網頁中擷取資源的文化特性。下列程式碼範例每次都會強制擷取德文資源,因為它會將 CurrentUICulture 屬性 (Property) 設定為德文的父文化特性「de」。

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de")
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

注意,雖然您可以指定如「de」的中性文化特性,以建立可用於初始化 CurrentUICulture 屬性 (Property) 的 CultureInfo 物件,還是必須指定特定文化特性以初始化 CurrentCulture 屬性CurrentCulture 屬性預期有特定文化特性,也就是與語言和地區兩者相關聯的文化特性,例如 (「de-AT」) 代表奧地利所使用的德文。中性文化特性「de」將不會有作用,因為它只和語言關聯。若要在 CurrentCulture 屬性所需格式中建立 CultureInfo 物件,請使用 CultureInfo.CreateSpecificCulture 方法。這個方法建立 CultureInfo 物件,代表與指定中性文化特性相關的特定文化特性。下列程式碼範例使用 CultureInfo.CreateSpecificCulture 方法建立 CultureInfo 物件,以代表與中性文化特性「de」相關的特定文化特性,並以它初始化 CurrentCulture 屬性的值。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

在您的 .aspx 網頁中明確設定 CurrentUICultureCurrentCulture 兩個屬性的值,是良好的慣例。下列範例將 CurrentCulture 設定為「de」,接著使用 CurrentCulture 的值初始化 CurrentUICulture 屬性。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

CultureInfo.CreateSpecificCulture 方法也允許您使用 Web 瀏覽器的目前語言,在 .aspx 網頁中初始化 CurrentCulture 屬性。在下列範例中,Request.UserLanguages 屬性以字串傳回 Web 瀏覽器的目前語言。CultureInfo.CreateSpecificCulture 方法剖析這個字串,並以可用來初始化 CurrentCulture 屬性值的格式傳回 CultureInfo 物件。

' Set the CurrentCulture property to the culture associated with the Web
' browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0])

' It is good practice to explicitly set the CurrentUICulture property.
' Initialize the CurrentUICulture property
' with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
// Set the CurrentCulture property to the culture associated with the Web
// browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

// It is good practice to explicitly set the CurrentUICulture property.
// Initialize the CurrentUICulture property
// with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

如需使用 ASP.NET 應用程式中資源的詳細範例,請參閱 HOW TO:以程式設計方式擷取資源值教學課程和 ASP.NET 快速入門中的<當地語系化 ASP.NET 應用程式>和<使用資源檔>範例。

ASP.NET 控制項中的資源

如果您使用 ASP.NET 控制項來開發 ASP.NET 應用程式,可以使用上述的相同目錄結構。當您建立控制項時,您可以撰寫使用資源的程式碼,向使用者顯示不同的資訊集。因為控制項經過編譯,所以具有組件。這允許您在那組件中嵌入一組預設資源。您可以建立控制項所使用資源的附屬組件,並將它們置於附屬組件應有的目錄結構。如需詳細資訊,請參閱建立附屬組件。放置控制項和控制項的資源在應用程式根 (Root) 的 bin 目錄。下列圖示提供正確目錄結構的範例。

具有 ASP.NET 控制項目錄的 ASP.NET 應用程式

主要 ASP.NET 目錄,設定為 AppRoot

您可以將數個 myControl 的執行個體 (如說明中所示) 置於 myPage.aspx 中。您可以設定每個版本以參考不同的資源檔項目。下列 ASP.NET 程式碼範例示範這點。

<Loc:myControl  Text="entry1" />
<Loc:myControl  Text="entry2" />

在這個範例中,ResourceManager 使用應用程式的 CultureInfo.CurrentUICulture 屬性判斷要擷取哪些資源。

下列範例將說明 Button 控制項。Text 變數參考到正被擷取且緊接著在 .aspx 網頁內控制項中設定的屬性值。這個值被用來決定要擷取的項目名稱。在這個範例中,它是用來向使用者顯示結果的相同屬性。

Public Class myControl
Inherits Button

    Protected Overrides Sub Render(HtmlTextWriter writer)
        ' rm refers to the ResourceManager.
        Text = rm.GetString(Text)
        MyBase.Render(writer)
    End Sub
End Class
public class mycontrol : Button 
{
    protected override void Render(HtmlTextWriter writer) 
    {
        // rm refers to the ResourceManager.
        Text = rm.GetString(Text);      
        base.Render(writer);
    }
}

請參閱

概念

應用程式中的資源

建立資源檔

封裝和部署資源

建立附屬組件

參考

System.Globalization.CultureInfo

其他資源

建立 ASP.NET 網站