Freigeben über


System.Resources.NeutralResourcesLanguageAttribute-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

In Desktop-Apps informiert das NeutralResourcesLanguageAttribute Attribut den Ressourcen-Manager über die Standardkultur einer App und den Speicherort seiner Ressourcen. Standardmäßig sind Ressourcen in die Standard App-Assembly eingebettet, und Sie können das Attribut wie folgt verwenden. Diese Anweisung gibt an, dass englisch (USA) die Standardkultur der App ist.

[assembly: NeutralResourcesLanguage("en-US")]
<Assembly:NeutralResourcesLanguage("en-US")>

Sie können das NeutralResourcesLanguageAttribute Attribut auch verwenden, um anzugeben, wo ResourceManager die Ressourcen der Standardkultur gefunden werden können, indem Sie einen UltimateResourceFallbackLocation Enumerationswert in der Attributaufweisung angeben. Dies geschieht am häufigsten, um anzugeben, dass sich die Ressourcen in einer Satellitenassembly befinden. Die folgende Anweisung gibt beispielsweise an, dass Englisch (USA) die Standard- oder neutrale Kultur der App ist und dass sich die Ressourcen in einer Satellitenassembly befinden. Das ResourceManager Objekt sucht sie in einem Unterverzeichnis namens "en-US".

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
<Assembly:NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)>

Tipp

Es wird empfohlen, das Attribut immer zum Definieren der Standardkultur Ihrer App zu verwenden NeutralResourcesLanguageAttribute .

Das Attribut führt zwei Rollen aus:

  • Wenn die Ressourcen der Standardkultur in die Standard Assembly der App eingebettet sind und ResourceManager Ressourcen abrufen müssen, die derselben Kultur wie die Standardkultur angehören, verwendet die ResourceManager automatisch die Ressourcen, die sich in der Standard-Assembly befinden, anstatt nach einer Satellitenassembly zu suchen. Dadurch wird der übliche Assemblytest umgangen, die Suchleistung für die erste Ressource, die Sie laden, verbessert und Ihr Arbeitspaket kann reduziert werden. Siehe Packen und Bereitstellen von Ressourcen für den Prozess ResourceManager , der zum Untersuchen von Ressourcendateien verwendet wird.

  • Wenn sich die Ressourcen der Standardkultur in einer Satellitenassembly und nicht in der Standard App-Assembly befinden, gibt das NeutralResourcesLanguageAttribute Attribut die Kultur und das Verzeichnis an, aus dem die Laufzeit die Ressourcen laden kann.

Windows 8.x Store-Apps

In Windows 8.x Store-Apps, deren Ressourcen mithilfe der ResourceManager Klasse geladen und abgerufen werden, definiert das NeutralResourcesLanguageAttribute Attribut die neutrale Kultur, deren Ressourcen im Falle eines fehlgeschlagenen Probevorgangs verwendet werden. Er gibt nicht den Speicherort der Ressourcen an. Verwendet standardmäßig die PRI-Datei (Package Resource Index) der App, ResourceManager um die Ressourcen der Standardkultur zu suchen. Die neutrale Kultur, die durch das NeutralResourcesLanguageAttribute Attribut definiert wird, wird am Ende der Benutzeroberflächensprachenliste hinzugefügt, um diesen Effekt zu simulieren.

Wenn Sie Ressourcen mithilfe der Windows-Runtime Windows.ApplicationModel.Resources.ResourceLoader-Klasse oder der Typen im Windows.ApplicationModel.Resources.Core-Namespace laden und abrufen, wird das NeutralResourcesLanguageAttribute Attribut ignoriert.

Beispiele

Im folgenden Beispiel wird eine einfache "Hallo Welt"-App verwendet, um die Verwendung des NeutralResourcesLanguageAttribute Attributs zum Definieren einer Standard- oder Fallbackkultur zu veranschaulichen. Es erfordert die Erstellung separater Ressourcendateien für die Kulturen Englisch (en), Englisch (USA) (en-US) und Französisch (Frankreich) (fr-FR). Im Folgenden sehen Sie den Inhalt einer Textdatei mit dem Namen ExampleResources.txt für die englische Kultur.

# Resources for the default (en) culture.
Greeting=Hello

