Freigeben über


ResourceManager-Klasse

Stellt benutzerfreundlichen Zugriff auf kulturabhängige Ressourcen zur Laufzeit bereit.

Namespace: System.Resources
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class ResourceManager
'Usage
Dim instance As ResourceManager
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class ResourceManager
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class ResourceManager
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class ResourceManager
SerializableAttribute 
ComVisibleAttribute(true) 
public class ResourceManager

Hinweise

Die ResourceManager-Klasse durchsucht kulturabhängige Ressourcen, stellt Ressourcenfallback bereit, wenn eine lokalisierte Ressource nicht vorhanden ist, und unterstützt das Serialisieren von Ressourcen.

Mit den Methoden des ResourceManager kann ein Aufrufer mit der GetObject-Methode und der GetString-Methode auf die Ressourcen für eine bestimmte Kultur zugreifen. In der Standardeinstellung geben diese Methoden die Ressource für die Kultur zurück, die durch die aktuellen Kultureinstellungen des aufrufenden Threads bestimmt werden. (Weitere Informationen finden Sie unter Thread.CurrentUICulture.) Aufrufer können mit der ResourceManager.GetResourceSet-Methode ein ResourceSet abrufen, das die Ressourcen für eine bestimmte Kultur darstellt und ignoriert die Fallbackregeln der Kultur. Mit dem ResourceSet können Sie dann auf die Ressourcen, die für diese Kultur lokalisiert sind, nach Namen zugreifen.

Es empfiehlt sich, Ressourcen für jede Sprache oder zumindest für eine sinnvolle Auswahl von Sprachen zu erstellen. Die Namen der Ressourcendateien entsprechen der Benennungskonvention Basisname.Kulturname.Ressourcen, wobei Basisname je nach erwünschter Genauigkeit für den Namen der Anwendung oder den Namen einer Klasse steht. Mit der Name-Eigenschaft von CultureInfo wird der Kulturname bestimmt. Eine Ressource für die neutrale Kultur, die von InvariantCulture zurückgegeben wird, muss nach dem Muster Basisname.Ressourcen benannt werden.

Angenommen, eine Assembly verfügt über mehrere Ressourcen in einer Ressourcendatei mit dem Basisnamen "MyResources". Die Namen dieser Ressourcendateien lauten z. B. "MyResources.ja-JP.resources", "MyResources.de.resources", "MyResources.zh-CHS.resources" oder "MyResources.fr-BE.resources" und enthalten jeweils die Ressourcen für Japanisch, Deutsch, Chinesisch (vereinfacht) und Französisch (Belgien). Die Standardressourcendatei muss MyResources.resources benannt werden. Die kulturabhängigen Ressourcendateien werden i. d. R. in Satellitenassemblys für die jeweiligen Kulturen gepackt. Die Standardressourcendatei muss sich in der Hauptassembly befinden.

Angenommen, es wurde ein ResourceManager erstellt, um die Ressourcen mit diesem Basisnamen darzustellen. Mit ResourceManager können Sie ein ResourceSet abrufen, das "MyResources.ja-JP.resources" durch Aufruf von GetResourceSet(new CultureInfo ("ja-JP"), TRUE, FALSE) kapselt. Wenn Sie wissen, dass "MyResources" die Ressource "TOOLBAR_ICON" enthält, können Sie den Wert der Ressource, die für Japan lokalisiert wurde, abrufen, indem Sie GetObject("TOOLBAR_ICON", new CultureInfo("ja-JP")) aufrufen.

Obwohl dies für die meisten Verwendungszwecke von ResourceManager nicht erforderlich ist, sollten allgemein zugängliche Assemblys das SatelliteContractVersionAttribute verwenden, um mehrere Versionen der Hauptassembly zu unterstützen, ohne dass die Satellitenassemblys erneut bereitgestellt werden müssen, sowie das NeutralResourcesLanguageAttribute, um das Suchen einer nicht vorhandenen Satellitenassembly zu verhindern.

