Freigeben über


Übersicht über das Verwenden von Ressourcen für ASP.NET-Webseiten

Aktualisiert: November 2007

Wenn Sie Webseiten für Leser unterschiedlicher Sprachkreise erstellen, müssen Sie den Lesern eine Möglichkeit bereitstellen, die Seiten in ihrer eigenen Sprache anzuzeigen. Ein Ansatz besteht darin, die Seiten für die einzelnen Sprachen neu zu erstellen. Da Sie bei dieser Vorgehensweise jedoch die ursprüngliche Seite ändern müssen, zieht dieses Vorgehen u. U. einen hohen Arbeits- und Verwaltungsaufwand nach sich und ist zudem mit einer starken Fehleranfälligkeit behaftet.

ASP.NET gibt Ihnen ein Verfahren zum Erstellen von Webseiten an die Hand, mit denen Inhalte und andere Daten basierend auf der bevorzugten Spracheinstellung des Browsers oder der expliziten Sprachauswahl des Benutzers abgerufen werden können. Inhalte und andere Daten werden auch als Ressourcen bezeichnet und können in Ressourcendateien oder anderen Datenquellen gespeichert werden.

Auf der ASP.NET-Webseite konfigurieren Sie Steuerelemente zum Abrufen der entsprechenden Eigenschaftenwerte aus den Ressourcen. Zur Laufzeit werden die Ressourcenausdrücke durch Ressourcen aus der jeweiligen Ressourcendatei ersetzt.

Ressourcendateien

Bei einer Ressourcendatei handelt es sich um eine XML-Datei, die die in andere Sprachen zu übersetzenden Zeichenfolgen oder Pfade zu Grafiken enthält. Die Ressourcendatei enthält Schlüssel-/Wertpaare. Jedes Paar bildet eine einzelne Ressource. Bei Schlüsselnamen wird die Groß- und Kleinschreibung nicht beachtet. Eine Ressourcendatei kann z. B. eine Ressource mit dem Schlüssel Button1 und dem Wert Submit enthalten.

Sie erstellen eine eigene Ressourcendatei für jede Sprache (z. B. Englisch und Französisch) oder für eine Sprache und Kultur (z. B. Englisch [GB], Englisch [USA]). Die einzelnen lokalisierten Ressourcendateien besitzen das gleiche Schlüssel-/Wertpaar. Der einzige Unterschied besteht in der Anzahl der Ressourcen, d. h. eine lokalisierte Ressourcendatei kann beispielsweise weniger Ressourcen enthalten als die Standardressourcendatei. Der integrierte Sprachfallbackprozess übernimmt dann das Laden der neutralen Ressource bzw. der Standardressource.

Die Ressourcendateien in ASP.NET erhalten die RESX-Dateierweiterung. Die RESX-Datei wird zur Laufzeit in eine Assembly kompiliert, die auch als Satellitenassembly bezeichnet wird. Da die RESX-Dateien, ebenso wie ASP.NET-Webseiten, dynamisch kompiliert werden, müssen Sie die Ressourcenassemblys nicht erstellen. Bei der Kompilierung werden mehrere Ressourcendateien mit ähnlichen Sprachen in der gleichen Assembly komprimiert.

Beginnen Sie beim Erstellen von Ressourcendateien mit dem Erstellen einer RESX-Basisdatei. Erstellen Sie anschließend für jede zu unterstützende Sprache eine neue Datei mit dem gleichen Dateinamen. Fügen Sie in den Namen jedoch zusätzlich die Sprache oder die Sprache und Kultur (Kulturname) ein. Eine Liste von Namen für Kulturen finden Sie unter der CultureInfo-Klasse. Sie könnten z. B. folgende Dateien erstellen:

  • WebResources.resx

    Die Ressourcenbasisdatei. Hierbei handelt es sich um die Standardressourcendatei (auch als Fallbackdatei bezeichnet).

  • WebResources.es.resx

    Eine Ressourcendatei für Spanisch.

  • WebResources.es-mx.resx

    Eine spezifische Ressourcendatei für Spanisch (Mexiko).

  • WebResources.de.resx   

    Eine Ressourcendatei für Deutsch.

