System.Resources.NeutralResourcesLanguageAttribute, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

W aplikacjach klasycznych NeutralResourcesLanguageAttribute atrybut informuje menedżera zasobów o domyślnej kulturze aplikacji i lokalizacji jej zasobów. Domyślnie zasoby są osadzone w głównym zestawie aplikacji i można użyć atrybutu w następujący sposób. Ta instrukcja określa, że angielski (Stany Zjednoczone) jest kulturą domyślną aplikacji.

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

Można również użyć atrybutu NeutralResourcesLanguageAttribute , aby wskazać, gdzie ResourceManager można znaleźć zasoby domyślnej kultury, podając UltimateResourceFallbackLocation wartość wyliczenia w instrukcji atrybutu. Jest to najczęściej wykonywane, aby wskazać, że zasoby znajdują się w zestawie satelitarnym. Na przykład poniższa instrukcja określa, że angielski (Stany Zjednoczone) jest domyślną lub neutralną kulturą aplikacji i że jej zasoby znajdują się w zestawie satelitarnym. Obiekt ResourceManager będzie szukać ich w podkatalogu o nazwie en-US.

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

Napiwek

Zalecamy, aby zawsze używać atrybutu NeutralResourcesLanguageAttribute do definiowania domyślnej kultury aplikacji.

Atrybut wykonuje dwie role:

  • Jeśli zasoby kultury domyślnej są osadzone w głównym zestawie aplikacji i ResourceManager muszą pobierać zasoby należące do tej samej kultury co kultura domyślna, ResourceManager automatycznie używa zasobów znajdujących się w głównym zestawie zamiast wyszukiwania zestawu satelitarnego. To pomija zwykłą sondę zestawu, poprawia wydajność wyszukiwania dla pierwszego załadowanych zasobów i może zmniejszyć zestaw roboczy. Zobacz Tworzenie pakietów i wdrażanie zasobów dla procesu ResourceManager używanego do sondowania plików zasobów.

  • Jeśli zasoby kultury domyślnej znajdują się w zestawie satelitarnym, a nie w głównym zestawie aplikacji, atrybut określa kulturę i katalog, NeutralResourcesLanguageAttribute z którego środowisko uruchomieniowe może załadować zasoby.

Aplikacje ze Sklepu Windows 8.x

W aplikacjach ze Sklepu Windows 8.x, których zasoby są ładowane i pobierane przy użyciu ResourceManager klasy, atrybut definiuje neutralną kulturę, NeutralResourcesLanguageAttribute której zasoby są używane w przypadku nieudanej sondy. Nie określa lokalizacji zasobów. Domyślnie ResourceManager do lokalizowania zasobów domyślnej kultury jest używany plik indeksu zasobów pakietu aplikacji (PRI). Neutralna kultura zdefiniowana przez NeutralResourcesLanguageAttribute atrybut jest dodawana na końcu listy języków interfejsu użytkownika w celu symulowania tego efektu.

Jeśli załadujesz i pobierzesz zasoby przy użyciu klasy środowisko wykonawcze systemu Windows Windows.ApplicationModel.Resources.ResourceLoader lub typów w przestrzeni nazw Windows.ApplicationModel.Resources.Core, NeutralResourcesLanguageAttribute atrybut zostanie zignorowany.

Przykłady

W poniższym przykładzie użyto prostej aplikacji "Hello World", aby zilustrować użycie atrybutu NeutralResourcesLanguageAttribute do zdefiniowania kultury domyślnej lub rezerwowej. Wymaga to utworzenia oddzielnych plików zasobów dla kultur angielskich (en), angielski (Stany Zjednoczone) (en-US) i francuski (Francja) (fr-FR). Poniżej przedstawiono zawartość pliku tekstowego o nazwie ExampleResources.txt dla kultury angielskiej.

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

Aby użyć pliku zasobów w aplikacji, należy użyć generatora plików zasobów (Resgen.exe), aby przekonwertować plik z formatu tekstowego (.txt) na format binarny (.resources) w następujący sposób:

resgen ExampleResources.txt

Po skompilowaniu aplikacji plik zasobu binarnego zostanie osadzony w głównym zestawie aplikacji.

Poniżej przedstawiono zawartość pliku tekstowego o nazwie ExampleResources.en-US.txt, który udostępnia zasoby dla kultury języka angielskiego (Stany Zjednoczone).

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

Plik tekstowy można przekonwertować na plik zasobów binarnych przy użyciu generatora plików zasobów (ResGen.exe) w wierszu polecenia w następujący sposób:

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

Plik zasobu binarnego powinien następnie zostać skompilowany w zestawie przy użyciu konsolidatora zestawów (Al.exe) i umieszczony w podkatalogu en-US katalogu aplikacji, wydając następujące polecenie:

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

Poniżej przedstawiono zawartość pliku tekstowego o nazwie ExampleResources.fr-FR.txt, który dostarcza zasoby dla kultury francuskiej (Francji).

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

Plik tekstowy można przekonwertować na plik zasobu binarnego przy użyciu ResGen.exe w wierszu polecenia w następujący sposób:

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

Plik zasobów binarnych powinien następnie zostać skompilowany do zestawu przy użyciu konsolidatora zestawów i umieszczony w podkatalogu fr-FR katalogu aplikacji, wydając następujące polecenie:

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

Poniższy przykład zawiera kod wykonywalny, który ustawia bieżącą kulturę, monituje o nazwę użytkownika i wyświetla zlokalizowany ciąg.

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

Można ją skompilować przy użyciu następującego polecenia w Visual Basic:

vbc Example.vb /resource:ExampleResources.resources

lub za pomocą następującego polecenia w języku C#:

csc Example.cs /resource:ExampleResources.resources