Weitere Informationen über die Unterstützung mehrerer Versionen von Satellitenassemblys finden Sie unter Abrufen von Ressourcen in Satellitenassemblys. Weitere Informationen über das Erstellen von Satellitenassemblys finden Sie unter Erstellen von Satellitenassemblys. Hinweise zum Lokalisieren von Windows Forms-Dialogfeldern finden Sie unter dem Windows Forms Resource Editor-Tool (Winres.exe)-Tool in Microsoft .NET Framework SDK.

Weitere Informationen über das Einrichten und Erstellen von Ressourcen finden Sie unter Ressourcen in Anwendungen.

Warnung

Das Verwenden eigenständiger RESOURCES-Dateien in einer ASP.NET-Anwendung unterbricht die XCOPY-Bereitstellung, da die Ressourcen gesperrt bleiben, bis sie explizit durch die ReleaseAllResources-Methode freigegeben werden. Wenn Sie Ressourcen in ASP.NET-Anwendungen bereitstellen möchten, sollten Sie die RESOURCES-Dateien in Satellitenassemblys kompilieren.

Warnung

Auf als privat gekennzeichnete Ressourcen kann nur innerhalb der Assembly zugegriffen werden, in der sie sich befinden. Da die Satellitenassembly keinen Code enthält, sind die Ressourcen, die in dieser privat sind, durch keinen Mechanismus verfügbar. Daher sollten Ressourcen in Satellitenassemblys immer öffentlich sein, damit aus der Hauptassembly auf diese zugegriffen werden kann. Auf die in der Hauptassembly eingebetteten Resourcen kann von der Hauptassembly zugegriffen werden, unabhängig davon, ob diese privat oder öffentlich sind.

< satelliteassemblies >-Konfigurationsdateiknoten

Sie können einen <satelliteassemblies>-Knoten in der Anwendungskonfigurationsdatei erstellen, um anzugeben, dass Sie eine bestimmte Gruppe von Kulturen für die Anwendung bereitgestellt haben und die ResourceManager-Klasse nicht versuchen sollte, nach einer Kultur zu suchen, die in diesem Knoten nicht aufgeführt ist.

Hinweis

Als Alternative ist es dem Erstellen eines <satelliteassemblies>-Knotens vorzuziehen, das ClickOnce-Bereitstellungsmanifest-Feature zu verwenden.

Erstellen Sie einen dem folgenden Codebeispiel ähnlichen Konfigurationsdateiabschnitt:

<?xml version ="1.0"?>
<configuration>
    <satelliteassemblies>
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">
            <culture>cultureName1</culture>
            <culture>cultureName2</culture>
            <culture>cultureName3</culture>
        </assembly>
    </satelliteassemblies>
</configuration>

Führen Sie in der Konfigurationsdatei Folgendes aus:

  • Geben Sie einen oder mehrere <assembly>-Knoten für jede bereitgestellte Hauptassembly an, wobei das <assembly>-Knotenattribut einen vollqualifizierten Assemblynamen angibt. Geben Sie anstelle von MainAssemblyName den Namen der Hauptassembly an, und geben Sie die Attributwerte Version, PublicKeyToken und Culture an, die Ihrer Hauptassembly entsprechen.

    Geben Sie für das Version-Attribut die Versionsnummer der Assembly an. Zum Beispiel könnte die erste Version der Assembly Versionsnummer 1.0.0.0 sein.

    Sie können für das PublicKeyToken-Attribut "null" angeben, wenn die Assembly nicht mit einem starken Namen signiert ist, oder das öffentliche Schlüsseltoken, wenn die Assembly signiert ist.

    Geben Sie für das Culture-Attribut das Schlüsselwort "neutral" an, um die Hauptassembly festzulegen, und veranlassen Sie, dass die ResourceManager-Klasse nur die in den <culture>-Knoten aufgelisteten Kulturen sucht.

    Weitere Informationen zu vollqualifizierten Assemblynamen finden Sie unter Assemblynamen. Weitere Informationen über Assemblys mit starkem Namen finden Sie unter Erstellen und Verwenden von Assemblys mit starkem Namen.

  • Geben Sie einen oder mehrere <culture>-Knoten mit einem bestimmten Kulturnamen, z. B. "fr-FR", oder einem neutralen Kulturnamen, z. B. "fr", an.