Zur Laufzeit verwendet ASP.NET die Ressourcendatei, die der Einstellung der CurrentUICulture-Eigenschaft am besten entspricht. Die UI-Kultur für den Thread wird entsprechend der UI-Kultur der Seite festgelegt. Wenn z. B. die aktuelle UI-Kultur auf Spanisch festgelegt ist, verwendet ASP.NET die kompilierte Version der Datei WebResources.es.resx. Wenn für die aktuelle Kultur der Benutzeroberfläche keine Übereinstimmung vorhanden ist, verwendet ASP.NET den Ressourcenfallback. ASP.NET sucht zuerst nach Ressourcen für eine bestimmte Kultur. Wenn diese Ressourcen nicht verfügbar sind, wird nach den Ressourcen einer neutralen Kultur gesucht. Wenn diese nicht gefunden werden, lädt ASP.NET die Standardressourcendatei. Im vorliegenden Beispiel handelt es sich bei der Standardressourcendatei um WebResource.resx.

Erstellen von Ressourcendateien für ASP.NET-Websites

In ASP.NET können Sie Ressourcendateien mit unterschiedlichen Gültigkeitsbereichen erstellen. Sie können globale Ressourcendateien erstellen, die von jeder Seite oder von beliebigem Code auf der Website gelesen werden können. Sie können auch lokale Ressourcendateien erstellen, in denen jeweils die Ressourcen für eine einzelne ASP.NET-Webseite (ASPX-Datei) gespeichert sind.

Globale Ressourcendateien

Eine globale Ressourcendatei erstellen Sie, indem Sie sie im Stammverzeichnis der Anwendung im reservierten Ordner App_GlobalResources ablegen. Alle RESX-Dateien, die sich im Ordner App_GlobalResources befinden, besitzen einen globalen Gültigkeitsbereich. Darüber hinaus generiert ASP.NET ein stark typisiertes Objekt, das Ihnen eine einfache Möglichkeit zum programmgesteuerten Zugreifen auf globale Ressourcen bietet.

Lokale Ressourcendateien

Eine lokale Ressourcendatei wird jeweils nur auf eine ASP.NET-Seite bzw. ein Benutzersteuerelement (eine ASP.NET-Datei, die die Dateierweiterung ASPX, ASCX oder MASTER hat) angewendet. Lokale Ressourcendateien werden in Ordnern mit dem reservierten Namen App_LocalResources gespeichert. Anders als der Stammverzeichnisordner App_GlobalResources können sich Ordner mit der Bezeichnung App_LocalResources in jedem beliebigen Ordner der Anwendung befinden. Sie ordnen einer bestimmten Webseite unter Verwendung des Ressourcendateinamens eine Gruppe von Ressourcendateien zu.

Für die Webseite Default.aspx im Ordner App_LocalResources könnten Sie z. B. die folgenden Dateien erstellen:

  • Default.aspx.resx. Dies ist die lokale Standardressourcendatei (die Fallbackressourcendatei), wenn keine Übereinstimmung mit einer Sprache gefunden wird.

  • Default.aspx.es.resx. Dies ist die Ressourcendatei für Spanisch ohne Kulturinformationen.

  • Default.aspx.es-mx.resx. Dies ist die spezifische Ressourcendatei für Spanisch (Mexiko).

  • Default.aspx.fr.resx. Dies ist die Ressourcendatei für Französisch ohne Kulturinformationen.

Der Basisname der Datei entspricht dem Dateinamen der Webseite. Dieser wird durch eine Sprache und einen Kulturnamen erweitert und erhält am Ende die RESX-Dateierweiterung. Eine Liste der Kulturnamen finden Sie unter CultureInfo.

Lokalisieren von Clientskriptressourcen

Die Lokalisierungsunterstützung für ASP.NET-AJAX-Clientskript basiert auf der Grundlage des ASP.NET 2.0-Lokalisierungsmodells. In diesem Modell betten Sie Skriptdateien und lokalisierte Skriptressourcen in eine sternenförmige Anordnung von Assemblys ein (Satellitenassemblys). Sie können diese eingebetteten Clientskripts und die Ressourcen für bestimmte Sprachen und Regionen dann selektiv verwenden. Bei diesem Modell kann eine einzelne CodeBase mehrere Kulturen unterstützen. Es ist auch eine Unterstützung für lokalisierte Skriptdateien vorhanden, die als JS-Dateien auf Datenträger bereitgestellt werden. ASP.NET passt sich lokalisierten Clientskripts und Ressourcen für bestimmte Sprachen und Regionen automatisch an.

Weitere Informationen finden Sie unter den folgenden Themen:

Grundlagen für die Entscheidung zwischen globalen und lokalen Ressourcendateien

Sie können jede Kombination von globalen und lokalen Ressourcendateien in der Webanwendung verwenden. In der Regel fügen Sie Ressourcen einer globalen Ressourcendatei hinzu, wenn die Ressourcen von mehreren Seiten gemeinsam verwendet werden sollen. Ressourcen in globalen Ressourcendateien sind darüber hinaus stark typisiert, damit Sie ggf. programmgesteuert auf die Dateien zugreifen können.

