ResourceManager Klasa

Definicja

Reprezentuje Menedżera zasobów, który zapewnia wygodny dostęp do zasobów specyficznych dla kultury w czasie wykonywania.Represents a resource manager that provides convenient access to culture-specific resources at run time.

public ref class ResourceManager
public class ResourceManager
[System.Serializable]
public class ResourceManager
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ResourceManager
type ResourceManager = class
[<System.Serializable>]
type ResourceManager = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ResourceManager = class
Public Class ResourceManager
Dziedziczenie
ResourceManager
Pochodne
Atrybuty

Przykłady

Poniższy przykład ilustruje sposób użycia jawnej kultury i niejawnej obecnej kultury interfejsu użytkownika do uzyskiwania zasobów ciągów z zestawu głównego i zestawu satelickiego.The following example demonstrates how to use an explicit culture and the implicit current UI culture to obtain string resources from a main assembly and a satellite assembly. Aby uzyskać więcej informacji, zobacz sekcję "lokalizacje katalogów dla zestawów satelickich, które nie są zainstalowane w globalnej pamięci podręcznej zestawów" w temacie Tworzenie zestawów satelickich .For more information, see the "Directory Locations for Satellite Assemblies Not Installed in the Global Assembly Cache" section of the Creating Satellite Assemblies topic.

Aby uruchomić ten przykład:To run this example:

  1. W katalogu aplikacji Utwórz plik o nazwie rmc.txt zawierający następujące ciągi zasobów:In the app directory, create a file named rmc.txt that contains the following resource strings:

    
    day=Friday
    year=2006
    holiday="Cinco de Mayo"
    
    
  2. Użyj generatora plików zasobów do wygenerowania pliku zasobów RMC. resources z pliku wejściowego rmc.txt w następujący sposób:Use the Resource File Generator to generate the rmc.resources resource file from the rmc.txt input file as follows:

    resgen rmc.txt
    
  3. Utwórz podkatalog katalogu aplikacji i nadaj mu nazwę "es-MX".Create a subdirectory of the app directory and name it "es-MX". Jest to nazwa kultury zestawu satelickiego, który zostanie utworzony w następnych trzech krokach.This is the culture name of the satellite assembly that you will create in the next three steps.

  4. Utwórz plik o nazwie rmc.es-MX.txt w katalogu es-MX zawierającym następujące ciągi zasobów:Create a file named rmc.es-MX.txt in the es-MX directory that contains the following resource strings:

    
    day=Viernes
    year=2006
    holiday="Cinco de Mayo"
    
    
  5. Użyj generatora plików zasobów do wygenerowania pliku zasobów RMC.es-MX. resources z pliku wejściowego rmc.es-MX.txt w następujący sposób:Use the Resource File Generator to generate the rmc.es-MX.resources resource file from the rmc.es-MX.txt input file as follows:

    resgen rmc.es-MX.txt
    
  6. Załóżmy, że nazwa pliku dla tego przykładu to RMC. vb lub RMC. cs.Assume that the filename for this example is rmc.vb or rmc.cs. Skopiuj następujący kod źródłowy do pliku.Copy the following source code into a file. Następnie skompiluj go i Osadź główny plik zasobów zestawu, RMC. resources, w zestawie wykonywalnym.Then compile it and embed the main assembly resource file, rmc.resources, in the executable assembly. Jeśli używasz kompilatora Visual Basic, składnia jest następująca:If you are using the Visual Basic compiler, the syntax is:

    vbc rmc.vb /resource:rmc.resources
    

    Odpowiadająca składnia kompilatora C# to:The corresponding syntax for the C# compiler is:

    csc /resource:rmc.resources rmc.cs
    
  7. Użyj konsolidatora zestawu do utworzenia zestawu satelickiego.Use the Assembly Linker to create a satellite assembly. Jeśli podstawową nazwą aplikacji jest RMC, nazwa zestawu satelickiego musi być rmc.resources.dll.If the base name of the app is rmc, the satellite assembly name must be rmc.resources.dll. Zestaw satelicki powinien zostać utworzony w katalogu es-MX.The satellite assembly should be created in the es-MX directory. Jeśli es-MX jest bieżącym katalogiem, użyj tego polecenia:If es-MX is the current directory, use this command:

    al /embed:rmc.es-MX.resources /c:es-MX /out:rmc.resources.dll
    
  8. Uruchom rmc.exe, aby uzyskać i wyświetlić osadzone ciągi zasobów.Run rmc.exe to obtain and display the embedded resource strings.

using System;
using System.Resources;
using System.Reflection;
using System.Threading;
using System.Globalization;

class Example
{
    public static void Main()
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

    // Create a resource manager.
    ResourceManager rm = new ResourceManager("rmc",
                             typeof(Example).Assembly);

    Console.WriteLine("Obtain resources using the current UI culture.");

    // Get the resource strings for the day, year, and holiday
    // using the current UI culture.
    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

    // Obtain the es-MX culture.
    CultureInfo ci = new CultureInfo("es-MX");

    Console.WriteLine("Obtain resources using the es-MX culture.");

   // Get the resource strings for the day, year, and holiday
   // using the specified culture.
    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);
// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and
// uncomment the following 4 code statements:
// ----------------------------------------------------------------
// Set the current UI culture to "es-MX" (Spanish-Mexico).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday
// using the current UI culture. Use those strings to
// display a message.
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}
/*
This example displays the following output:

   Obtain resources using the current UI culture.
   "5th of May" will occur on Friday in 2006.

   Obtain resources using the es-MX culture.
   "Cinco de Mayo" will occur on Viernes in 2006.
*/
Imports System.Resources
Imports System.Reflection
Imports System.Threading
Imports System.Globalization

Class Example
    Public Shared Sub Main() 
        Dim day As String
        Dim year As String
        Dim holiday As String
        Dim celebrate As String = "{0} will occur on {1} in {2}." & vbCrLf

        ' Create a resource manager. 
        Dim rm As New ResourceManager("rmc", GetType(Example).Assembly)

        Console.WriteLine("Obtain resources using the current UI culture.")

        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. 
        day = rm.GetString("day")
        year = rm.GetString("year")
        holiday = rm.GetString("holiday")
        Console.WriteLine(celebrate, holiday, day, year)

        ' Obtain the es-MX culture.
        Dim ci As New CultureInfo("es-MX")

        Console.WriteLine("Obtain resources using the es-MX culture.")

        ' Get the resource strings for the day, year, and holiday 
        ' using the es-MX culture.  
        day = rm.GetString("day", ci)
        year = rm.GetString("year", ci)
        holiday = rm.GetString("holiday", ci)

        ' ---------------------------------------------------------------
        ' Alternatively, comment the preceding 3 code statements and 
        ' uncomment the following 4 code statements:
        ' ----------------------------------------------------------------
        ' Set the current UI culture to "es-MX" (Spanish-Mexico).
        '    Thread.CurrentThread.CurrentUICulture = ci
        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. 
        '    day  = rm.GetString("day")
        '    year = rm.GetString("year")
        '    holiday = rm.GetString("holiday")
        ' ---------------------------------------------------------------

        ' Regardless of the alternative that you choose, display a message 
        ' using the retrieved resource strings.
        Console.WriteLine(celebrate, holiday, day, year)
    End Sub 
End Class
' This example displays the following output:
'Obtain resources using the current UI culture.
'"5th of May" will occur on Friday in 2006.
'
'Obtain resources using the es-MX culture.
'"Cinco de Mayo" will occur on Viernes in 2006.

Uwagi

Ważne

Wywoływanie metod z tej klasy z niezaufanymi danymi stanowi zagrożenie bezpieczeństwa.Calling methods from this class with untrusted data is a security risk. Wywołaj metody z tej klasy tylko przy użyciu zaufanych danych.Call the methods from this class only with trusted data. Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności danych.For more information, see Data Validation.