Wenn Ressourcen für eine Assembly benötigt werden, die unter dem <satelliteassemblies>-Knoten nicht aufgeführt ist, sucht die ResourceManager-Klasse entsprechend den Standardsuchregeln nach Kulturen.

Beispiel

Das folgende Codebeispiel veranschaulicht die Verwendung einer expliziten Kultur. Außerdem ruft die implizite aktuelle UI Zeichenfolgenressourcen aus einer Hauptassembly und einer Satellitenassembly ab. Weitere Informationen finden Sie im Unterthema "Verzeichnispfade für Satellitenassemblys, die nicht im globalen Assemblycache installiert sind" im Thema Erstellen von Satellitenassemblys.

' This code example demonstrates the ResourceManager() 
' constructor and ResourceManager.GetString() method.

Imports System
Imports System.Resources
Imports System.Reflection
Imports System.Threading
Imports System.Globalization

'
'Perform the following steps to use this code example:
'
'Main assembly:
'1) In a main directory, create a file named "rmc.txt" that 
'contains the following resource strings:
'
'day=Friday
'year=2006
'holiday="Cinco de Mayo"
'
'2) Use the resgen.exe tool to generate the "rmc.resources" 
'resource file from the "rmc.txt" input file.
'
'> resgen rmc.txt
'
'Satellite Assembly:
'3) Create a subdirectory of the main directory and name the 
'subdirectory "es-ES", which is the culture name of the 
'satellite assembly.
'
'4) Create a file named "rmc.es-ES.txt" that contains the 
'following resource strings:
'
'day=Viernes
'year=2006
'holiday="Cinco de Mayo"
'
'5) Use the resgen.exe tool to generate the "rmc.es-ES.resources" 
'resource file from the "rmc.es-ES.txt" input file.
'
'> resgen rmc.es-ES.txt
'
'6) Use the al.exe tool to create a satellite assembly. If the 
'base name of the application is "rmc", the satellite assembly 
'name must be "rmc.resources.dll". Also, specify the culture, 
'which is es-ES.
'
'> al /embed:rmc.es-ES.resources /c:es-ES /out:rmc.resources.dll 
'
'7) Assume the filename for this code example is "rmc.vb". Compile 
'rmc.vb and embed the main assembly resource file, rmc.resources, in 
'the executable assembly, rmc.exe:
'
'>vbc /res:rmc.resources rmc.vb
'
'8) Execute rmc.exe, which obtains and displays the embedded 
'resource strings.
'

Class Sample
    Public Shared Sub Main() 
        Dim day As String
        Dim year As String
        Dim holiday As String
        Dim celebrate As String = "{0} will occur on {1} in {2}." & vbCrLf
        
        ' Create a resource manager. The GetExecutingAssembly() method
        ' gets rmc.exe as an Assembly object.
        Dim rm As New ResourceManager("rmc", [Assembly].GetExecutingAssembly())
        
        ' Obtain resources using the current UI culture.
        Console.WriteLine("Obtain resources using the current UI culture.")
        
        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. Use those strings to 
        ' display a message.
        day = rm.GetString("day")
        year = rm.GetString("year")
        holiday = rm.GetString("holiday")
        Console.WriteLine(celebrate, holiday, day, year)
        
        ' Obtain the es-ES culture.
        Dim ci As New CultureInfo("es-ES")
        
        ' Get the resource strings for the day, year, and holiday 
        ' using the specified culture. Use those strings to 
        ' display a message. 
        ' Obtain resources using the es-ES culture.
        Console.WriteLine("Obtain resources using the es-ES culture.")
        
        day = rm.GetString("day", ci)
        year = rm.GetString("year", ci)
        holiday = rm.GetString("holiday", ci)
        
        ' ---------------------------------------------------------------
        ' Alternatively, comment the preceding 3 code statements and 
        ' uncomment the following 4 code statements:
        ' ----------------------------------------------------------------
        ' Set the current UI culture to "es-ES" (Spanish-Spain).
        '    Thread.CurrentThread.CurrentUICulture = ci
        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. Use those strings to 
        ' display a message. 
        '    day  = rm.GetString("day")
        '    year = rm.GetString("year")
        '    holiday = rm.GetString("holiday")
        ' ---------------------------------------------------------------
        ' Regardless of the alternative that you choose, display a message 
        ' using the retrieved resource strings.
        Console.WriteLine(celebrate, holiday, day, year)
    
    End Sub 'Main