Globale Ressourcendateien können jedoch eine beträchtliche Größe annehmen, wenn Sie alle lokalisierten Ressourcen darin speichern. Zudem sind globale Ressourcendateien u. U. auch schwieriger zu verwalten, wenn mehrere Entwickler zwar an verschiedenen Webseiten, aber in einer einzelnen Ressourcendatei arbeiten.

Ressourcen für eine einzelne ASP.NET-Webseite lassen sich einfacher mit lokalen Ressourcendateien verwalten. Hierbei können Sie jedoch die Ressourcen nicht für mehrere Seiten freigeben. Wenn Sie viele Seiten in vielen Sprachen zu lokalisieren haben, müssen Sie darüber hinaus möglicherweise zahlreiche lokale Ressourcendateien erstellen. Bei umfangreichen Websites mit vielen Ordnern und Sprachen kann die Anzahl der Assemblys in der Anwendungsdomäne durch die Verwendung lokaler Ressourcen rasch ansteigen.

Wenn Sie Änderungen an einer Standardressourcendatei (unabhängig davon, ob lokal oder global) vornehmen, werden die Ressourcen von ASP.NET neu kompiliert, und die ASP.NET-Anwendung wird neu gestartet. Dies wirkt sich möglicherweise auf die Gesamtleistung der Website aus. Wenn Sie Satellitenressourcendateien hinzufügen, müssen die Ressourcen nicht erneut kompiliert werden, die ASP.NET-Anwendung wird jedoch neu gestartet.

Hinweis:

Verknüpfte Ressourcen werden nur in globalen Ressourcendateien unterstützt.

Arbeiten mit Ressourcen auf Webseiten

Nach dem Erstellen der Ressourcendateien können Sie sie für ASP.NET-Webseiten verwenden. Ressourcen werden i. d. R. zum Füllen der Eigenschaftenwerte von Steuerelementen auf der Seite verwendet. So können Sie z. B. die Text-Eigenschaft eines Button-Steuerelements mithilfe von Ressourcen festlegen, anstatt für die Eigenschaft eine bestimmte Zeichenfolge fest zu programmieren.

Zum Festlegen von Eigenschaftenwerten mithilfe von Ressourcen können Sie, wie nachfolgend beschrieben, die implizite oder explizite Lokalisierung verwenden:

  • Bei der impliziten Lokalisierung werden lokale Ressourcen verwendet, und Sie können Steuerelementeigenschaften automatisch auf die entsprechenden Ressourcen festlegen.

  • Bei der expliziten Lokalisierung legen Sie eine Steuerelementeigenschaft mithilfe eines Ressourcenausdrucks auf eine bestimmte Ressource in einer lokalen oder globalen Ressourcendatei fest.

Implizite Lokalisierung mit lokalen Ressourcen

Wenn Sie für eine bestimmte Seite lokale Ressourcendateien erstellt haben, können Sie mithilfe der impliziten Lokalisierung die Eigenschaftenwerte für ein Steuerelement aus der Ressourcendatei füllen. Bei der impliziten Lokalisierung liest ASP.NET eine Ressourcendatei und vergleicht Ressourcen mit Eigenschaftenwerten.

Wenn Sie die implizite Lokalisierung verwenden möchten, müssen Sie für die Ressourcen in der lokalen Ressourcendatei eine Benennungskonvention mit folgendem Muster einhalten:

Schlüssel.Eigenschaft

Wenn Sie z. B. Ressourcen für das Button-Steuerelement Button1 erstellen möchten, müssen Sie in der lokalen Ressourcendatei die folgenden Schlüssel-/Wertpaare erstellen:

Button1.Text
Button1.BackColor
Label1.Text

Während Sie für Schlüssel einen beliebigen Namen verwenden können, muss Eigenschaft dem Namen einer Eigenschaft des zu lokalisierenden Steuerelements entsprechen.

Auf der Webseite geben Sie mithilfe eines speziellen meta-Attributs im Markup für das Steuerelement die implizite Lokalisierung an. Sie müssen nicht explizit angeben, welche Eigenschaften lokalisiert werden. Ein für die implizite Lokalisierung konfiguriertes Button-Steuerelement könnte z. B. wie folgt aussehen:

<asp:Button ID="Button1"  Text="DefaultText" 
    meta:resourcekey="Button1" />

