System.Resources.NeutralResourcesLanguageAttribute klasa
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
W aplikacjach klasycznych atrybut NeutralResourcesLanguageAttribute 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że znaleźć zasoby domyślnej kultury, podając wartość wyliczeniową UltimateResourceFallbackLocation 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 wyszuka je w podkatalogu o nazwie en-US.
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
<Assembly:NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)>
Wskazówka
Zalecamy, aby zawsze używać atrybutu NeutralResourcesLanguageAttribute do zdefiniowania domyślnej kultury aplikacji.
Atrybut wykonuje dwie role:
Jeśli zasoby kultury domyślnej są osadzone w głównym zestawie aplikacji, a ResourceManager musi pobrać 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 omija zwykłą sondę montażu, poprawia wydajność wyszukiwania dla pierwszego załadowanego zasobu i może zmniejszyć pamięć roboczą. Zajrzyj do Pakowanie i wdrażanie zasobów, aby uzyskać informacje na temat procesu ResourceManager wykorzystywanego do poszukiwania plików zasobów.
Jeśli zasoby kultury domyślnej znajdują się w zestawie satelitarnym, a nie w głównym zestawie aplikacji, atrybut NeutralResourcesLanguageAttribute określa kulturę i katalog, 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 klasy ResourceManager, atrybut NeutralResourcesLanguageAttribute definiuje neutralną kulturę, której zasoby są używane w przypadku nieudanego wyszukiwania. Nie określa lokalizacji zasobów. Domyślnie ResourceManager używa pliku indeksu zasobów pakietu aplikacji (PRI), aby zlokalizować zasoby kultury domyślnej. Neutralna kultura zdefiniowana przez atrybut NeutralResourcesLanguageAttribute jest dodawana na końcu listy języków interfejsu użytkownika, aby zasymulować ten efekt.
W przypadku ładowania i pobierania zasobów przy użyciu Windows Runtime klasyWindows.ApplicationModel.Resources.ResourceLoader lub typów w przestrzeni nazw Windows.ApplicationModel.Resources.Core atrybut NeutralResourcesLanguageAttribute jest ignorowany.
Przykłady
W poniższym przykładzie użyto prostej aplikacji "Hello World", aby zilustrować użycie atrybutu NeutralResourcesLanguageAttribute do zdefiniowania domyślnej lub rezerwowej kultury. 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ć Generator plików zasobów (Resgen.exe), aby przekonwertować plik z jego tekstu (.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 angielskiej (Stanów Zjednoczonych).
# 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 do zestawu przy użyciu Assembly Linker (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ę, prosi o nazwę użytkownika i wyświetla zlokalizowany ciąg tekstowy.
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
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