ResourceManagerKlasa pobiera zasoby z binarnego pliku Resources, który jest osadzony w zestawie lub z autonomicznego pliku Resources.The ResourceManager class retrieves resources from a binary .resources file that is embedded in an assembly or from a standalone .resources file. Jeśli aplikacja została zlokalizowana, a zlokalizowane zasoby zostały wdrożone w zestawach satelickich, wyszukiwane są zasoby specyficzne dla kultury, a także rezerwy zasobów, gdy zlokalizowany zasób nie istnieje i obsługuje serializację zasobów.If an app has been localized and localized resources have been deployed in satellite assemblies, it looks up culture-specific resources, provides resource fallback when a localized resource does not exist, and supports resource serialization.

Aby uzyskać więcej informacji na temat tworzenia zasobów i zarządzania nimi w aplikacjach klasycznych i aplikacjach ze sklepu Windows 8. x, zobacz następujące sekcje:For more information about creating and managing resources in desktop apps and Windows 8.x Store apps, see the following sections:

Aplikacje pulpituDesktop Apps

W przypadku aplikacji klasycznych ResourceManager Klasa pobiera zasoby z plików zasobów binarnych (. resources).For desktop apps, the ResourceManager class retrieves resources from binary resource (.resources) files. Zazwyczaj kompilator języka lub konsolidator zestawu (AL.exe) osadza te pliki zasobów w zestawie.Typically, a language compiler or the Assembly Linker (AL.exe) embeds these resource files in an assembly. Można również użyć ResourceManager obiektu do pobierania zasobów bezpośrednio z pliku Resources, który nie jest osadzony w zestawie, wywołując CreateFileBasedResourceManager metodę.You can also use a ResourceManager object to retrieve resources directly from a .resources file that is not embedded in an assembly, by calling the CreateFileBasedResourceManager method.

Przestroga

Używanie autonomicznych plików Resources w aplikacji ASP.NET spowoduje przerwanie wdrożenia polecenia XCOPY, ponieważ zasoby pozostają zablokowane, dopóki nie zostaną jawnie wydane przez ReleaseAllResources metodę.Using standalone .resources files in an ASP.NET app will break XCOPY deployment, because the resources remain locked until they are explicitly released by the ReleaseAllResources method. Jeśli chcesz wdrożyć zasoby z aplikacjami ASP.NET, należy skompilować pliki resources do zestawów satelickich.If you want to deploy resources with your ASP.NET apps, you should compile your .resources files into satellite assemblies.

W aplikacji opartej na zasobach jeden plik resources zawiera zasoby domyślnej kultury, których zasoby są używane, jeśli nie można odnaleźć zasobów specyficznych dla kultury.In a resource-based app, one .resources file contains the resources of the default culture whose resources are used if no culture-specific resources can be found. Jeśli na przykład domyślna kultura aplikacji jest angielski (pl), w przypadku, gdy nie można znaleźć zlokalizowanych zasobów dla określonej kultury, takiej jak angielski (Stany Zjednoczone) (EN-US) lub francuski (Francja), należy użyć zasobów języka angielskiego.For example, if an app's default culture is English (en), the English language resources are used whenever localized resources cannot be found for a specific culture, such as English (United States) (en-US) or French (France) (fr-FR). Zazwyczaj zasoby dla kultury domyślnej są osadzone w zestawie aplikacji głównej, a zasoby dla innych zlokalizowanych kultur są osadzone w zestawach satelickich.Typically, the resources for the default culture are embedded in the main app assembly, and resources for other localized cultures are embedded in satellite assemblies. Zestawy satelickie zawierają tylko zasoby.Satellite assemblies contain only resources. Mają one taką samą nazwę pliku głównego jak główny zestaw i rozszerzenie .resources.dll.They have the same root file name as the main assembly and an extension of .resources.dll. W przypadku aplikacji, których zestawy nie są zarejestrowane w globalnej pamięci podręcznej zestawów, zestawy satelickie są przechowywane w podkatalogu aplikacji, którego nazwa odpowiada kulturze zestawu.For apps whose assemblies are not registered in the global assembly cache, satellite assemblies are stored in an app subdirectory whose name corresponds to the assembly's culture.

Tworzenie zasobówCreating Resources

Podczas tworzenia aplikacji opartej na zasobach przechowywane są informacje o zasobach w plikach tekstowych (pliki z rozszerzeniem txt lub. restext) lub pliki XML (pliki z rozszerzeniem resx).When you develop a resource-based app, you store resource information in text files (files that have a .txt or .restext extension) or XML files (files that have a .resx extension). Następnie można skompilować pliki tekstowe lub XML za pomocą generatora plików zasobów (Resgen.exe) , aby utworzyć binarny plik resources.You then compile the text or XML files with the Resource File Generator (Resgen.exe) to create a binary .resources file. Następnie można osadzić utworzony plik resources w pliku wykonywalnym lub bibliotece przy użyciu opcji kompilatora, takiej jak w /resources przypadku kompilatorów C# i Visual Basic, lub osadzić go w zestawie satelickim za pomocą konsolidatora zestawu (AI.exe).You can then embed the resulting .resources file in an executable or library by using a compiler option such as /resources for the C# and Visual Basic compilers, or you can embed it in a satellite assembly by using the Assembly Linker (AI.exe). Jeśli dołączysz plik resx w projekcie programu Visual Studio, program Visual Studio obsługuje kompilację i osadzanie domyślnych i zlokalizowanych zasobów automatycznie w ramach procesu kompilacji.If you include a .resx file in your Visual Studio project, Visual Studio handles the compilation and embedding of default and localized resources automatically as part of the build process.

W idealnym przypadku należy utworzyć zasoby dla każdego języka obsługiwanego przez aplikację lub co najmniej dla zrozumiałego podzbioru każdego języka.Ideally, you should create resources for every language your app supports, or at least for a meaningful subset of each language. Nazwy plików binarnych. resources są zgodne z konwencją nazewnictwa basename. cultureName. resources, gdzie basename jest nazwą aplikacji lub nazwą klasy, w zależności od żądanego poziomu szczegółowości.The binary .resources file names follow the naming convention basename.cultureName.resources, where basename is the name of the app or the name of a class, depending on the level of detail you want. CultureInfo.NameWłaściwość służy do określania kulturyname.The CultureInfo.Name property is used to determine cultureName. Zasób domyślnej kultury aplikacji powinien mieć nazwę basename. resources.A resource for the app's default culture should be named basename.resources.

Załóżmy na przykład, że zestaw zawiera kilka zasobów w pliku zasobów, który ma nazwę podstawową moje zasoby.For example, suppose that an assembly has several resources in a resource file that has the base name MyResources. Te pliki zasobów powinny mieć takie nazwy, jak moje zasoby. ja-JP. zasoby dla kultury Japonia (japoński), moje zasoby. de. resources dla kultury niemieckiej, moje zasoby. zh-CHS. resources dla kultury chińskiej uproszczonej i MyResources.fr-. resources dla kultury francuskiej (Belgia).These resource files should have names such as MyResources.ja-JP.resources for the Japan (Japanese) culture, MyResources.de.resources for the German culture, MyResources.zh-CHS.resources for the simplified Chinese culture, and MyResources.fr-BE.resources for the French (Belgium) culture. Domyślny plik zasobów powinien mieć nazwę moje zasoby. resources.The default resource file should be named MyResources.resources. Pliki zasobów specyficzne dla kultury są zwykle spakowane w zestawach satelickich dla każdej kultury.The culture-specific resource files are commonly packaged in satellite assemblies for each culture. Domyślny plik zasobów powinien być osadzony w głównym zestawie aplikacji.The default resource file should be embedded in the app's main assembly.