Um die Ressourcendatei in einer App zu verwenden, müssen Sie den Ressourcendatei-Generator (Resgen.exe) verwenden, um die Datei aus dem Textformat (.txt) in ein Binärformat (.resources) wie folgt zu konvertieren:

resgen ExampleResources.txt

Wenn die App kompiliert wird, wird die binäre Ressourcendatei in die Standard App-Assembly eingebettet.

Im Folgenden finden Sie den Inhalt einer Textdatei mit dem Namen ExampleResources.en-US.txt, die Ressourcen für die englische Kultur (USA) bereitstellt.

# Resources for the en-US culture.
Greeting=Hi

Die Textdatei kann mithilfe des Ressourcen-Generators (ResGen.exe) an der Befehlszeile wie folgt in eine Binärressourcendateidatei konvertiert werden:

resgen ExampleResources.en-US.txt ExampleResources.en-US.resources

Die binäre Ressourcendatei sollte dann mithilfe von Assembly Linker (Al.exe) in eine Assembly kompiliert und in das Unterverzeichnis "en-US" des App-Verzeichnisses eingefügt werden, indem der folgende Befehl ausgibt:

al /t:lib /embed:ExampleResources.en-US.resources /culture:en-US /out:en-us\Example.resources.dll

Im Folgenden sehen Sie den Inhalt einer Textdatei mit dem Namen ExampleResources.fr-FR.txt, die Ressourcen für die Französische Kultur (Frankreich) bereitstellt.

# Resources for the fr-FR culture.
Greeting=Bonjour

Die Textdatei kann mithilfe von ResGen.exe in der Befehlszeile wie folgt in eine binärressourcendatei konvertiert werden:

resgen ExampleResources.fr-FR.txt ExampleResources.fr-FR.resources

Die Binärressourcendatei sollte dann mithilfe von Assemblylinker in eine Assembly kompiliert und in das Unterverzeichnis "fr-FR" des App-Verzeichnisses eingefügt werden, indem sie den folgenden Befehl ausgibt:

al /t:lib /embed:ExampleResources.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll

Im folgenden Beispiel wird der ausführbare Code bereitgestellt, der die aktuelle Kultur festlegt, zur Eingabe des Benutzernamens auffordert und eine lokalisierte Zeichenfolge anzeigt.

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

[assembly: NeutralResourcesLanguageAttribute("en")]
public class Example
{
    public static void Main()
    {
        // Select the current culture randomly to test resource fallback.
        string[] cultures = { "de-DE", "en-us", "fr-FR" };
        Random rnd = new Random();
        int index = rnd.Next(0, cultures.Length);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures[index]);
        Console.WriteLine("The current culture is {0}",
                          CultureInfo.CurrentUICulture.Name);

        // Retrieve the resource.
        ResourceManager rm = new ResourceManager("ExampleResources",
                                                 typeof(Example).Assembly);
        string greeting = rm.GetString("Greeting");

        Console.Write("Enter your name: ");
        string name = Console.ReadLine();
        Console.WriteLine("{0} {1}!", greeting, name);
    }
}
Imports System.Globalization
Imports System.Resources
Imports System.Threading 

<Assembly:NeutralResourcesLanguageAttribute("en")>

Module Example
   Public Sub Main()
      ' Select the current culture randomly to test resource fallback.
      Dim cultures() As String = { "de-DE", "en-us", "fr-FR" }
      Dim rnd As New Random()
      Dim index As Integer = rnd.Next(0, cultures.Length)
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultures(index))      
      Console.WriteLine("The current culture is {0}", 
                        CultureInfo.CurrentUICulture.Name)       

      ' Retrieve the resource.
      Dim rm As New ResourceManager("ExampleResources" , GetType(Example).Assembly)
      Dim greeting As String = rm.GetString("Greeting")
      
      Console.Write("Enter your name: ")
      Dim name As String = Console.ReadLine()
      Console.WriteLine("{0} {1}", greeting, name)
   End Sub
End Module

Sie kann mithilfe des folgenden Befehls in Visual Basic kompiliert werden:

vbc Example.vb /resource:ExampleResources.resources

oder mit dem folgenden Befehl in C#:

csc Example.cs /resource:ExampleResources.resources