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 Haupt-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 finden kann, indem Sie einen UltimateResourceFallbackLocation Enumerationswert in der Attributdeklaration angeben. Dies geschieht am häufigsten, um anzugeben, dass sich die Ressourcen in einer Satellitenassembly befinden. Die folgende Anweisung gibt z. B. an, dass Englisch (USA) die Standard- oder neutrale Kultur der App ist und dass sich ihre Ressourcen in einer Satellitenassembly befinden. Das ResourceManager Objekt sucht sie in einem Unterverzeichnis mit dem Namen 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 Hauptassembly 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 Hauptassembly 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 Hauptassembly der App befinden, gibt das NeutralResourcesLanguageAttribute Attribut die Kultur und das Verzeichnis an, aus dem die Laufzeit die Ressourcen laden kann.

Windows 8.x-Apps aus dem Store

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. Es wird nicht erläutert, wo sich die Ressourcen befinden. Standardmäßig verwendet ResourceManager die PRI-Datei (Package Resource Index) der App, um die Ressourcen der Standardkultur zu lokalisieren. 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 derWindows-Runtime-Klasse "Windows.ApplicationModel.Resources.ResourceLoader " oder der Typen im Windows.ApplicationModel.Resources.Core-Namespace laden und abrufen, wird das NeutralResourcesLanguageAttribute Attribut ignoriert.

Beispiele

Im folgenden Beispiel wird eine einfache "Hello World"-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 Hauptassembly der App 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) in eine Binärressourcendateidatei wie folgt in die Befehlszeile 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 sie den folgenden 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 Assembly Linker in eine Assembly kompiliert und im Unterverzeichnis fr-FR des Anwendungsverzeichnisses abgelegt werden, indem der folgende Befehl ausgeführt wird:

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 {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($"{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