Należy zauważyć, że konsolidator zestawu umożliwia oznaczenie zasobów jako prywatnych, ale zawsze należy oznaczyć je jako publiczne, aby mogły być dostępne dla innych zestawów.Note that Assembly Linker allows resources to be marked as private, but you should always mark them as public so they can be accessed by other assemblies. (Ponieważ zestaw satelicki nie zawiera kodu, zasoby oznaczone jako prywatne są niedostępne dla aplikacji za pomocą żadnego mechanizmu).(Because a satellite assembly contains no code, resources that are marked as private are unavailable to your app through any mechanism.)

Aby uzyskać więcej informacji na temat tworzenia, pakowania i wdrażania zasobów, zobacz artykuły Tworzenie plików zasobów, Tworzenie zestawów satelickichi pakowanie i wdrażanie zasobów.For more information about creating, packaging, and deploying resources, see the articles Creating Resource Files, Creating Satellite Assemblies, and Packaging and Deploying Resources.

Utworzenie wystąpienia obiektu ResourceManagerInstantiating a ResourceManager Object

ResourceManagerObiekt, który pobiera zasoby z osadzonego pliku Resources, wywołuje jeden z przeciążeń konstruktora klasy.You instantiate a ResourceManager object that retrieves resources from an embedded .resources file by calling one of its class constructor overloads. To ściśle Couples ResourceManager obiekt z określonym plikiem Resources i ze wszystkimi skojarzonymi zlokalizowanymi plikami Resources w zestawach satelickich.This tightly couples a ResourceManager object with a particular .resources file and with any associated localized .resources files in satellite assemblies.

Dwa najczęściej wywoływane konstruktory to:The two most commonly called constructors are:

  • ResourceManager(String, Assembly) wyszukuje zasoby na podstawie dwóch informacji, które podasz: nazwa podstawowa pliku Resources i zestaw, w którym znajduje się plik default. resources.ResourceManager(String, Assembly) looks up resources based on two pieces of information that you supply: the base name of the .resources file, and the assembly in which the default .resources file resides. Nazwa podstawowa zawiera przestrzeń nazw i nazwę główną pliku Resources bez jego kultury lub rozszerzenia.The base name includes the namespace and root name of the .resources file, without its culture or extension. Należy pamiętać, że pliki resources, które są kompilowane z wiersza polecenia zazwyczaj nie zawierają nazwy przestrzeni nazw, natomiast pliki zasobów, które są tworzone w środowisku programu Visual Studio, to.Note that .resources files that are compiled from the command line typically do not include a namespace name, whereas .resources files that are created in the Visual Studio environment do. Jeśli na przykład plik zasobów ma nazwę StringResources. resources i ResourceManager Konstruktor jest wywoływany z metody statycznej o nazwie Example.Main , poniższy kod tworzy wystąpienie ResourceManager obiektu, który może pobrać zasoby z pliku Resources:For example, if a resource file is named MyCompany.StringResources.resources and the ResourceManager constructor is called from a static method named Example.Main, the following code instantiates a ResourceManager object that can retrieve resources from the .resources file:

    ResourceManager rm = new ResourceManager("MyCompany.StringResources",
                                             typeof(Example).Assembly);
    
    Dim rm As New ResourceManager("MyCompany.StringResources",
                                  GetType(Example).Assembly)
    
  • ResourceManager(Type) wyszukuje zasoby w zestawach satelickich na podstawie informacji z obiektu typu.ResourceManager(Type) looks up resources in satellite assemblies based on information from a type object. W pełni kwalifikowana nazwa typu odpowiada nazwie podstawowej pliku Resources bez rozszerzenia nazwy pliku.The type's fully qualified name corresponds to the base name of the .resources file without its file name extension. W aplikacjach klasycznych, które są tworzone przy użyciu projektanta zasobów programu Visual Studio, program Visual Studio tworzy klasę otoki, której w pełni kwalifikowana nazwa jest taka sama jak nazwa główna pliku Resources.In desktop apps that are created by using the Visual Studio Resource Designer, Visual Studio creates a wrapper class whose fully qualified name is the same as the root name of the .resources file. Na przykład, jeśli plik zasobu ma nazwę StringResources. resources, a istnieje Klasa otoki o nazwie MyCompany.StringResources , poniższy kod tworzy wystąpienie ResourceManager obiektu, który może pobrać zasoby z pliku Resources:For example, if a resource file is named MyCompany.StringResources.resources and there is a wrapper class named MyCompany.StringResources, the following code instantiates a ResourceManager object that can retrieve resources from the .resources file:

    ResourceManager rm = new ResourceManager(typeof(MyCompany.StringResources));
    
    Dim rm As New ResourceManager(GetType(MyCompany.StringResources))
    

Jeśli nie można znaleźć odpowiednich zasobów, wywołanie konstruktora tworzy prawidłowy ResourceManager obiekt.If the appropriate resources cannot be found, the constructor call creates a valid ResourceManager object. Jednak próba pobrania zasobu zgłasza MissingManifestResourceException wyjątek.However, the attempt to retrieve a resource throws a MissingManifestResourceException exception. Informacje na temat postępowania z wyjątkiem znajdują się w sekcji Obsługa wyjątków MissingManifestResourceException i MissingSatelliteAssembly w dalszej części tego artykułu.For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssembly Exceptions section later in this article.

Poniższy przykład pokazuje, jak utworzyć wystąpienie ResourceManager obiektu.The following example shows how to instantiate a ResourceManager object. Zawiera kod źródłowy dla pliku wykonywalnego o nazwie ShowTime.exe.It contains the source code for an executable named ShowTime.exe. Zawiera również następujący plik tekstowy o nazwie Strings.txt zawierający pojedynczy ciąg zasobu TimeHeader :It also includes the following text file named Strings.txt that contains a single string resource, TimeHeader:

TimeHeader=The current time is

Plik wsadowy służy do generowania pliku zasobów i osadzania go w pliku wykonywalnym.You can use a batch file to generate the resource file and embed it into the executable. Oto plik wsadowy do wygenerowania pliku wykonywalnego przy użyciu kompilatora języka C#:Here's the batch file to generate an executable by using the C# compiler:

resgen strings.txt
csc ShowTime.cs /resource:strings.resources

W przypadku kompilatora Visual Basic można użyć następującego pliku wsadowego:For the Visual Basic compiler, you can use the following batch file:

resgen strings.txt
vbc ShowTime.vb /resource:strings.resources
using System;
using System.Resources;

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("Strings", 
                               typeof(Example).Assembly);
      string timeString = rm.GetString("TimeHeader");
      Console.WriteLine("{0} {1:T}", timeString, DateTime.Now);   
   }
}
// The example displays output like the following:
//        The current time is 2:03:14 PM
Imports System.Resources

Module Example
   Public Sub Main()
      Dim rm As New ResourceManager("Strings", GetType(Example).Assembly)
      Dim timeString As String = rm.GetString("TimeHeader")
      Console.WriteLine("{0} {1:T}", timeString, Date.Now)   
   End Sub
End Module
' The example displays output similar to the following:
'       The current time is 2:03:14 PM

ResourceManager i zasoby specyficzne dla kulturyResourceManager and Culture-Specific Resources

Zlokalizowana aplikacja wymaga wdrożenia zasobów, zgodnie z opisem w artykule pakowanie i wdrażanie zasobów.A localized app requires resources to be deployed, as discussed in the article Packaging and Deploying Resources. Jeśli zestawy są prawidłowo skonfigurowane, Menedżer zasobów określa, które zasoby mają być pobierane na podstawie właściwości bieżącego wątku Thread.CurrentUICulture .If the assemblies are properly configured, the resource manager determines which resources to retrieve based on the current thread's Thread.CurrentUICulture property. (Ta właściwość zwraca również kulturę interfejsu użytkownika bieżącego wątku). Na przykład jeśli aplikacja jest kompilowana z domyślnymi zasobami języka angielskiego w zestawie głównym oraz z francuskim i rosyjskim zasobami języka w dwóch zestawach satelickich, a Thread.CurrentUICulture Właściwość jest ustawiona na fr-fr, Menedżer zasobów pobiera zasoby francuski.(That property also returns the current thread's UI culture.) For example, if an app is compiled with default English language resources in the main assembly and with French and Russian language resources in two satellite assemblies, and the Thread.CurrentUICulture property is set to fr-FR, the resource manager retrieves the French resources.