Der resourcekey-Wert entspricht einem Schlüssel in der entsprechenden Ressourcendatei. Zur Laufzeit vergleicht ASP.NET die Ressourcen mit den Steuerelementeigenschaften, wobei die Steuerelementbeschriftung als resourcekey verwendet wird. Wenn in der Ressourcendatei ein Eigenschaftenwert definiert ist, ersetzt ASP.NET die Eigenschaft durch den Ressourcenwert.

Explizite Lokalisierung

Sie können auch mit der expliziten Lokalisierung arbeiten, bei der ein Ressourcenausdruck verwendet wird. Im Gegensatz zur impliziten Lokalisierung müssen Sie hier für jede festzulegende Eigenschaft einen Ressourcenausdruck angeben.

Ein Button-Steuerelement, das für das Festlegen der Text-Eigenschaft aus einer globalen Ressourcendatei konfiguriert wurde, könnte z. B. wie folgt aussehen:

<asp:Button ID="Button1"  
    Text="<%$ Resources:WebResources, Button1Caption %>" />

Der Ressourcenausdruck weist folgende Form auf, bei der Klasse optional (außer bei globalen Ressourcen) und ResourceID erforderlich ist:

<%$Resources:Klasse,ResourceID%>

Mit dem Klasse-Wert wird bei globalen Ressourcen die zu verwendende Ressourcendatei angegeben. Beim Kompilieren von RESX-Dateien wird als Klassenname der resultierenden Assembly explizit der Basisdateiname ohne Erweiterungen verwendet. Wenn Sie Ressourcen aus einer lokalen Ressourcendatei verwenden möchten (die mit dem Namen der aktuellen Seite übereinstimmt), müssen Sie keinen Klassennamen einfügen. Das liegt daran, dass ASP.NET die Seitenklasse mit der Ressourcenklasse abgleicht.

Der ResourceID-Wert ist der Bezeichner für die zu lesende Ressource. Im vorhergehenden Beispiel wird die Text-Eigenschaft für die Schaltfläche aus der globalen Ressourcendatei WebResources.resx (oder der entsprechenden lokalisierten Version) gelesen. In dieser Datei verwendet ASP.NET den Wert für die Ressource mit dem Bezeichner Button1Caption und für die Seite selbst. Zum Festlegen der Seiteneigenschaften können Sie Ressourcenausdrücke in der @ Page-Direktive verwenden.

Sie können entweder einen expliziten oder einen impliziten Ressourcenausdruck für ein Steuerelement angeben, jedoch nicht beides. Die folgende deklarative Syntax auf einem Button-Steuerelement führt zu einem Parserfehler:

<asp:Button ID="Button1" 
             
            meta:resourcekey="Button1Resource1"
            Text="<%$ Resources:WebResources, Button1Caption %>" />

In diesem Beispiel ist sowohl eine implizite lokale Ressourcendatei (die mit dem aktuellen Webseitennamen übereinstimmt) als auch eine explizite Ressourcendatei mit der Bezeichnung WebResources angegeben. Um einen Parserfehler für dieses Steuerelement zu vermeiden, entfernen Sie einen der Ressourcenausdrücke.

Lokalisieren von statischem Text

Wenn auf einer Seite statischer Text enthalten ist, können Sie die ASP.NET-Lokalisierung verwenden, indem Sie sie in einem Localize-Steuerelement einfügen und dann den statischen Text mithilfe der expliziten Lokalisierung festlegen. Das Localize-Steuerelement gibt kein Markup wieder. Seine einzige Funktion besteht darin, als Platzhalter für lokalisierten Text zu fungieren. Das Localize-Steuerelement kann nicht nur im Eigenschaftenraster, sondern auch in der Entwurfsansicht bearbeitet werden. Zur Laufzeit behandelt ASP.NET das Localize-Steuerelement als Literal-Steuerelement. Sie könnten auf der Seite z. B. den folgenden Code einfügen:

<h1>
  <asp:Localize runat=server 
    ID="WelcomeMessage" 
    Text="Welcome!" meta:resourcekey="LiteralResource1" />
</h1>
<br />
<br />
<asp:Localize 
    ID="NameCaption"
    Text="Name: " meta:resourcekey="LiteralResource2" />
<asp:TextBox  ID="TextBox1" 
    meta:resourcekey="TextBox1Resource1" />
Sicherheitshinweis:

Dieses Beispiel enthält ein Textfeld für Benutzereingaben. Dies stellt ein potenzielles Sicherheitsrisiko dar. Standardmäßig stellt die ASP.NET-Seite sicher, dass die Benutzereingabe keine Skript- oder HTML-Elemente enthält. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

Implizite Lokalisierung in Vorlagen

