Ressourcen in ASP.NET-Anwendungen

Nach dem Erstellen der Satellitenassemblys für eine ASP.NET-Anwendung müssen Sie diese an bestimmten Speicherorte platzieren, an denen die Common Language Runtime diese finden und verwenden kann. Die Verzeichnisstruktur für Satellitenassemblys in ASP.NET-Anwendungen und ASP.NET-Steuerelementen unterscheidet sich von der Verzeichnisstruktur für Satellitenassemblys in einer Anwendung für Windows. ASP.NET-Anwendungen können Assemblys enthalten. Da ASP.NET-Seiten jedoch dynamisch in Assemblys konvertiert werden, ist der Assemblyname nicht im Voraus bekannt, und die standardmäßige Satellitenassemblykonfiguration wird nicht angewendet. Dieser Abschnitt beschreibt, wie Ressourcen auf ASP.NET-Seiten und in ASP.NET-Steuerelementen verwendet werden.

Hinweis

Die Verfahrensweisen für das Erstellen und Kompilieren der Ressourcen, die in einer ASP.NET-Anwendung verwendet werden sollen, unterscheiden sich nicht von den Verfahrensweisen für das Erstellen von Ressourcen für eine Anwendung für Windows. Ausführliche Informationen über diesen Prozess finden Sie unter Erstellen von Ressourcendateien, Verpacken und Bereitstellen von Ressourcen und Erstellen von Satellitenassemblys.

Ressourcen in ASP.NET-Seiten

Wenn Sie Ressourcen auf ASP.NET-Seiten verwenden möchten, erstellen Sie zuerst eine parallele Hauptassembly zur Speicherung der Anwendungsressourcen. Diese Assembly enthält die neutralen oder Standardressourcen für die Anwendung. Erstellen Sie anschließend eine Satellitenassembly, welche die lokalisierten Ressourcen für alle Kulturen enthält, die von der Anwendung unterstützt werden. Installieren Sie die Hauptassembly im Verzeichnis bin der Anwendung und die Satellitenassemblys in den erwarteten Unterverzeichnissen. Folgende Abbildung zeigt, wo Satellitenassemblys in der Verzeichnisstruktur der ASP.NET-Anwendung normalerweise gespeichert werden.

Hinweis

Wenn Sie nach diesem Modell Ressourcen in ASP.NET-Anwendungen bereitstellen, werden alle Assemblys verborgen in den globalen Assemblycache kopiert, sodass potenzielle Sperrprobleme ausgeschlossen werden.

Folgendes Beispiel für eine ASP.NET-Seite erstellt einen ResourceManager, um entsprechende Ressourcen abzurufen.

<%
    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"));
    %>

Sie können explizit die Kultur angeben, für die Ressourcen auf einer ASPX-Seite abgerufen werden, indem Sie den Code im vorigen Beispiel durch Code ergänzen, der ein CultureInfo-Objekt aus einer angegebenen Kultur erstellt und den Wert von CultureInfo verwendet, um die CurrentUICulture-Eigenschaft zu initialisieren. Mit dem folgenden Beispiel wird das Abrufen von deutschen Ressourcen immer erzwungen, da für die CurrentUICulture-Eigenschaft die übergeordnete Kultur "de" (für Deutsch) festgelegt wird.

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

Beachten Sie Folgendes: Auch wenn Sie eine neutrale Kultur wie z. B. "de" zum Erstellen eines CultureInfo-Objekts angeben können, um die CurrentUICulture-Eigenschaft zu initialisieren, müssen Sie eine spezifische Kultur angeben, um die CurrentCulture-Eigenschaft zu initialisieren. Die CurrentCulture-Eigenschaft benötigt eine spezifische Kultur, die sowohl mit einer Sprache als auch mit einer Region verknüpft ist, wie z. B. ("de-AT") für Deutsch in Österreich. Die neutrale Kultur "de" kann nicht eingegeben werden, da sie nur mit einer Sprache verknüpft ist. Verwenden Sie die CultureInfo.CreateSpecificCulture-Methode, um ein CultureInfo-Objekt in dem für die CurrentCulture-Eigenschaft geeigneten Format zu erstellen. Diese Methode erstellt ein CultureInfo-Objekt, welches die entsprechende Kultur repräsentiert, die einer angegebenen neutralen Kultur zugeordnet ist. In folgendem Beispiel wird die CultureInfo.CreateSpecificCulture-Methode verwendet, um ein CultureInfo-Objekt zu erstellen, welches die entsprechende Kultur einer neutralen Kultur "de" zuordnet und diese verwendet, um den Wert der CurrentCulture-Eigenschaft zu initialisieren.

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