Właściwość można ustawić CurrentUICulture jawnie lub niejawnie.You can set the CurrentUICulture property explicitly or implicitly. Sposób ustawienia określa sposób, w jaki ResourceManager obiekt pobiera zasoby na podstawie kultury:The way you set it determines how the ResourceManager object retrieves resources based on culture:

  • Jeśli jawnie ustawisz Thread.CurrentUICulture Właściwość na określoną kulturę, Menedżer zasobów zawsze pobiera zasoby dla tej kultury, niezależnie od przeglądarki użytkownika lub języka systemu operacyjnego.If you explicitly set the Thread.CurrentUICulture property to a specific culture, the resource manager always retrieves the resources for that culture, regardless of the user's browser or operating system language. Weź pod uwagę aplikację, która jest skompilowana przy użyciu domyślnych zasobów języka angielskiego i trzech zestawów satelickich, które zawierają zasoby dla języka angielskiego (Stany Zjednoczone), francuski (Francja) i rosyjski (Rosja).Consider an app that is compiled with default English language resources and three satellite assemblies that contain resources for English (United States), French (France), and Russian (Russia). Jeśli CurrentUICulture Właściwość jest ustawiona na fr-fr, ResourceManager obiekt zawsze pobiera zasoby francuski (Francja), nawet jeśli język systemu operacyjnego użytkownika nie jest francuski.If the CurrentUICulture property is set to fr-FR, the ResourceManager object always retrieves the French (France) resources, even if the user's operating system language is not French. Upewnij się, że jest to wymagane zachowanie przed ustawieniem właściwości jawnie.Make sure that this is the desired behavior before you set the property explicitly.

    W aplikacjach ASP.NET należy Thread.CurrentUICulture jawnie ustawić właściwość, ponieważ jest mało prawdopodobne, że ustawienie na serwerze będzie pasować do przychodzących żądań klientów.In ASP.NET apps, you must set the Thread.CurrentUICulture property explicitly, because it is unlikely that the setting on the server will match incoming client requests. Aplikacja ASP.NET może Thread.CurrentUICulture jawnie ustawić właściwość na język akceptowania przeglądarki użytkownika.An ASP.NET app can set the Thread.CurrentUICulture property explicitly to the user's browser accept language.

    Jawne ustawienie Thread.CurrentUICulture właściwości definiuje bieżącą kulturę interfejsu użytkownika dla tego wątku.Explicitly setting the Thread.CurrentUICulture property defines the current UI culture for that thread. Nie ma to wpływu na bieżącą kulturę interfejsu użytkownika innych wątków w aplikacji.It does not affect the current UI culture of any other threads in an app.

  • Można ustawić kulturę interfejsu użytkownika wszystkich wątków w domenie aplikacji, przypisując CultureInfo obiekt reprezentujący tę kulturę do właściwości statycznej CultureInfo.DefaultThreadCurrentUICulture .You can set the UI culture of all threads in an app domain by assigning a CultureInfo object that represents that culture to the static CultureInfo.DefaultThreadCurrentUICulture property.

  • Jeśli nie ustawisz jawnie kultury interfejsu użytkownika i nie zdefiniujesz domyślnej kultury dla bieżącej domeny aplikacji, CultureInfo.CurrentUICulture Właściwość zostanie ustawiona niejawnie przez funkcję systemu Windows GetUserDefaultUILanguage .If you do not explicitly set the current UI culture and you do not define a default culture for the current app domain, the CultureInfo.CurrentUICulture property is set implicitly by the Windows GetUserDefaultUILanguage function. Ta funkcja jest udostępniana przez wielojęzyczny interfejs użytkownika (MUI), który umożliwia użytkownikowi ustawienie języka domyślnego.This function is provided by the Multilingual User Interface (MUI), which enables the user to set the default language. Jeśli język interfejsu użytkownika nie został określony przez użytkownika, domyślnie jest używany język instalowany przez system, który jest językiem zasobów systemu operacyjnego.If the UI language is not set by the user, it defaults to the system-installed language, which is the language of operating system resources.

Poniższy prosty przykład "Hello World" pozwala jawnie określić bieżącą kulturę interfejsu użytkownika.The following simple "Hello world" example sets the current UI culture explicitly. Zawiera ona zasoby dla trzech kultur: angielski (Stany Zjednoczone) lub EN-US, francuski (Francja) lub fr-FR oraz rosyjski (Rosja) lub ru-RU.It contains resources for three cultures: English (United States) or en-US, French (France) or fr-FR, and Russian (Russia) or ru-RU. Zasoby en-US są zawarte w pliku tekstowym o nazwie Greetings.txt:The en-US resources are contained in a text file named Greetings.txt:

HelloString=Hello world!

Zasoby fr-FR są zawarte w pliku tekstowym o nazwie Greetings.fr-FR.txt:The fr-FR resources are contained in a text file named Greetings.fr-FR.txt:

HelloString=Salut tout le monde!

Zasoby ru-RU są zawarte w pliku tekstowym o nazwie Greetings.ru-RU.txt:The ru-RU resources are contained in a text file named Greetings.ru-RU.txt:

HelloString=Всем привет!

Oto kod źródłowy przykładu (przykład. vb dla wersji Visual Basic lub na przykład. cs dla wersji C#):Here's the source code for the example (Example.vb for the Visual Basic version or Example.cs for the C# version):

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Create array of supported cultures
      string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU" };
      Random rnd = new Random();
      int cultureNdx = rnd.Next(0, cultures.Length);
      CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
      ResourceManager rm = new ResourceManager("Greetings", typeof(Example).Assembly);
      try {
         CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
         Thread.CurrentThread.CurrentCulture = newCulture;
         Thread.CurrentThread.CurrentUICulture = newCulture;
         string greeting = String.Format("The current culture is {0}.\n{1}",
                                         Thread.CurrentThread.CurrentUICulture.Name,
                                         rm.GetString("HelloString"));
         Console.WriteLine(greeting);
      }
      catch (CultureNotFoundException e) {
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName);
      }
      finally {
         Thread.CurrentThread.CurrentCulture = originalCulture;
         Thread.CurrentThread.CurrentUICulture = originalCulture;
      }
   }
}
// The example displays output like the following:
//       The current culture is ru-RU.
//       Всем привет!
Imports System.Globalization
Imports System.Resources
Imports System.Threading

Module Example
   Sub Main()
      ' Create array of supported cultures
      Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU" }
      Dim rnd As New Random()
      Dim cultureNdx As Integer = rnd.Next(0, cultures.Length)
      Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
      Dim rm As New ResourceManager("Greetings", GetType(Example).Assembly)
      Try
         Dim newCulture As New CultureInfo(cultures(cultureNdx))
         Thread.CurrentThread.CurrentCulture = newCulture
         Thread.CurrentThread.CurrentUICulture = newCulture
         Dim greeting As String = String.Format("The current culture is {0}.{1}{2}",
                                                Thread.CurrentThread.CurrentUICulture.Name,
                                                vbCrLf, rm.GetString("HelloString"))

         Console.WriteLine(greeting)
      Catch e As CultureNotFoundException
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName)
      Finally
         Thread.CurrentThread.CurrentCulture = originalCulture
         Thread.CurrentThread.CurrentUICulture = originalCulture
      End Try
   End Sub
End Module
' The example displays output like the following:
'       The current culture is ru-RU.
'       Всем привет!

