System.Resources.NeutralResourcesLanguageAttribute-klass

Anmärkning

Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.

I skrivbordsappar NeutralResourcesLanguageAttribute informerar attributet resurshanteraren om en apps standardkultur och platsen för dess resurser. Som standard bäddas resurserna in i huvudappsammansättningen och du kan använda attributet på följande sätt. Den här instruktionen anger att engelska (USA) är appens standardkultur.

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

Du kan också använda NeutralResourcesLanguageAttribute attributet för att ange var ResourceManager du kan hitta resurserna i standardkulturen genom att ange ett UltimateResourceFallbackLocation uppräkningsvärde i attribututdraget. Detta görs oftast för att indikera att resurserna finns i en satellitsammansättning. Följande instruktion anger till exempel att engelska (USA) är appens standardkultur eller neutrala kultur och att dess resurser finns i en satellitsammansättning. Objektet ResourceManager söker efter dem i en underkatalog med namnet en-US.

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

Tips/Råd

Vi rekommenderar att du alltid använder NeutralResourcesLanguageAttribute attributet för att definiera standardkulturen för din app.

Attributet utför två roller:

  • Om standardkulturens resurser är inbäddade i appens huvudsammansättning och ResourceManager måste hämta resurser som tillhör samma kultur som standardkulturen, ResourceManager använder automatiskt de resurser som finns i huvudsammansättningen i stället för att söka efter en satellitsammansättning. Detta kringgår den vanliga sammansättningsavsökningen, förbättrar uppslagsprestandan för den första resursen du läser in och kan minska din arbetsuppsättning. Se Paketera och distribuera resurser för den process ResourceManager som används för att söka efter resursfiler.

  • Om standardkulturens resurser finns i en satellitsammansättning i stället för i huvudappsammansättningen anger NeutralResourcesLanguageAttribute attributet kulturen och katalogen som körningen kan läsa in resurserna från.

Windows 8.x Store-appar

I Windows 8.x Store-appar, vars resurser läses in och hämtas med hjälp av ResourceManager-klassen, definierar NeutralResourcesLanguageAttribute-attributet den neutrala kulturen vars resurser används vid en misslyckad sond. Den anger inte platsen för resurserna. Som standard ResourceManager använder appens PRI-fil (Package Resource Index) för att hitta resurserna i standardkulturen. Den neutrala kultur som definieras av NeutralResourcesLanguageAttribute attributet läggs till i slutet av UI-språklistan för att simulera den här effekten.

Om du läser in och hämtar resurser med hjälp av windowsruntime-klassen Windows.ApplicationModel.Resources.ResourceLoader eller typerna i namnområdet NeutralResourcesLanguageAttribute ignoreras attributet.

Exempel

I följande exempel används en enkel "Hello World"-app för att illustrera användningen av NeutralResourcesLanguageAttribute attributet för att definiera en standardkultur eller återställningskultur. Det kräver skapandet av separata resursfiler för de engelska (en), engelska (USA) (en-US), och franska (Frankrike) (fr-FR) kulturer. Följande visar innehållet i en textfil med namnet ExampleResources.txt för den engelska kulturen.

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

Om du vill använda resursfilen i en app måste du använda resursfilgeneratorn (Resgen.exe) för att konvertera filen från dess textformat (.txt) till ett binärt format (.resources) enligt följande:

resgen ExampleResources.txt

När appen kompileras bäddas den binära resursfilen in i huvudappsammansättningen.

Följande visar innehållet i en textfil med namnet ExampleResources.en-US.txt som tillhandahåller resurser för den engelska kulturen (USA).

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

Textfilen kan konverteras till en binär resursfil med hjälp av resursfilgeneratorn (ResGen.exe) på kommandoraden enligt följande:

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

Den binära resursfilen ska sedan kompileras till en sammansättning med hjälp av Assembly Linker (Al.exe) och placeras i underkatalogen en-US i appkatalogen genom att följande kommando utfärdas:

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

Följande visar innehållet i en textfil med namnet ExampleResources.fr-FR.txt som tillhandahåller resurser för den franska kulturen (Frankrike).

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

Textfilen kan konverteras till en binär resursfil med hjälp av ResGen.exe på kommandoraden enligt följande:

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

Filen med binära resurser ska sedan kompileras till en sammansättning med hjälp av Assembly Linker och placeras i underkatalogen fr-FR i appkatalogen genom att följande kommando utfärdas:

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

I följande exempel visas den körbara kod som anger den aktuella kulturen, frågar efter användarens namn och visar en lokaliserad sträng.

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

Det kan kompileras med hjälp av följande kommando i Visual Basic:

vbc Example.vb /resource:ExampleResources.resources

eller med hjälp av följande kommando i C#:

csc Example.cs /resource:ExampleResources.resources