System.Resources.NeutralResourcesLanguageAttribute-klasse

Opmerking

In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.

In desktop-apps informeert het NeutralResourcesLanguageAttribute kenmerk de resourcemanager van de standaardcultuur van een app en de locatie van de resources. Resources worden standaard ingesloten in de hoofd-app-assembly en u kunt het kenmerk als volgt gebruiken. Deze instructie geeft aan dat engels (Verenigde Staten) de standaardcultuur van de app is.

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

U kunt ook het NeutralResourcesLanguageAttribute kenmerk gebruiken om aan te geven waar ResourceManager de resources van de standaardcultuur kunnen worden gevonden door een UltimateResourceFallbackLocation opsommingswaarde op te geven in de kenmerkinstructie. Dit wordt meestal gedaan om aan te geven dat de resources zich in een satellietassembly bevinden. De volgende instructie geeft bijvoorbeeld aan dat Engels (Verenigde Staten) de standaard- of neutrale cultuur van de app is en dat de resources zich in een satellietassembly bevinden. Het ResourceManager object zoekt deze in een submap met de naam en-US.

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

Hint

U wordt aangeraden altijd het NeutralResourcesLanguageAttribute kenmerk te gebruiken om de standaardcultuur van uw app te definiëren.

Het kenmerk voert twee rollen uit:

  • Als de standaardcultuurbronnen zijn ingesloten in de hoofdassembly van de app en ResourceManager resources moeten ophalen die tot dezelfde cultuur behoren als de standaardcultuur, worden de ResourceManager resources die zich in de hoofdassembly bevinden, automatisch gebruikt in plaats van te zoeken naar een satellietassembly. Hierdoor wordt de gebruikelijke assembly-probe overgeslagen, worden de zoekprestaties voor de eerste resource die u laadt verbeterd, en kan uw werkset worden verminderd. Zie Resources verpakken en implementeren voor het proces ResourceManager dat wordt gebruikt om te testen op resourcebestanden.

  • Als de resources van de standaardcultuur zich in een satellietassembly bevinden in plaats van in de hoofd-app-assembly, specificeert het NeutralResourcesLanguageAttribute kenmerk de cultuur en de map waaruit de runtime de resources kan laden.

Windows 8.x Store-apps

In Windows 8.x Store-apps waarvan de resources worden geladen en opgehaald met behulp van de ResourceManager klasse, definieert het NeutralResourcesLanguageAttribute kenmerk de neutrale cultuur waarvan de resources worden gebruikt in het geval van een mislukte test. De locatie van de resources wordt niet opgegeven. ResourceManager Standaard wordt het PRI-bestand (Package Resource Index) van de app gebruikt om de resources van de standaardcultuur te vinden. De neutrale cultuur die door het NeutralResourcesLanguageAttribute kenmerk wordt gedefinieerd, wordt toegevoegd aan het einde van de gebruikersinterfacetaallijst om dit effect te simuleren.

Als u resources laadt en ophaalt met behulp van deWindows Runtime Windows.ApplicationModel.Resources.ResourceLoader-klasse of de typen in de windows.ApplicationModel.Resources.Core-naamruimte , wordt het NeutralResourcesLanguageAttribute kenmerk genegeerd.

Voorbeelden

In het volgende voorbeeld wordt een eenvoudige 'Hallo wereld'-app gebruikt om het gebruik van het NeutralResourcesLanguageAttribute kenmerk te illustreren om een standaard- of terugvalcultuur te definiëren. Hiervoor moeten afzonderlijke bronbestanden worden gemaakt voor de Engelse culturen (en), Engels (Verenigde Staten) (en-US) en Frans (Frankrijk) (fr-FR). Hieronder ziet u de inhoud van een tekstbestand met de naam ExampleResources.txt voor de Engelse cultuur.

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

Als u het resourcebestand in een app wilt gebruiken, moet u de resourcebestandsgenerator (Resgen.exe) gebruiken om het bestand als volgt te converteren van de tekstindeling (.txt) naar een binaire indeling (.resources):

resgen ExampleResources.txt

Wanneer de app is gecompileerd, wordt het binaire resourcebestand ingesloten in de hoofd-app-assembly.

Hieronder ziet u de inhoud van een tekstbestand met de naam ExampleResources.en-US.txt dat bronnen biedt voor de Engelse cultuur (Verenigde Staten).

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

Het tekstbestand kan als volgt worden geconverteerd naar een binair resources-bestand met behulp van de resourcebestandgenerator (ResGen.exe) op de opdrachtregel:

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

Het binaire bronbestand moet vervolgens worden gecompileerd in een assembly met behulp van Assembly Linker (Al.exe) en in de en-US submap van de app-map worden geplaatst door de volgende opdracht uit te geven:

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

Hieronder ziet u de inhoud van een tekstbestand met de naam ExampleResources.fr-FR.txt dat bronnen biedt voor de Franse cultuur (Frankrijk).

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

Het tekstbestand kan als volgt worden geconverteerd naar een binair resourcebestand met behulp van ResGen.exe op de opdrachtregel:

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

Het binaire resourcesbestand moet vervolgens worden gecompileerd in een assembly met behulp van Assembly Linker en in de fr-FR-submap van de app-map worden geplaatst door het volgende commando in te voeren:

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

In het volgende voorbeeld ziet u de uitvoerbare code waarmee de huidige cultuur wordt ingesteld, de naam van de gebruiker wordt gevraagd en een gelokaliseerde tekenreeks wordt weergegeven.

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

Deze kan worden gecompileerd met behulp van de volgende opdracht in Visual Basic:

vbc Example.vb /resource:ExampleResources.resources

of met behulp van de volgende opdracht in C#:

csc Example.cs /resource:ExampleResources.resources