Aby skompilować ten przykład, Utwórz plik wsadowy (. bat) zawierający następujące polecenia i uruchom go z wiersza polecenia.To compile this example, create a batch (.bat) file that contains the following commands and run it from the command prompt. Jeśli używasz języka C#, określ csc zamiast vbc i Example.cs zamiast Example.vb .If you're using C#, specify csc instead of vbc and Example.cs instead of Example.vb.

resgen Greetings.txt
vbc Example.vb /resource:Greetings.resources

resgen Greetings.fr-FR.txt
Md fr-FR
al /embed:Greetings.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll

resgen Greetings.ru-RU.txt
Md ru-RU
al /embed:Greetings.ru-RU.resources /culture:ru-RU /out:ru-RU\Example.resources.dll

Pobieranie zasobówRetrieving Resources

Wywołujesz GetObject(String) metody i, GetString(String) Aby uzyskać dostęp do określonego zasobu.You call the GetObject(String) and GetString(String) methods to access a specific resource. Możesz również wywołać metodę, GetStream(String) Aby pobrać zasoby niebędące ciągami jako tablicę bajtów.You can also call the GetStream(String) method to retrieve non-string resources as a byte array. Domyślnie w aplikacji, która ma zlokalizowane zasoby, te metody zwracają zasób dla kultury określony przez bieżącą kulturę interfejsu użytkownika wątku, który wykonał wywołanie.By default, in an app that has localized resources, these methods return the resource for the culture determined by the current UI culture of the thread that made the call. Zapoznaj się z poprzednią sekcją, ResourceManager i Culture-Specific zasobów, aby uzyskać więcej informacji na temat sposobu definiowania bieżącej kultury interfejsu użytkownika wątku.See the previous section, ResourceManager and Culture-Specific Resources, for more information about how the current UI culture of a thread is defined. Jeśli Menedżer zasobów nie może znaleźć zasobu dla kultury interfejsu użytkownika bieżącego wątku, zostanie użyty proces rezerwowy do pobrania określonego zasobu.If the resource manager cannot find the resource for the current thread's UI culture, it uses a fallback process to retrieve the specified resource. Jeśli Menedżer zasobów nie może znaleźć żadnych zlokalizowanych zasobów, używa zasobów kultury domyślnej.If the resource manager cannot find any localized resources, it uses the resources of the default culture. Więcej informacji o regułach rezerwy zasobów znajduje się w sekcji "proces rezerwowy zasobów" w artykule pakowanie i wdrażanie zasobów.For more information about resource fallback rules, see the "Resource Fallback Process" section of the article Packaging and Deploying Resources.

Uwaga

Jeśli nie można znaleźć pliku Resources określonego w ResourceManager konstruktorze klasy, próba pobrania zasobu zgłasza MissingManifestResourceException MissingSatelliteAssemblyException wyjątek lub.If the .resources file specified in the ResourceManager class constructor cannot be found, the attempt to retrieve a resource throws a MissingManifestResourceException or MissingSatelliteAssemblyException exception. Informacje na temat postępowania z wyjątkiem znajdują się w sekcji Obsługa wyjątków MissingManifestResourceException i MissingSatelliteAssemblyException w dalszej części tego tematu.For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions section later in this topic.

Poniższy przykład używa GetString metody do pobierania zasobów specyficznych dla kultury.The following example uses the GetString method to retrieve culture-specific resources. Obejmuje ona zasoby skompilowane z plików txt dla kultur angielskiej (EN), francuski (Francja) (fr-FR) i rosyjski (Rosja) (ru).It consists of resources compiled from .txt files for the English (en), French (France) (fr-FR), and Russian (Russia) (ru-RU) cultures. Przykład zmienia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na angielski (Stany Zjednoczone), francuski (Francja), rosyjski (Rosja) i szwedzki (Szwecja).The example changes the current culture and current UI culture to English (United States), French (France), Russian (Russia), and Swedish (Sweden). Następnie wywołuje GetString metodę w celu pobrania zlokalizowanego ciągu, który jest wyświetlany wraz z bieżącym dniem i miesiącem.It then calls the GetString method to retrieve the localized string, which it displays along with the current day and month. Zauważ, że w danych wyjściowych jest wyświetlany odpowiedni zlokalizowany ciąg, z wyjątkiem sytuacji, gdy bieżąca kultura interfejsu użytkownika jest szwedzki (Szwecja).Notice that the output displays the appropriate localized string except when the current UI culture is Swedish (Sweden). Ponieważ zasoby języka szwedzkiego są niedostępne, aplikacja zamiast tego używa zasobów kultury domyślnej, która jest w języku angielskim.Because Swedish language resources are unavailable, the app instead uses the resources of the default culture, which is English.

Przykład wymaga plików zasobów tekstowych wymienionych w poniższej tabeli.The example requires the text-based resource files listed in following table. Każdy z nich ma pojedynczy zasób ciągu o nazwie DateStart .Each has a single string resource named DateStart.

KulturaCulture Nazwa plikuFile name Nazwa zasobuResource name Wartość zasobuResource value
en-USen-US DateStrings.txtDateStrings.txt DateStart Dzisiaj jestToday is
fr-FRfr-FR DateStrings.fr-FR.txtDateStrings.fr-FR.txt DateStart Aujourd'hui, C'est LeAujourd'hui, c'est le
ru-RUru-RU DateStrings.ru-RU.txtDateStrings.ru-RU.txt DateStart СегодняСегодня

Oto kod źródłowy dla przykładu (kontrolka showdate. vb dla wersji Visual Basic lub kontrolka showdate. cs dla wersji kodu w języku C#).Here's the source code for the example (ShowDate.vb for the Visual Basic version or ShowDate.cs for the C# version of the code).

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguage("en")]

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "ru-RU", "sv-SE" };
      ResourceManager rm = new ResourceManager("DateStrings",
                                               typeof(Example).Assembly);
      
      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Thread.CurrentThread.CurrentCulture = culture; 
         Thread.CurrentThread.CurrentUICulture = culture;

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name);
         string dateString = rm.GetString("DateStart");
         Console.WriteLine("{0} {1:M}.\n", dateString, DateTime.Now);                           
      }                                           
   }
}
// The example displays output similar to the following:
//       Current UI Culture: en-US
//       Today is February 03.
//       
//       Current UI Culture: fr-FR
//       Aujourd'hui, c'est le 3 février
//       
//       Current UI Culture: ru-RU
//       Сегодня февраля 03.
//       
//       Current UI Culture: sv-SE
//       Today is den 3 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Thread.CurrentThread.CurrentCulture = culture 
         Thread.CurrentThread.CurrentUICulture = culture

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name)
         Dim dateString As String = rm.GetString("DateStart")
         Console.WriteLine("{0} {1:M}.", dateString, Date.Now)                           
         Console.WriteLine()
      Next                                           
   End Sub
End Module
' The example displays output similar to the following:
'       Current UI Culture: en-US
'       Today is February 03.
'       
'       Current UI Culture: fr-FR
'       Aujourd'hui, c'est le 3 février
'       
'       Current UI Culture: ru-RU
'       Сегодня февраля 03.
'       
'       Current UI Culture: sv-SE
'       Today is den 3 februari.

Aby skompilować ten przykład, Utwórz plik wsadowy zawierający następujące polecenia i uruchom go z wiersza polecenia.To compile this example, create a batch file that contains the following commands and run it from the command prompt. Jeśli używasz języka C#, określ csc zamiast vbc i showdate.cs zamiast showdate.vb .If you're using C#, specify csc instead of vbc and showdate.cs instead of showdate.vb.

resgen DateStrings.txt
vbc showdate.vb /resource:DateStrings.resources

md fr-FR
resgen DateStrings.fr-FR.txt
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources

md ru-RU
resgen DateStrings.ru-RU.txt
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources

Istnieją dwa sposoby pobierania zasobów określonej kultury poza bieżącą kulturą interfejsu użytkownika:There are two ways to retrieve the resources of a specific culture other than the current UI culture:

  • Możesz wywołać GetString(String, CultureInfo) GetObject(String, CultureInfo) metodę,, lub, GetStream(String, CultureInfo) Aby pobrać zasób dla określonej kultury.You can call the GetString(String, CultureInfo), GetObject(String, CultureInfo), or GetStream(String, CultureInfo) method to retrieve a resource for a specific culture. Jeśli zlokalizowany zasób nie zostanie znaleziony, Menedżer zasobów używa procesu rezerwowego zasobu, aby zlokalizować odpowiedni zasób.If a localized resource cannot be found, the resource manager uses the resource fallback process to locate an appropriate resource.

  • Możesz wywołać metodę, GetResourceSet Aby uzyskać ResourceSet obiekt, który reprezentuje zasoby dla określonej kultury.You can call the GetResourceSet method to obtain a ResourceSet object that represents the resources for a particular culture. W wywołaniu metody można określić, czy program Resource Manager sonduje dla kultur nadrzędnych, jeśli nie jest w stanie znaleźć zlokalizowanych zasobów lub czy po prostu powraca do zasobów domyślnej kultury.In the method call, you can determine whether the resource manager probes for parent cultures if it is unable to find localized resources, or whether it simply falls back to the resources of the default culture. Następnie można użyć metod w ResourceSet celu uzyskania dostępu do zasobów (zlokalizowanych dla tej kultury) według nazwy lub wyliczenia zasobów w zestawie.You can then use the ResourceSet methods to access the resources (localized for that culture) by name, or to enumerate the resources in the set.

Obsługa wyjątków MissingManifestResourceException i MissingSatelliteAssemblyExceptionHandling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions

Jeśli spróbujesz pobrać określony zasób, ale Menedżer zasobów nie może znaleźć tego zasobu i nie została zdefiniowana żadna domyślna kultura lub nie można zlokalizować zasobów kultury domyślnej, Menedżer zasobów zgłasza MissingManifestResourceException wyjątek, jeśli oczekuje na znalezienie zasobów w zestawie głównym lub w MissingSatelliteAssemblyException przypadku, gdy oczekuje na znalezienie zasobów w zestawie satelickim.If you try to retrieve a specific resource, but the resource manager cannot find that resource and either no default culture has been defined or the resources of the default culture cannot be located, the resource manager throws a MissingManifestResourceException exception if it expects to find the resources in the main assembly or a MissingSatelliteAssemblyException if it expects to find the resources in a satellite assembly. Należy zauważyć, że wyjątek jest zgłaszany w przypadku wywołania metody pobierania zasobu, takiej jak GetString lub GetObject , a nie podczas tworzenia wystąpienia ResourceManager obiektu.Note that the exception is thrown when you call a resource retrieval method such as GetString or GetObject, and not when you instantiate a ResourceManager object.

Wyjątek jest zazwyczaj generowany w następujących warunkach:The exception is typically thrown under the following conditions:

  • Odpowiedni plik zasobów lub zestaw satelicki nie istnieje.The appropriate resource file or satellite assembly does not exist. Jeśli Menedżer zasobów oczekuje, że domyślne zasoby aplikacji będą osadzone w zestawie aplikacji głównej, nie są one obecne.If the resource manager expects the app's default resources to be embedded in the main app assembly, they are absent. Jeśli ten NeutralResourcesLanguageAttribute atrybut wskazuje, że zasoby domyślne aplikacji znajdują się w zestawie satelickim, ten zestaw nie może zostać znaleziony.If the NeutralResourcesLanguageAttribute attribute indicates that the app's default resources reside in a satellite assembly, that assembly cannot be found. Podczas kompilowania aplikacji upewnij się, że zasoby są osadzone w zestawie głównym lub że jest generowany niezbędny zestaw satelicki i jest odpowiednio nazwany.When you compile your app, make sure that resources are embedded in the main assembly or that the necessary satellite assembly is generated and is named appropriately. Jego nazwa powinna przyjmować postać nazwa_aplikacji.resources.dll i powinna znajdować się w katalogu o nazwie po kulturze, której zawarte w niej zasoby.Its name should take the form appName.resources.dll, and it should be located in a directory named after the culture whose resources it contains.

  • Twoja aplikacja nie ma zdefiniowanej domyślnej lub neutralnej kultury.Your app doesn't have a default or neutral culture defined. Dodaj NeutralResourcesLanguageAttribute atrybut do pliku kodu źródłowego lub do pliku informacji o projekcie (AssemblyInfo. vb dla aplikacji Visual Basic lub AssemblyInfo. cs dla aplikacji C#).Add the NeutralResourcesLanguageAttribute attribute to a source code file or to the project information file (AssemblyInfo.vb for a Visual Basic app or AssemblyInfo.cs for a C# app) file.

  • baseNameParametr w ResourceManager(String, Assembly) konstruktorze nie określa nazwy pliku Resources.The baseName parameter in the ResourceManager(String, Assembly) constructor does not specify the name of a .resources file. Nazwa powinna zawierać w pełni kwalifikowaną przestrzeń nazw pliku zasobów, ale nie rozszerzenie nazwy pliku.The name should include the resource file's fully qualified namespace but not its file name extension. Zazwyczaj pliki zasobów, które są tworzone w programie Visual Studio, obejmują nazwy przestrzeni nazw, ale pliki zasobów, które są tworzone i kompilowane w wierszu polecenia, nie.Typically, resource files that are created in Visual Studio include namespace names, but resource files that are created and compiled at the command prompt do not. Można określić nazwy osadzonych plików Resources, kompilując i uruchamiając następujące narzędzie.You can determine the names of embedded .resources files by compiling and running the following utility. Jest to Aplikacja konsolowa, która akceptuje nazwę głównego zestawu lub zestawu satelickiego jako parametr wiersza polecenia.This is a console app that accepts the name of a main assembly or satellite assembly as a command-line parameter. Wyświetla ciągi, które powinny być podane jako parametr, baseName Aby Menedżer zasobów mógł prawidłowo identyfikować zasób.It displays the strings that should be provided as the baseName parameter so that the resource manager can correctly identify the resource.

    using System;
    using System.IO;
    using System.Reflection;
    using System.Resources;
    
    public class Example
    {
       public static void Main()
       {
          if (Environment.GetCommandLineArgs().Length == 1) { 
             Console.WriteLine("No filename.");
             return;
          }
          
          string filename = Environment.GetCommandLineArgs()[1].Trim();
          // Check whether the file exists.
          if (! File.Exists(filename)) {
             Console.WriteLine("{0} does not exist.", filename);
             return;
          }   
          
          // Try to load the assembly.
          Assembly assem = Assembly.LoadFrom(filename);
          Console.WriteLine("File: {0}", filename);
             
          // Enumerate the resource files.
          string[] resNames = assem.GetManifestResourceNames();
          if (resNames.Length == 0)
             Console.WriteLine("   No resources found.");
    
          foreach (var resName in resNames)
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""));
    
          Console.WriteLine();
       }
    }
    
    Imports System.IO
    Imports System.Reflection
    Imports System.Resources
    
    Module Example
       Public Sub Main()
          If Environment.GetCommandLineArgs.Length = 1 Then 
             Console.WriteLine("No filename.")
             Exit Sub
          End If
          Dim filename As String = Environment.GetCommandLineArgs(1).Trim()
          ' Check whether the file exists.
          If Not File.Exists(filename) Then
             Console.WriteLine("{0} does not exist.", filename)
             Exit Sub
          End If   
          
          ' Try to load the assembly.
          Dim assem As Assembly = Assembly.LoadFrom(filename)
          Console.WriteLine("File: {0}", filename)
             
          ' Enumerate the resource files.
          Dim resNames() As String = assem.GetManifestResourceNames()
          If resNames.Length = 0 Then
             Console.WriteLine("   No resources found.")
          End If
          For Each resName In resNames
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""))
          Next
          Console.WriteLine()
       End Sub
    End Module
    