Es ist empfehlenswert, die Werte für die CurrentUICulture-Eigenschaft und die CurrentCulture-Eigenschaft explizit auf der ASPX-Seite einzustellen. Folgendes Beispiel legt CurrentCulture auf "de" fest und verwendet anschließend den Wert von CurrentCulture, um die CurrentUICulture-Eigenschaft zu initialisieren.

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

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

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

Mit der CultureInfo.CreateSpecificCulture-Methode können Sie auch die aktuelle Webbrowsersprache verwenden, um die CurrentCulture-Eigenschaft auf der ASPX-Seite zu initialisieren. Im folgenden Beispiel gibt die Request.UserLanguages-Eigenschaft die aktuelle Webbrowsersprache als Zeichenfolge zurück. Die CultureInfo.CreateSpecificCulture-Methode wertet diese Zeichenfolge aus und gibt ein CultureInfo-Objekt in dem Format zurück, das zum Initialisieren des Werts der CurrentCulture-Eigenschaft verwendet werden kann.

' 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;

Weitere Beispiele zum Arbeiten mit Ressourcen in ASP.NET-Anwendungen finden Sie im Lernprogramm Gewusst wie: Programmgesteuertes Abrufen von Ressourcenwerten und den Beispielen in "Lokalisieren von ASP.NET-Anwendungen" und "Arbeiten mit Ressourcendateien" unter Schnellstart zu ASP.NET.

Ressourcen in ASP.NET-Steuerelementen

Wenn die ASP.NET-Anwendung mithilfe von ASP.NET-Steuerelementen entwickelt wurde, können Sie die oben beschriebene Verzeichnisstruktur verwenden. Beim Erstellen von Steuerelementen können Sie Code schreiben, der Ressourcen zur Anzeige verschiedener Informationssätze für den Benutzer verwendet. Steuerelemente besitzen eine Assembly, weil sie kompiliert werden. Daher lässt sich ein Satz von Standardressourcen in diese Assembly einbetten. Sie können Satellitenassemblys für Ressourcen erstellen, die von dem Steuerelement verwendet werden sollen, und diese in der für Satellitenassemblys vorgesehenen Verzeichnisstruktur speichern. Ausführliche Informationen finden Sie unter Erstellen von Satellitenassemblys. Speichern Sie das Steuerelement und die Ressourcen des Steuerelements im Verzeichnis bin im Stammverzeichnis der Anwendung. Folgende Abbildung zeigt ein Beispiel der korrekten Verzeichnisstruktur.

ASP.NET-Anwendung mit Verzeichnis für ASP.NET-Steuerelemente

Als Anwendungsstamm festgelegtes ASP.NET-Hauptverzeichnis

Sie können – wie in der Abbildung dargestellt – mehrere Instanzen von myControl auf myPage.aspx platzieren und jede auf einen anderen Ressourcendateieintrag verweisen lassen. Dies wird im folgenden ASP.NET-Codebeispiel dargestellt.

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

In diesem Beispiel verwendet ResourceManager die CultureInfo.CurrentUICulture-Eigenschaft der Anwendung, um die abzurufenden Ressourcen festzulegen.

Das folgende Beispiel steht für ein Button-Steuerelement. Die Text-Variable bezieht sich auf den abzurufenden Eigenschaftenwert, der anschließend im Steuerelement auf der ASPX-Seite eingestellt wird. Mit diesem Wert wird der Name des abzurufenden Eintrags festgelegt. In diesem Beispiel handelt es sich um dieselbe Eigenschaft, mit der dem Benutzer das Ergebnis angezeigt wird.

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);
    }
}

Siehe auch

Referenz

System.Globalization.CultureInfo Class

Konzepte

Ressourcen in Anwendungen
Erstellen von Ressourcendateien
Verpacken und Bereitstellen von Ressourcen
Erstellen von Satellitenassemblys

Weitere Ressourcen

ASP.NET-Webanwendungen