End Class 'Sample

'
'This code example produces the following results:
'
'>rmc
'Obtain resources using the current UI culture.
'"5th of May" will occur on Friday in 2006.
'
'Obtain resources using the es-ES culture.
'"Cinco de Mayo" will occur on Viernes in 2006.
'
// This code example demonstrates the ResourceManager() 
// constructor and ResourceManager.GetString() method.

using System;
using System.Resources;
using System.Reflection;
using System.Threading;
using System.Globalization;

/*
Perform the following steps to use this code example:

Main assembly:
1) In a main directory, create a file named "rmc.txt" that 
contains the following resource strings:

day=Friday
year=2006
holiday="Cinco de Mayo"

2) Use the resgen.exe tool to generate the "rmc.resources" 
resource file from the "rmc.txt" input file.

> resgen rmc.txt

Satellite Assembly:
3) Create a subdirectory of the main directory and name the 
subdirectory "es-ES", which is the culture name of the 
satellite assembly.

4) Create a file named "rmc.es-ES.txt" that contains the 
following resource strings:

day=Viernes
year=2006
holiday="Cinco de Mayo"

5) Use the resgen.exe tool to generate the "rmc.es-ES.resources" 
resource file from the "rmc.es-ES.txt" input file.

> resgen rmc.es-ES.txt

6) Use the al.exe tool to create a satellite assembly. If the 
base name of the application is "rmc", the satellite assembly 
name must be "rmc.resources.dll". Also, specify the culture, 
which is es-ES.

> al /embed:rmc.es-ES.resources /c:es-ES /out:rmc.resources.dll 

7) Assume the filename for this code example is "rmc.cs". Compile 
rmc.cs and embed the main assembly resource file, rmc.resources, in 
the executable assembly, rmc.exe:

>csc /res:rmc.resources rmc.cs

8) Execute rmc.exe, which obtains and displays the embedded 
resource strings.
*/

class Sample 
{
    public static void Main() 
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

// Create a resource manager. The GetExecutingAssembly() method
// gets rmc.exe as an Assembly object.

    ResourceManager rm = new ResourceManager("rmc", 
                             Assembly.GetExecutingAssembly());

// Obtain resources using the current UI culture.
    Console.WriteLine("Obtain resources using the current UI culture.");

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message.

    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

// Obtain the es-ES culture.
    CultureInfo ci = new CultureInfo("es-ES");

// Get the resource strings for the day, year, and holiday 
// using the specified culture. Use those strings to 
// display a message. 

// Obtain resources using the es-ES culture.
    Console.WriteLine("Obtain resources using the es-ES culture.");

    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);

// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and 
// uncomment the following 4 code statements:
// ----------------------------------------------------------------

// Set the current UI culture to "es-ES" (Spanish-Spain).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message. 
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message 
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}

/*
This code example produces the following results:

>rmc
Obtain resources using the current UI culture.
"5th of May" will occur on Friday in 2006.

Obtain resources using the es-ES culture.
"Cinco de Mayo" will occur on Viernes in 2006.

*/

Vererbungshierarchie

System.Object
  System.Resources.ResourceManager
     System.ComponentModel.ComponentResourceManager

Threadsicherheit

Dieser Typ ist sicher bei Multithreadoperationen.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

ResourceManager-Member
System.Resources-Namespace
CultureInfo
SatelliteContractVersionAttribute

Weitere Ressourcen

Codierung und Lokalisierung