Jeśli zmieniasz w sposób jawny bieżącą kulturę aplikacji, należy pamiętać, że Menedżer zasobów Pobiera zestaw zasobów na podstawie wartości CultureInfo.CurrentUICulture właściwości, a nie do CultureInfo.CurrentCulture właściwości.If you are changing the current culture of your application explicitly, you should also remember that the resource manager retrieves a resource set based on the value of the CultureInfo.CurrentUICulture property, and not the CultureInfo.CurrentCulture property. Zazwyczaj Jeśli zmienisz jedną wartość, należy również zmienić drugą.Typically, if you change one value, you should also change the other.

Przechowywanie wersji zasobuResource Versioning

Ponieważ główny zestaw zawierający domyślne zasoby aplikacji jest oddzielony od zestawów satelickich aplikacji, można wydać nową wersję zestawu głównego bez ponownego wdrażania zestawów satelickich.Because the main assembly that contains an app's default resources is separate from the app's satellite assemblies, you can release a new version of your main assembly without redeploying the satellite assemblies. Użyj atrybutu, SatelliteContractVersionAttribute Aby użyć istniejących zestawów satelickich, i poinstruuj Menedżera zasobów, aby nie ponownie wdrożyć je przy użyciu nowej wersji zestawu głównego.You use the SatelliteContractVersionAttribute attribute to use existing satellite assemblies and instruct the resource manager not to redeploy them with a new version of your main assembly,

Aby uzyskać więcej informacji o obsłudze wersji dla zestawów satelickich, zobacz artykuł pobieranie zasobów.For more information about versioning support for satellite assemblies, see the article Retrieving Resources.

<satelliteassemblies> Węzeł pliku konfiguracji<satelliteassemblies> Configuration File Node

W przypadku plików wykonywalnych, które są wdrażane i uruchamiane z witryny sieci Web (pliki HREF. exe), ResourceManager obiekt może być sondowany dla zestawów satelickich za pośrednictwem Internetu, co może obniżyć wydajność aplikacji.For executables that are deployed and run from a website (HREF .exe files), the ResourceManager object may probe for satellite assemblies over the web, which can hurt your app's performance. Aby wyeliminować problem z wydajnością, możesz ograniczyć tę sondowanie do zestawów satelickich wdrożonych w aplikacji.To eliminate the performance problem, you can limit this probing to the satellite assemblies that you have deployed with your app. W tym celu należy utworzyć <satelliteassemblies> węzeł w pliku konfiguracji aplikacji, aby określić, że został wdrożony określony zestaw kultur dla aplikacji i czy ResourceManager obiekt nie powinien próbować sondować dla żadnej kultury, która nie jest wymieniona w tym węźle.To do this, you create a <satelliteassemblies> node in your app's configuration file to specify that you have deployed a specific set of cultures for your app, and that the ResourceManager object should not try to probe for any culture that is not listed in that node.

Uwaga

Preferowaną alternatywą dla tworzenia <satelliteassemblies> węzła jest użycie funkcji manifestu wdrażania ClickOnce .The preferred alternative to creating a <satelliteassemblies> node is to use the ClickOnce Deployment Manifest feature.

W pliku konfiguracji aplikacji utwórz sekcję podobną do następującej:In your app's configuration file, create a section similar to the following:

<?xml version ="1.0"?>
<configuration>
    <satelliteassemblies>
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">
            <culture>cultureName1</culture>
            <culture>cultureName2</culture>
            <culture>cultureName3</culture>
        </assembly>
    </satelliteassemblies>
</configuration>

Edytuj te informacje konfiguracyjne w następujący sposób:Edit this configuration information as follows:

  • Określ jeden lub więcej <assembly> węzłów dla każdego wdrażanego zestawu głównego, gdzie każdy węzeł określa w pełni kwalifikowaną nazwę zestawu.Specify one or more <assembly> nodes for each main assembly that you deploy, where each node specifies a fully qualified assembly name. Określ nazwę głównego zestawu zamiast MainAssemblyName i określ Version PublicKeyToken Culture wartości atrybutów, które odpowiadają głównemu zestawowi.Specify the name of your main assembly in place of MainAssemblyName, and specify the Version, PublicKeyToken, and Culture attribute values that correspond to your main assembly.

    Dla Version atrybutu określ numer wersji zestawu.For the Version attribute, specify the version number of your assembly. Na przykład pierwsza wersja zestawu może być numerem wersji 1.0.0.0.For example, the first release of your assembly might be version number 1.0.0.0.

    Dla PublicKeyToken atrybutu, określ słowo kluczowe, null Jeśli nie masz podpisanego zestawu o silnej nazwie lub określ token klucza publicznego, jeśli został podpisany.For the PublicKeyToken attribute, specify the keyword null if you have not signed your assembly with a strong name, or specify your public key token if you have signed your assembly.

    Dla Culture atrybutu, określ słowo kluczowe, neutral Aby wyznaczyć zestaw główny i spowodować ResourceManager sondowanie klasy tylko dla kultur wymienionych w <culture> węzłach.For the Culture attribute, specify the keyword neutral to designate the main assembly and cause the ResourceManager class to probe only for the cultures listed in the <culture> nodes.

    Aby uzyskać więcej informacji na temat w pełni kwalifikowanych nazw zestawów, zobacz nazwy zestawówartykułów.For more information about fully qualified assembly names, see the article Assembly Names. Aby uzyskać więcej informacji na temat zestawów o silnych nazwach, zobacz artykuł Tworzenie i używanie zestawów o silnej nazwie.For more information about strong-named assemblies, see the article Create and use strong-named assemblies.

  • Określ co najmniej jeden <culture> węzeł z określoną nazwą kultury, taką jak "fr-fr" lub neutralną nazwą kultury, taką jak "fr".Specify one or more <culture> nodes with a specific culture name, such as "fr-FR", or a neutral culture name, such as "fr".

Jeśli zasoby są potrzebne dla dowolnego zestawu, którego nie ma na liście w <satelliteassemblies> węźle, ResourceManager sondy klasy dla kultur korzystających ze standardowych reguł sondowania.If resources are needed for any assembly not listed under the <satelliteassemblies> node, the ResourceManager class probes for cultures using standard probing rules.

Aplikacje ze sklepu Windows 8. xWindows 8.x Store Apps

Ważne

Chociaż ResourceManager Klasa jest obsługiwana w aplikacjach ze sklepu Windows 8. x, nie zalecamy jej używania.Although the ResourceManager class is supported in Windows 8.x Store apps, we do not recommend its use. Tej klasy należy używać tylko w przypadku tworzenia projektów biblioteki klas przenośnych, które mogą być używane z aplikacjami do sklepu Windows 8. x.Use this class only when you develop Portable Class Library projects that can be used with Windows 8.x Store apps. Aby pobrać zasoby z aplikacji ze sklepu Windows 8. x, należy zamiast tego użyć klasy Windows. ApplicationModel. resources. ResourceLoader .To retrieve resources from Windows 8.x Store apps, use the Windows.ApplicationModel.Resources.ResourceLoader class instead.