In als Vorlagen verwendeten Steuerelementen, z. B. den Steuerelementen DataList, GridView und Wizard, lokalisieren Sie die Formateigenschaften von Vorlagen, indem Sie auf die Eigenschaften des zum übergeordneten Steuerelement gehörenden impliziten Ressourcenausdrucks zugreifen. In der Vorlage selbst können Sie keinen impliziten Ressourcenausdruck verwenden.

Um Werte für eine Vorlageneigenschaft zu lokalisieren, verwenden Sie das meta-Attribut und einen Ressourcenschlüssel für das Steuerelement, zu dem die Vorlage gehört. Verwenden Sie in der Ressourcendatei dann entweder die Property.Subproperty-Syntax oder die Property-Subproperty-Syntax. Die folgende deklarative Syntax ist beispielsweise für ein Wizard-Steuerelement gültig:

<asp:Wizard ID="Wizard1" 
     
    meta:resourcekey="Wizard1Resource1">
  <NavigationStyle 
    BorderWidth="<%$ resources:navBorderWidth %>"/>
  <WizardSteps>
    <asp:WizardStep ID="WizardStep1" 
       
      Title="Step 1" 
      meta:resourcekey="WizardStep1Resource1">
    </asp:WizardStep>
  </WizardSteps>
</asp:Wizard>

Die folgenden Schlüssel/Wert-Paare in der lokalen Ressourcendatei können für das vorherige Beispiel verwendet werden:

Wizard1Resource1.NavigationStyle.BackColor, Red
navborderWidth, 5

Die folgenden Schlüssel-/Wertpaare könnten ebenfalls verwendet werden:

Wizard1Resource1.NavigationStyle-BackColor, Red
navborderWidth, 5

Sie können für die NavigationStyle-Eigenschaft des Wizard-Steuerelements im vorherigen Beispiel einen expliziten Ressourcenausdruck verwenden. Beim expliziten Ressourcenausdruck wird der Class-Name weggelassen, sodass Ressourcen aus einer lokalen Ressourcendatei verwendet werden.

Weitere Informationen zu vorlagenbasierten Serversteuerelementen finden Sie unter Vorlagen für ASP.NET-Webserver-Steuerelemente.

Auswählen von Ressourcendateien für verschiedene Sprachen

Beim Ausführen einer Seite wählt ASP.NET die Version der Ressourcendatei aus, die am ehesten mit der aktuellen UICulture-Einstellung für die Seite übereinstimmt. Wenn keine Übereinstimmung vorhanden ist, verwendet ASP.NET den Ressourcenfallback, um eine Ressource abzurufen. Wenn Sie z. B. die Default.aspx-Webseite ausführen und die aktuelle UICulture-Eigenschaft auf es (Spanisch) festgelegt ist, verwendet ASP.NET die kompilierte Version der lokalen Ressourcendatei Default.aspx.es.resx.

ASP.NET kann die UICulture-Eigenschaft und die Culture-Eigenschaft für die Seite auf die vom Browser für Sprache und Kultur übergebenen Werte festlegen. Sie können die UICulture-Eigenschaft und Culture-Eigenschaft aber auch explizit festlegen, entweder deklarativ oder im Code. Sie können die Werte auch deklarativ in Web.config-Dateien festlegen. Ausführliche Informationen finden Sie unter Gewusst wie: Festlegen der Kultur und der Kultur der Benutzeroberfläche für die Globalisierung von ASP.NET-Webseiten.

Hinweis:

Beschränken Sie sich beim Festlegen der Sprach- und Kulturinformationen jedoch nicht ausschließlich auf die Browsereinstellungen, da Benutzer möglicherweise nicht immer den Browser auf ihren eigenen Computern verwenden. Zudem übermitteln Browser häufig nur die Sprachinformationen ohne bestimmte Kultureinstellung. In diesem Fall muss der Server für das Formatieren der Daten eine bestimmte Kultur herleiten. Es empfiehlt sich daher, den Benutzern die Möglichkeit zum expliziten Auswählen einer Sprache zu geben.

Programmgesteuertes Arbeiten mit Ressourcen

Sie können die Ressourcenwerte nicht nur mithilfe von Ressourcenausdrücken im Markup festlegen, sondern Sie können sie auch programmgesteuert abrufen. Diese Methode eignet sich unter Umständen, wenn der Ressourcenwert zur Entwurfszeit noch unbekannt ist oder wenn Sie den Ressourcenwert auf einen Wert festlegen möchten, der zur Laufzeit ermittelt wird. Weitere Informationen finden Sie unter Gewusst wie: Programmgesteuertes Abrufen von Ressourcenwerten.

Siehe auch

Weitere Ressourcen

ASP.NET-Globalisierung und -Lokalisierung