W przypadku aplikacji ze sklepu Windows 8. x, ResourceManager Klasa pobiera zasoby z plików indeksu zasobów pakietu (PRI).For Windows 8.x Store apps, the ResourceManager class retrieves resources from package resource index (PRI) files. Pojedynczy plik PRI (plik PRI pakietu aplikacji) zawiera zasoby dla domyślnej kultury i wszystkich zlokalizowanych kultur.A single PRI file (the application package PRI file) contains the resources for both the default culture and any localized cultures. Użyj narzędzia pliku MakePRI, aby utworzyć plik PRI z co najmniej jednego pliku zasobów, który znajduje się w formacie zasobu XML (. resw).You use the MakePRI utility to create a PRI file from one or more resource files that are in XML resource (.resw) format. W przypadku zasobów uwzględnionych w projekcie programu Visual Studio program Visual Studio obsługuje proces tworzenia i pakowania pliku PRI automatycznie.For resources that are included in a Visual Studio project, Visual Studio handles the process of creating and packaging the PRI file automatically. Następnie można użyć klasy .NET Framework, ResourceManager Aby uzyskać dostęp do zasobów aplikacji lub biblioteki.You can then use the .NET Framework ResourceManager class to access the app's or library's resources.

Można utworzyć wystąpienie ResourceManager obiektu dla aplikacji ze sklepu Windows 8. x w taki sam sposób, jak w przypadku aplikacji klasycznej.You can instantiate a ResourceManager object for a Windows 8.x Store app in the same way that you do for a desktop app.

Następnie można uzyskać dostęp do zasobów dla określonej kultury, przekazując nazwę zasobu, który ma zostać pobrany do GetString(String) metody.You can then access the resources for a particular culture by passing the name of the resource to be retrieved to the GetString(String) method. Domyślnie ta metoda zwraca zasób dla kultury określony przez bieżącą kulturę interfejsu użytkownika wątku, który wykonał wywołanie.By default, this method returns the resource for the culture determined by the current UI culture of the thread that made the call. Możesz również pobrać zasoby dla określonej kultury, przekazując nazwę zasobu i CultureInfo obiekt, który reprezentuje kulturę, której zasób ma zostać pobrany do GetString(String, CultureInfo) metody.You can also retrieve the resources for a specific culture by passing the name of the resource and a CultureInfo object that represents the culture whose resource is to be retrieved to the GetString(String, CultureInfo) method. Jeśli nie można znaleźć zasobu dla bieżącej kultury interfejsu użytkownika lub określonej kultury, Menedżer zasobów używa listy rezerwowej języka interfejsu użytkownika w celu zlokalizowania odpowiedniego zasobu.If the resource for the current UI culture or the specified culture cannot be found, the resource manager uses a UI language fallback list to locate a suitable resource.

Konstruktory

ResourceManager()

Inicjuje nowe wystąpienie klasy ResourceManager z domyślnymi wartościami.Initializes a new instance of the ResourceManager class with default values.

ResourceManager(String, Assembly)

Inicjuje nowe wystąpienie ResourceManager klasy, która wyszukuje zasoby zawarte w plikach z określoną nazwą główną w danym zestawie.Initializes a new instance of the ResourceManager class that looks up resources contained in files with the specified root name in the given assembly.

ResourceManager(String, Assembly, Type)

Inicjuje nowe wystąpienie ResourceManager klasy, która używa określonej ResourceSet klasy do wyszukiwania zasobów zawartych w plikach z określoną nazwą główną w danym zestawie.Initializes a new instance of the ResourceManager class that uses a specified ResourceSet class to look up resources contained in files with the specified root name in the given assembly.

ResourceManager(Type)

Inicjuje nowe wystąpienie ResourceManager klasy, które wyszukuje zasoby w zestawach satelickich na podstawie informacji z określonego typu obiektu.Initializes a new instance of the ResourceManager class that looks up resources in satellite assemblies based on information from the specified type object.

Pola

BaseNameField

Określa nazwę główną plików zasobów, które ResourceManager wyszukuje zasoby.Specifies the root name of the resource files that the ResourceManager searches for resources.

HeaderVersionNumber

Określa wersję nagłówków plików zasobów, które bieżąca implementacja ResourceManager może interpretować i utworzyć.Specifies the version of resource file headers that the current implementation of ResourceManager can interpret and produce.

MagicNumber

Przechowuje numer używany do identyfikowania plików zasobów.Holds the number used to identify resource files.

MainAssembly

Określa główny zestaw zawierający zasoby.Specifies the main assembly that contains the resources.

ResourceSets
Nieaktualne.

Zawiera element Hashtable , który zwraca mapowanie z kultur do ResourceSet obiektów.Contains a Hashtable that returns a mapping from cultures to ResourceSet objects.

Właściwości

BaseName

Pobiera nazwę główną plików zasobów, które ResourceManager wyszukuje zasoby.Gets the root name of the resource files that the ResourceManager searches for resources.

FallbackLocation

Pobiera lub ustawia lokalizację, z której mają zostać pobrane domyślne zasoby rezerwowe.Gets or sets the location from which to retrieve default fallback resources.

IgnoreCase

Pobiera lub ustawia wartość wskazującą, czy Menedżer zasobów umożliwia wyszukiwanie zasobów bez uwzględniania wielkości liter w GetString(String) GetObject(String) metodach i.Gets or sets a value that indicates whether the resource manager allows case-insensitive resource lookups in the GetString(String) and GetObject(String) methods.

ResourceSetType

Pobiera typ obiektu zestawu zasobów używanego przez Menedżera zasobów do konstruowania ResourceSet obiektu.Gets the type of the resource set object that the resource manager uses to construct a ResourceSet object.

Metody

CreateFileBasedResourceManager(String, String, Type)

Zwraca ResourceManager obiekt, który przeszukuje określony katalog zamiast manifestu zestawu dla zasobów.Returns a ResourceManager object that searches a specific directory instead of an assembly manifest for resources.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetNeutralResourcesLanguage(Assembly)

Zwraca informacje specyficzne dla kultury dla domyślnych zasobów zestawu głównego przez pobranie wartości NeutralResourcesLanguageAttribute atrybutu w określonym zestawie.Returns culture-specific information for the main assembly's default resources by retrieving the value of the NeutralResourcesLanguageAttribute attribute on a specified assembly.

GetObject(String)

Zwraca wartość określonego zasobu niebędącego ciągiem.Returns the value of the specified non-string resource.

GetObject(String, CultureInfo)

Pobiera wartość określonego zasobu niebędącego ciągiem zlokalizowanego dla określonej kultury.Gets the value of the specified non-string resource localized for the specified culture.

GetResourceFileName(CultureInfo)

Generuje nazwę pliku zasobów dla danego CultureInfo obiektu.Generates the name of the resource file for the given CultureInfo object.

GetResourceSet(CultureInfo, Boolean, Boolean)

Pobiera zestaw zasobów dla określonej kultury.Retrieves the resource set for a particular culture.

GetSatelliteContractVersion(Assembly)

Zwraca wersję określoną przez SatelliteContractVersionAttribute atrybut w danym zestawie.Returns the version specified by the SatelliteContractVersionAttribute attribute in the given assembly.

GetStream(String)

Zwraca obiekt niezarządzany strumień pamięci z określonego zasobu.Returns an unmanaged memory stream object from the specified resource.

GetStream(String, CultureInfo)

Zwraca obiekt niezarządzany strumień pamięci z określonego zasobu przy użyciu określonej kultury.Returns an unmanaged memory stream object from the specified resource, using the specified culture.

GetString(String)

Zwraca wartość określonego zasobu ciągu.Returns the value of the specified string resource.

GetString(String, CultureInfo)

Zwraca wartość zasobu ciągu zlokalizowanego dla określonej kultury.Returns the value of the string resource localized for the specified culture.

GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
InternalGetResourceSet(CultureInfo, Boolean, Boolean)

Zawiera implementację do znajdowania zestawu zasobów.Provides the implementation for finding a resource set.

MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ReleaseAllResources()

Informuje Menedżera zasobów o wywołaniu Close() metody dla wszystkich ResourceSet obiektów i zwolnieniu wszystkich zasobów.Tells the resource manager to call the Close() method on all ResourceSet objects and release all resources.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Dotyczy

Bezpieczeństwo wątkowe

Ten typ jest bezpieczny wątkowo.This type is thread safe.

Zobacz też