ResourceManager ResourceManager ResourceManager ResourceManager Class

Определение

Представляет диспетчер ресурсов, обеспечивающий удобный доступ к ресурсам, связанным с языком и региональными параметрами, во время выполнения.Represents a resource manager that provides convenient access to culture-specific resources at run time.

public ref class ResourceManager
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class ResourceManager
type ResourceManager = class
Public Class ResourceManager
Наследование
ResourceManagerResourceManagerResourceManagerResourceManager
Производный
Атрибуты

Примеры

В следующем примере показано, как использовать явный язык и региональные параметры, а также неявную текущую культуру пользовательского интерфейса для получения строковых ресурсов из основной сборки и вспомогательной сборки.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. Дополнительные сведения см. в подразделе "расположение каталогов для вспомогательных сборок, не установленных в глобальном кэше сборок" раздела Создание вспомогательных сборок .For more information, see the "Directory Locations for Satellite Assemblies Not Installed in the Global Assembly Cache" section of the Creating Satellite Assemblies topic.

Чтобы выполнить этот пример, выполните следующие действия.To run this example:

  1. В каталоге приложения создайте файл с именем РМК. txt, содержащий следующие строки ресурсов: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. Используйте генератор файлов ресурсов для создания файла ресурсов РМК. Resources из входного файла РМК. txt следующим образом:Use the Resource File Generator to generate the rmc.resources resource file from the rmc.txt input file as follows:

    resgen rmc.txt  
    
  3. Создайте подкаталог каталога приложения и назовите его "es-MX".Create a subdirectory of the app directory and name it "es-MX". Это имя языка и региональных параметров вспомогательной сборки, которая будет создана в следующих трех шагах.This is the culture name of the satellite assembly that you will create in the next three steps.

  4. Создайте файл с именем rmc.es-МКС. txt в каталоге es-MX, который содержит следующие строки ресурсов: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. Используйте генератор файлов ресурсов для создания файла ресурсов RMC.es-MX. Resources из входного файла RMC.ES-МКС. txt следующим образом: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. Предположим, что имя файла для этого примера — РМК. vb или rmc.cs.Assume that the filename for this example is rmc.vb or rmc.cs. Скопируйте следующий исходный код в файл.Copy the following source code into a file. Затем скомпилируйте его и внедрите основной файл ресурсов сборки РМК. Resources в исполняемую сборку.Then compile it and embed the main assembly resource file, rmc.resources, in the executable assembly. При использовании компилятора Visual Basic используется следующий синтаксис:If you are using the Visual Basic compiler, the syntax is:

    vbc rmc.vb /resource:rmc.resources  
    

    Соответствующий синтаксис для C# компилятора:The corresponding syntax for the C# compiler is:

    csc /resource:rmc.resources rmc.cs  
    
  7. Используйте Компоновщик сборок для создания вспомогательной сборки.Use the Assembly Linker to create a satellite assembly. Если базовое имя приложения — РМК, имя вспомогательной сборки должно быть РМК. Resources. dll.If the base name of the app is rmc, the satellite assembly name must be rmc.resources.dll. Вспомогательная сборка должна быть создана в каталоге es-MX.The satellite assembly should be created in the es-MX directory. Если es-MX является текущим каталогом, используйте следующую команду:If es-MX is the current directory, use this command:

    al /embed:rmc.es-MX.resources /c:es-MX /out:rmc.resources.dll   
    
  8. Запустите РМК. exe, чтобы получить и отобразить строки внедренных ресурсов.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.

Комментарии

Важно!

Вызов методов этого класса для ненадежных данных представляет угрозу безопасности.Calling methods from this class with untrusted data is a security risk. Вызывайте методы класса только для надежных данных.Call the methods from this class only with trusted data. Дополнительные сведения: Data Validation (Проверка данных).For more information, see Data Validation.

ResourceManager Класс извлекает ресурсы из двоичного Resources-файла, внедренного в сборку или из автономного файла. Resources.The ResourceManager class retrieves resources from a binary .resources file that is embedded in an assembly or from a standalone .resources file. Если приложение локализовано и локализованные ресурсы были развернуты во вспомогательных сборках, он ищет ресурсы для конкретного языка и региональных параметров, предоставляет резервный ресурс, если локализованный ресурс не существует, и поддерживает сериализацию ресурсов.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.

Дополнительные сведения о создании и управлении ресурсами в классических приложениях и Магазин Windows 8.xWindows 8.x Store приложениях см. в следующих разделах:For more information about creating and managing resources in desktop apps and Магазин Windows 8.xWindows 8.x Store apps, see the following sections:

Классические приложенияDesktop Apps

Для настольных приложений ResourceManager класс получает ресурсы из двоичных файлов ресурсов (Resources).For desktop apps, the ResourceManager class retrieves resources from binary resource (.resources) files. Как правило, компилятор языка или Компоновщик сборок (Al. exe) внедряет эти файлы ресурсов в сборку.Typically, a language compiler or the Assembly Linker (AL.exe) embeds these resource files in an assembly. Можно также использовать ResourceManager объект для извлечения ресурсов непосредственно из Resources-файла, который не внедрен в сборку путем CreateFileBasedResourceManager вызова метода.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.

Внимание!

Использование автономных Resources-файлов в приложении ASP.NET приведет к нарушению развертывания Xcopy, так как ресурсы остаются заблокированными до тех ReleaseAllResources пор, пока они не будут явно освобождены методом.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. Если вы хотите развернуть ресурсы с помощью приложений ASP.NET, следует компилировать файлы Resources во вспомогательные сборки.If you want to deploy resources with your ASP.NET apps, you should compile your .resources files into satellite assemblies.

В приложении на основе ресурсов один RESOURCES-файл содержит ресурсы языка и региональных параметров по умолчанию, ресурсы которых используются, если не удается найти ресурсы для конкретного языка и региональных параметров.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. Например, если язык и региональные параметры по умолчанию для приложения — Английский (EN), то ресурсы на английском языке используются, когда локализованные ресурсы не могут быть найдены для определенного языка и региональных параметров, таких как английский (США) (EN-US) или французский (Франция) (fr-FR).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). Как правило, ресурсы для языка и региональных параметров по умолчанию внедряются в основную сборку приложения, а ресурсы для других локализованных языков и региональных параметров внедряются во вспомогательные сборки.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. Вспомогательные сборки содержат только ресурсы.Satellite assemblies contain only resources. Они имеют то же имя корневого файла, что и основная сборка, и расширение Resources. dll.They have the same root file name as the main assembly and an extension of .resources.dll. Для приложений, сборки которых не зарегистрированы в глобальном кэше сборок, вспомогательные сборки хранятся в подкаталоге приложения, имя которого соответствует языку и региональным параметрам сборки.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.

Создание ресурсовCreating Resources

При разработке приложения на основе ресурсов сведения о ресурсах хранятся в текстовых файлах (файлах с расширением txt или restext) или в XML-файлах (файлах с расширением 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). Затем вы компилируете текстовые или XML-файлы с помощью генератора файлов ресурсов (Resgen. exe) для создания файла binary. Resources.You then compile the text or XML files with the Resource File Generator (Resgen.exe) to create a binary .resources file. Затем можно внедрить полученный RESOURCES-файл в исполняемый объект или библиотеку с помощью параметра компилятора, /resources например для C# компиляторов и Visual Basic, или можно внедрить его во вспомогательную сборку с помощью.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 . Если включить RESX-файл в проект Visual Studio, Visual Studio автоматически обрабатывает компиляцию и внедрение ресурсов по умолчанию и локализованные ресурсы как часть процесса сборки.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.

В идеале следует создавать ресурсы для каждого языка, поддерживаемого приложением, или по крайней мере для осмысленного подмножества каждого языка.Ideally, you should create resources for every language your app supports, or at least for a meaningful subset of each language. Имена файлов binary. Resources соответствуют соглашению об именовании basename. cultureName. Resources, где basename — это имя приложения или имя класса в зависимости от требуемого уровня детализации.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. Свойство используется для определения cultureName. ** CultureInfo.NameThe CultureInfo.Name property is used to determine cultureName. Ресурсом для языка и региональных параметров по умолчанию для приложения должно быть присвоено имя basename. Resources.A resource for the app's default culture should be named basename.resources.

Например, предположим, что сборка содержит несколько ресурсов в файле ресурсов с базовым именем Миресаурцес.For example, suppose that an assembly has several resources in a resource file that has the base name MyResources. Эти файлы ресурсов должны иметь такие имена, как Миресаурцес. ja-JP. Resources для Японии (японский язык), Миресаурцес. de. Resources для немецкого языка, Миресаурцес. zh-CHS. Resources для китайского языка (упрощенное письмо) и MyResources.fr — это ресурсы для языка и региональных параметров "французский (Бельгия)".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. Файл ресурсов по умолчанию должен называться Миресаурцес. Resources.The default resource file should be named MyResources.resources. Файлы ресурсов, зависящие от языка и региональных параметров, обычно упаковываются во вспомогательные сборки для каждого языка и региональных параметров.The culture-specific resource files are commonly packaged in satellite assemblies for each culture. Файл ресурсов по умолчанию должен быть внедрен в основную сборку приложения.The default resource file should be embedded in the app's main assembly.

Обратите внимание, что Компоновщик сборок позволяет пометить ресурсы как частные, но всегда следует помечать их как открытые, чтобы к ним можно было обращаться из других сборок.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. (Поскольку вспомогательная сборка не содержит кода, ресурсы, помеченные как частные, недоступны для вашего приложения с помощью любого механизма.)(Because a satellite assembly contains no code, resources that are marked as private are unavailable to your app through any mechanism.)

Дополнительные сведения о создании, упаковке и развертывании ресурсов см. в статьях Создание файлов ресурсов, Создание вспомогательных сборок, Упаковка и развертывание ресурсов.For more information about creating, packaging, and deploying resources, see the articles Creating Resource Files, Creating Satellite Assemblies, and Packaging and Deploying Resources.

Создание экземпляра объекта ResourceManagerInstantiating a ResourceManager Object

Экземпляр объекта, который ResourceManager получает ресурсы из внедренного Resources-файла, создается путем вызова одной из перегрузок конструктора класса.You instantiate a ResourceManager object that retrieves resources from an embedded .resources file by calling one of its class constructor overloads. Это тесно связывает ResourceManager объект с определенным Resources-файлом и со всеми связанными локализованными файлами Resources во вспомогательных сборках.This tightly couples a ResourceManager object with a particular .resources file and with any associated localized .resources files in satellite assemblies.

Ниже перечислены два наиболее часто встречающихся конструкторов.The two most commonly called constructors are:

  • ResourceManager(String, Assembly)ищет ресурсы на основе двух предоставленных данных: базовое имя resides, а также сборку, в которой находится файл по умолчанию. resides.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. Базовое имя включает пространство имен и корневое имя файла Resources без его языка и региональных параметров или расширения.The base name includes the namespace and root name of the .resources file, without its culture or extension. Обратите внимание, что Resources-файлы, компилируемые из командной строки, обычно не включают имя пространства имен, тогда как файлы Resources, созданные в среде Visual Studio, выполняют.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. Например, если файл ресурсов называется MyCompany. StringResources. Resources, а ResourceManager конструктор вызывается из статического метода с именем Example.Main, ResourceManager следующий код создает объект, который может извлекать ресурсы из. файл ресурсов: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)ищет ресурсы во вспомогательных сборках на основе информации из объекта типа.ResourceManager(Type) looks up resources in satellite assemblies based on information from a type object. Полное имя типа соответствует базовому имени Resources, без расширения имени файла.The type's fully qualified name corresponds to the base name of the .resources file without its file name extension. В настольных приложениях, созданных с помощью конструктора ресурсов Visual Studio, Visual Studio создает класс-оболочку, полное имя которого совпадает с корневым именем 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. Например, если файл ресурсов называется MyCompany. StringResources. Resources, а существует класс-оболочка с MyCompany.StringResourcesименем, следующий код создает объект, ResourceManager который может извлекать ресурсы из 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))
    

Если не удается найти соответствующие ресурсы, вызов конструктора создает допустимый ResourceManager объект.If the appropriate resources cannot be found, the constructor call creates a valid ResourceManager object. Однако попытка получить ресурс вызывает MissingManifestResourceException исключение.However, the attempt to retrieve a resource throws a MissingManifestResourceException exception. Сведения о работе с исключением см. в разделе обработка исключений MissingManifestResourceException и миссингсателлитеассембли далее в этой статье.For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssembly Exceptions section later in this article.

В следующем примере показано, как создать экземпляр ResourceManager объекта.The following example shows how to instantiate a ResourceManager object. Он содержит исходный код для исполняемого файла с именем ShowTime. exe.It contains the source code for an executable named ShowTime.exe. Он также включает следующий текстовый файл с именем Strings. txt, содержащий один строковый ресурс TimeHeader:It also includes the following text file named Strings.txt that contains a single string resource, TimeHeader:

TimeHeader=The current time is  

Для создания файла ресурсов и его внедрения в исполняемый файл можно использовать пакетный файл.You can use a batch file to generate the resource file and embed it into the executable. Ниже приведен пакетный файл для создания исполняемого файла с помощью C# компилятора.Here's the batch file to generate an executable by using the C# compiler:


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

Для компилятора Visual Basic можно использовать следующий пакетный файл: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 и языка и региональных параметровResourceManager and Culture-Specific Resources

Локализованное приложение требует развертывания ресурсов, как описано в статье Упаковка и развертывание ресурсов.A localized app requires resources to be deployed, as discussed in the article Packaging and Deploying Resources. Если сборки настроены должным образом, диспетчер ресурсов определяет, какие ресурсы следует извлечь на основе 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. (Это свойство также Возвращает язык и региональные параметры пользовательского интерфейса текущего потока.) Например, если приложение компилируется с ресурсами по умолчанию на английском языке в основной сборке, а также с помощью ресурсов на французском и русском языке в двух вспомогательных сборках, а Thread.CurrentUICulture свойство имеет значение fr-FR, диспетчер ресурсов получает французский источников.(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.

CurrentUICulture Свойство можно задать явным или неявным образом.You can set the CurrentUICulture property explicitly or implicitly. Он определяет, каким ResourceManager образом объект извлекает ресурсы на основе языка и региональных параметров:The way you set it determines how the ResourceManager object retrieves resources based on culture:

  • Если явно задано Thread.CurrentUICulture свойство для определенного языка и региональных параметров, диспетчер ресурсов всегда извлекает ресурсы для этого языка и региональных параметров независимо от языка браузера или операционной системы пользователя.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. Рассмотрим приложение, которое компилируется с ресурсами по умолчанию на английском языке и тремя вспомогательными сборками, содержащими ресурсы для английского языка (США), французского языка (Франция) и русского (Россия).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). Если свойство имеет значение fr-FR ResourceManager , объект всегда получает французские (Франция) ресурсы, даже если язык операционной системы пользователя не является французским. CurrentUICultureIf 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. Прежде чем явно задать свойство, убедитесь, что это требуемое поведение.Make sure that this is the desired behavior before you set the property explicitly.

    В приложениях ASP.NET необходимо явно задать Thread.CurrentUICulture свойство, поскольку маловероятно, что параметр на сервере будет соответствовать входящим клиентским запросам.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. Приложение ASP.NET может явно задать Thread.CurrentUICulture свойство для языка принятия браузера пользователем.An ASP.NET app can set the Thread.CurrentUICulture property explicitly to the user's browser accept language.

    Явное задание Thread.CurrentUICulture свойства определяет текущий язык и региональные параметры пользовательского интерфейса для этого потока.Explicitly setting the Thread.CurrentUICulture property defines the current UI culture for that thread. Он не влияет на текущий язык и региональные параметры пользовательского интерфейса других потоков в приложении.It does not affect the current UI culture of any other threads in an app.

  • Вы можете задать язык и региональные параметры пользовательского интерфейса для всех потоков в домене приложения, CultureInfo назначив для статического 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.

  • Если вы не задали явно текущий язык и региональные параметры по умолчанию для текущего домена приложения, CultureInfo.CurrentUICulture свойство задается неявно функцией Windows. GetUserDefaultUILanguageIf 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. Эта функция предоставляется многоязыковым интерфейсом пользователя (MUI), который позволяет пользователю задать язык по умолчанию.This function is provided by the Multilingual User Interface (MUI), which enables the user to set the default language. Если язык пользовательского интерфейса не задан пользователем, по умолчанию используется язык, установленный системой, который является языком ресурсов операционной системы.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.

Следующий простой пример "Hello World" задает явный языковой стандарт пользовательского интерфейса.The following simple "Hello world" example sets the current UI culture explicitly. Он содержит ресурсы для трех языков и региональных параметров: Английский (США) или EN-US, французский (Франция), fr-FR и русский (Россия) или 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. Ресурсы en-US содержатся в текстовом файле с именем поздравления. txt:The en-US resources are contained in a text file named Greetings.txt:

HelloString=Hello world!  

Ресурсы fr-FR содержатся в текстовом файле с именем Greetings.fr-FR. txt:The fr-FR resources are contained in a text file named Greetings.fr-FR.txt:

HelloString=Salut tout le monde!  

Ресурсы ru-RU содержатся в текстовом файле с именем Greetings.ru-RU. txt:The ru-RU resources are contained in a text file named Greetings.ru-RU.txt:

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

Ниже приведен исходный код для примера (например, VB для Visual Basic версии или Example.cs для 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.
'       Всем привет!

Чтобы скомпилировать этот пример, создайте файл пакета (bat), содержащий следующие команды, и запустите его из командной строки.To compile this example, create a batch (.bat) file that contains the following commands and run it from the command prompt. Если вы используете C#, укажите csc вместо vbc и Example.cs вместо 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  

Извлечение ресурсовRetrieving Resources

Для доступа к GetObject(String) определенному ресурсу вызываются методы и. GetString(String)You call the GetObject(String) and GetString(String) methods to access a specific resource. Также можно вызвать GetStream(String) метод для получения нестроковых ресурсов в виде массива байтов.You can also call the GetStream(String) method to retrieve non-string resources as a byte array. По умолчанию в приложении с локализованными ресурсами эти методы возвращают ресурс для языка и региональных параметров, определяемых текущим языком и региональными параметрами пользовательского интерфейса потока, который сделал вызов.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. Дополнительные сведения о том, как определяется текущий язык и региональные параметры пользовательского интерфейса для потока, см. в предыдущем разделе.See the previous section, ResourceManager and Culture-Specific Resources, for more information about how the current UI culture of a thread is defined. Если диспетчеру ресурсов не удается найти ресурс для языка пользовательского интерфейса текущего потока, он использует резервный процесс для получения указанного ресурса.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. Если диспетчер ресурсов не может найти локализованные ресурсы, он использует ресурсы языка и региональных параметров по умолчанию.If the resource manager cannot find any localized resources, it uses the resources of the default culture. Дополнительные сведения о правилах резервирования ресурсов см. в разделе "процесс резервирования ресурсов" статьи Упаковка и развертывание ресурсов.For more information about resource fallback rules, see the "Resource Fallback Process" section of the article Packaging and Deploying Resources.

Примечание

Если не удается найти Resources- ResourceManager файл, указанный в конструкторе класса, попытка получить ресурс MissingManifestResourceException вызовет исключение MissingSatelliteAssemblyException или.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. Дополнительные сведения о работе с исключением см. в подразделе обработка исключений MissingManifestResourceException и миссингсателлитеассемблексцептион далее в этом разделе.For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions section later in this topic.

В следующем примере GetString метод используется для получения ресурсов, зависящих от языка и региональных параметров.The following example uses the GetString method to retrieve culture-specific resources. Он состоит из ресурсов, скомпилированных из TXT-файлов для английского языка (EN), французского языка (Франция) (fr-FR) и русского (Россия) (ru-RU).It consists of resources compiled from .txt files for the English (en), French (France) (fr-FR), and Russian (Russia) (ru-RU) cultures. В примере текущий язык и региональные параметры, а также текущий язык и региональные параметры пользовательского интерфейса изменяются на английский (США), французский (Франция), Русский (Россия) и шведский (Швеция).The example changes the current culture and current UI culture to English (United States), French (France), Russian (Russia), and Swedish (Sweden). Затем он вызывает GetString метод для получения локализованной строки, которая отображается вместе с текущим днем и месяцм.It then calls the GetString method to retrieve the localized string, which it displays along with the current day and month. Обратите внимание, что в выходных данных отображается соответствующая локализованная строка, кроме случаев, когда текущий язык и региональные параметры пользовательского интерфейса — шведский (Швеция).Notice that the output displays the appropriate localized string except when the current UI culture is Swedish (Sweden). Поскольку языковые ресурсы для шведского языка недоступны, приложение использует ресурсы языка и региональных параметров по умолчанию, которые являются английским языком.Because Swedish language resources are unavailable, the app instead uses the resources of the default culture, which is English.

Для этого примера требуются текстовые файлы ресурсов, перечисленные в следующей таблице.The example requires the text-based resource files listed in following table. Каждый из них имеет один строковый DateStartресурс с именем.Each has a single string resource named DateStart.

cultureCulture Имя файлаFile name Имя ресурсаResource name Значение ресурсаResource value
en-USen-US Датестрингс. txtDateStrings.txt DateStart СегодняToday is
fr-FRfr-FR DateStrings.fr-FR. txtDateStrings.fr-FR.txt DateStart Аужаурд'хуи, к'ест LeAujourd'hui, c'est le
ru-RUru-RU DateStrings.ru-RU. txtDateStrings.ru-RU.txt DateStart СегодняСегодня

Ниже приведен исходный код для примера (Шовдате. vb для Visual Basic версии или ShowDate.cs для 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.

Чтобы скомпилировать этот пример, создайте пакетный файл, содержащий следующие команды, и запустите его из командной строки.To compile this example, create a batch file that contains the following commands and run it from the command prompt. Если вы используете C#, укажите csc вместо vbc и showdate.cs вместо 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  

Существует два способа извлечения ресурсов для определенного языка и региональных параметров, отличных от текущего языка и региональных параметров пользовательского интерфейса:There are two ways to retrieve the resources of a specific culture other than the current UI culture:

  • Можно вызвать GetString(String, CultureInfo)метод, GetObject(String, CultureInfo)или GetStream(String, CultureInfo) , чтобы получить ресурс для определенного языка и региональных параметров.You can call the GetString(String, CultureInfo), GetObject(String, CultureInfo), or GetStream(String, CultureInfo) method to retrieve a resource for a specific culture. Если не удается найти локализованный ресурс, диспетчер ресурсов использует процесс резервного использования ресурсов для поиска соответствующего ресурса.If a localized resource cannot be found, the resource manager uses the resource fallback process to locate an appropriate resource.

  • GetResourceSet Метод можно вызвать для ResourceSet получения объекта, представляющего ресурсы для определенного языка и региональных параметров.You can call the GetResourceSet method to obtain a ResourceSet object that represents the resources for a particular culture. В вызове метода можно определить, проверяет ли диспетчер ресурсов наличие родительских языков и региональных параметров, если не удается найти локализованные ресурсы или же он просто возвращается к ресурсам языка и региональных параметров по умолчанию.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. Затем можно использовать ResourceSet методы для доступа к ресурсам (локализованные для этого языка и региональных параметров) по имени или перечислить ресурсы в наборе.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.

Обработка исключений MissingManifestResourceException и МиссингсателлитеассемблексцептионHandling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions

Если вы попытаетесь получить определенный ресурс, но диспетчеру ресурсов не удается найти этот ресурс и не был определен язык и региональные параметры по умолчанию или не удается найти ресурсы языка и региональных параметров, заданных MissingManifestResourceException в параметре default, диспетчер ресурсов создает исключение, если оно требуется найти ресурсы в основной сборке или, MissingSatelliteAssemblyException если они должны найти ресурсы во вспомогательной сборке.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. Обратите внимание, что исключение возникает при вызове метода извлечения ресурса, такого как GetString или GetObject, а не ResourceManager при создании объекта.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.

Исключение обычно возникает при следующих условиях.The exception is typically thrown under the following conditions:

  • Соответствующий файл ресурсов или вспомогательная сборка не существует.The appropriate resource file or satellite assembly does not exist. Если диспетчер ресурсов ждет, что ресурсы приложения по умолчанию будут внедрены в основную сборку приложения, они отсутствуют.If the resource manager expects the app's default resources to be embedded in the main app assembly, they are absent. NeutralResourcesLanguageAttribute Если атрибут указывает, что ресурсы приложения по умолчанию находятся во вспомогательной сборке, эта сборка не может быть найдена.If the NeutralResourcesLanguageAttribute attribute indicates that the app's default resources reside in a satellite assembly, that assembly cannot be found. При компиляции приложения убедитесь, что ресурсы внедрены в основную сборку или что необходимая вспомогательная сборка создана и имеет соответствующее имя.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. Его имя должно иметь форму AppName. Resources. dll, и она должна находиться в каталоге после языка и региональных параметров, содержащихся в нем ресурсах.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.

  • Для приложения не определена культура по умолчанию или нейтральный язык и региональные параметры.Your app doesn't have a default or neutral culture defined. Добавьте атрибут в файл исходного кода или в файл сведений о проекте (AssemblyInfo. vb для Visual Basic приложения или AssemblyInfo.cs для C# приложения). NeutralResourcesLanguageAttributeAdd 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.

  • baseName ПараметрResourceManager(String, Assembly) в конструкторе не указывает имя Resources-файла.The baseName parameter in the ResourceManager(String, Assembly) constructor does not specify the name of a .resources file. Имя должно включать полное пространство имен файла ресурсов, но не расширение имени файла.The name should include the resource file's fully qualified namespace but not its file name extension. Как правило, файлы ресурсов, создаваемые в Visual Studio, включают имена пространств имен, но файлы ресурсов, создаваемые и скомпилированные в командной строке, не имеют.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. Имена внедренных Resources файлов можно определить, выполнив компиляцию и запуск следующей служебной программы.You can determine the names of embedded .resources files by compiling and running the following utility. Это консольное приложение, принимающее имя основной или вспомогательной сборки в качестве параметра командной строки.This is a console app that accepts the name of a main assembly or satellite assembly as a command-line parameter. В нем отображаются строки, которые должны быть предоставлены baseName в качестве параметра, чтобы диспетчер ресурсов мог правильно опознать ресурс.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
    

При изменении текущего языка и региональных параметров приложения явным образом следует помнить, что диспетчер ресурсов извлекает набор ресурсов на основе значения CultureInfo.CurrentUICulture свойства, а CultureInfo.CurrentCulture не свойства.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. Как правило, при изменении одного значения необходимо также изменить другой.Typically, if you change one value, you should also change the other.

Управление версиями ресурсовResource Versioning

Так как Главная сборка, содержащая ресурсы приложения по умолчанию, отличается от вспомогательных сборок приложения, можно освободить новую версию основной сборки без повторного развертывания вспомогательных сборок.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. SatelliteContractVersionAttribute Атрибут используется для использования существующих вспомогательных сборок и указывает, что диспетчеру ресурсов не нужно повторно развертывать их с новой версией основной сборки.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,

Дополнительные сведения о поддержке версий вспомогательных сборок см. в статье получение ресурсов.For more information about versioning support for satellite assemblies, see the article Retrieving Resources.

<Узел файла конфигурации > сателлитеассемблиес<satelliteassemblies> Configuration File Node

Для исполняемых файлов, развернутых и запускаемых из веб-сайта (файлы HREF. ResourceManager exe), объект может выполнять поиск вспомогательных сборок через Интернет, что может повредить производительность приложения.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. Чтобы устранить проблему с производительностью, можно ограничить эту проверку вспомогательными сборками, развернутыми вместе с приложением.To eliminate the performance problem, you can limit this probing to the satellite assemblies that you have deployed with your app. Для этого необходимо создать <satelliteassemblies> узел в файле конфигурации приложения, чтобы указать, что вы развернули конкретный набор культур для приложения, и ResourceManager что объект не должен пытаться проверить наличие языка и региональных параметров, не перечисленных в этом узле.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.

Примечание

Предпочтительным вариантом создания <satelliteassemblies> узла является использование функции манифеста развертывания ClickOnce .The preferred alternative to creating a <satelliteassemblies> node is to use the ClickOnce Deployment Manifest feature.

В файле конфигурации приложения создайте раздел следующего вида: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>  

Измените сведения о конфигурации следующим образом:Edit this configuration information as follows:

  • Укажите один или несколько <assembly> узлов для каждой развертываемой главной сборки, где каждый узел указывает полное имя сборки.Specify one or more <assembly> nodes for each main assembly that you deploy, where each node specifies a fully qualified assembly name. Укажите имя основной сборки вместо маинассемблинамеи укажите Versionзначения атрибутов, PublicKeyTokenи Culture , соответствующие вашей основной сборке.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.

    Version Для атрибута укажите номер версии сборки.For the Version attribute, specify the version number of your assembly. Например, первым выпуском сборки может быть номер версии 1.0.0.0.For example, the first release of your assembly might be version number 1.0.0.0.

    Для атрибута укажите ключевое слово null , если вы не подписаны на сборку строгим именем или не указали токен открытого ключа, если сборка подписана. PublicKeyTokenFor 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.

    Для атрибута укажите ключевое слово neutral , чтобы обозначить ResourceManager основную сборку и вызвать <culture> проверку класса только для языков и региональных параметров, перечисленных в узлах. CultureFor 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.

    Дополнительные сведения о полных именах сборок см. в статье имена сборок.For more information about fully qualified assembly names, see the article Assembly Names. Дополнительные сведения о сборках со строгими именами см. в статье Создание и использование сборок со строгими именами.For more information about strong-named assemblies, see the article Creating and Using Strong-Named Assemblies.

  • Укажите один или несколько <culture> узлов с указанным именем языка и региональных параметров, например "fr-FR", или нейтральное имя языка и региональных параметров, например "fr".Specify one or more <culture> nodes with a specific culture name, such as "fr-FR", or a neutral culture name, such as "fr".

Если ресурсы необходимы для любой сборки <satelliteassemblies> ResourceManager , не указанной в узле, класс проверяет язык и региональные параметры, используя стандартные правила проверки.If resources are needed for any assembly not listed under the <satelliteassemblies> node, the ResourceManager class probes for cultures using standard probing rules.

Приложения Магазин Windows 8.xWindows 8.x StoreМагазин Windows 8.xWindows 8.x Store Apps

Важно!

Несмотря на ResourceManager то, что класс Магазин Windows 8.xWindows 8.x Store поддерживается в приложениях, его использование не рекомендуется.Although the ResourceManager class is supported in Магазин Windows 8.xWindows 8.x Store apps, we do not recommend its use. Используйте этот класс только при разработке Переносимая библиотека классовPortable Class Library проектов, которые можно использовать с Магазин Windows 8.xWindows 8.x Store приложениями.Use this class only when you develop Переносимая библиотека классовPortable Class Library projects that can be used with Магазин Windows 8.xWindows 8.x Store apps. Чтобы извлечь ресурсы из Магазин Windows 8.xWindows 8.x Store приложений, используйте вместо него класс Windows. ApplicationModel. Resources. ResourceLoader .To retrieve resources from Магазин Windows 8.xWindows 8.x Store apps, use the Windows.ApplicationModel.Resources.ResourceLoader class instead.

Для Магазин Windows 8.xWindows 8.x Store приложенийResourceManager класс получает ресурсы из файлов индекса ресурсов пакета (PRI).For Магазин Windows 8.xWindows 8.x Store apps, the ResourceManager class retrieves resources from package resource index (PRI) files. Один PRI-файл (файл пакета приложения PRI) содержит ресурсы для языка и региональных параметров по умолчанию, а также любых локализованных языков и региональных параметров.A single PRI file (the application package PRI file) contains the resources for both the default culture and any localized cultures. Используйте служебную программу передаваемые программе MakePRI для создания PRI-файла из одного или нескольких файлов ресурсов в формате 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. Для ресурсов, которые включены в проект Visual Studio, Visual Studio обрабатывает процесс создания и упаковки PRI-файла автоматически.For resources that are included in a Visual Studio project, Visual Studio handles the process of creating and packaging the PRI file automatically. Затем можно использовать класс .NET Framework ResourceManager для доступа к ресурсам приложения или библиотеки.You can then use the .NET Framework ResourceManager class to access the app's or library's resources.

Вы можете создать экземпляр ResourceManager объекта Магазин Windows 8.xWindows 8.x Store для приложения так же, как и для классического приложения.You can instantiate a ResourceManager object for a Магазин Windows 8.xWindows 8.x Store app in the same way that you do for a desktop app.

Затем можно получить доступ к ресурсам для определенного языка и региональных параметров, передав имя ресурса для извлечения GetString(String) в метод.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. По умолчанию этот метод возвращает ресурс для языка и региональных параметров, определяемых текущим языком и региональными параметрами пользовательского интерфейса потока, который выполнил вызов.By default, this method returns the resource for the culture determined by the current UI culture of the thread that made the call. Можно также получить ресурсы для определенной культуры, передав имя ресурса и CultureInfo объект, представляющий язык и региональные параметры, ресурсы которых необходимо извлечь GetString(String, CultureInfo) в метод.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. Если не удается найти ресурс для текущего языка и региональных параметров пользовательского интерфейса или указанный язык и региональные параметры, диспетчер ресурсов использует список резервных языков интерфейса пользователя для поиска подходящего ресурса.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.

Конструкторы

ResourceManager() ResourceManager() ResourceManager() ResourceManager()

Инициализирует новый экземпляр класса ResourceManager со значениями по умолчанию.Initializes a new instance of the ResourceManager class with default values.

ResourceManager(String, Assembly) ResourceManager(String, Assembly) ResourceManager(String, Assembly) ResourceManager(String, Assembly)

Инициализирует новый экземпляр класса ResourceManager, который ищет ресурсы, содержащиеся в файлах с указанным корневым именем, в данной сборке.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) ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type)

Инициализирует новый экземпляр класса ResourceManager, который использует указанный класс ResourceSet для поиска ресурсов, содержащихся в файлах с указанным корневым именем, в данной сборке.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) ResourceManager(Type) ResourceManager(Type) ResourceManager(Type)

Инициализирует новый экземпляр класса ResourceManager, который ищет ресурсы в сопутствующих сборках, используя сведения из указанного объекта типа.Initializes a new instance of the ResourceManager class that looks up resources in satellite assemblies based on information from the specified type object.

Поля

BaseNameField BaseNameField BaseNameField BaseNameField

Указывает имя корневой папки файлов ресурсов, в которой класс ResourceManager ищет ресурсы.Specifies the root name of the resource files that the ResourceManager searches for resources.

HeaderVersionNumber HeaderVersionNumber HeaderVersionNumber HeaderVersionNumber

Указывает версию заголовков файлов ресурсов, которую текущая реализация ResourceManager может интерпретировать и создавать.Specifies the version of resource file headers that the current implementation of ResourceManager can interpret and produce.

MagicNumber MagicNumber MagicNumber MagicNumber

Содержит номер, используемый для идентификации файлов ресурсов.Holds the number used to identify resource files.

MainAssembly MainAssembly MainAssembly MainAssembly

Задает главную сборку, содержащую ресурсы.Specifies the main assembly that contains the resources.

ResourceSets ResourceSets ResourceSets ResourceSets

Содержит объект Hashtable, который возвращает сопоставление языков и региональных параметров с объектами ResourceSet.Contains a Hashtable that returns a mapping from cultures to ResourceSet objects.

Свойства

BaseName BaseName BaseName BaseName

Возвращает имя корневой папки файлов ресурсов, в которой класс ResourceManager ищет ресурсы.Gets the root name of the resource files that the ResourceManager searches for resources.

FallbackLocation FallbackLocation FallbackLocation FallbackLocation

Получает или задает местоположение, из которого извлекаются резервные ресурсы по умолчанию.Gets or sets the location from which to retrieve default fallback resources.

IgnoreCase IgnoreCase IgnoreCase IgnoreCase

Получает или задает значение, которое указывает, позволяет ли диспетчер ресурсов выполнять поиск ресурсов с учетом регистра методами GetString(String) и GetObject(String).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 ResourceSetType ResourceSetType ResourceSetType

Получает тип объекта набора ресурсов, используемый диспетчером ресурсов для построения объекта ResourceSet.Gets the type of the resource set object that the resource manager uses to construct a ResourceSet object.

Методы

CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type)

Возвращает объект ResourceManager, который имеет ресурсы в конкретном каталоге, вместо просмотра манифеста сборки.Returns a ResourceManager object that searches a specific directory instead of an assembly manifest for resources.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly)

Возвращает сведения, относящиеся к конкретному языку и региональным параметрам, для ресурсов основной сборки по умолчанию путем получения значения атрибута NeutralResourcesLanguageAttribute в указанной сборке.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) GetObject(String) GetObject(String) GetObject(String)

Возвращает значение указанного нестрокового ресурса.Returns the value of the specified non-string resource.

GetObject(String, CultureInfo) GetObject(String, CultureInfo) GetObject(String, CultureInfo) GetObject(String, CultureInfo)

Получает значение указанного нестрокового ресурса, локализованного для указанного языка и региональных параметров.Gets the value of the specified non-string resource localized for the specified culture.

GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo)

Создает имя файла ресурсов для заданного объекта CultureInfo.Generates the name of the resource file for the given CultureInfo object.

GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean)

Извлекает набор ресурсов для определенного языка и региональных параметров.Retrieves the resource set for a particular culture.

GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly)

Возвращает версию, указанную атрибутом SatelliteContractVersionAttribute в заданной сборке.Returns the version specified by the SatelliteContractVersionAttribute attribute in the given assembly.

GetStream(String) GetStream(String) GetStream(String) GetStream(String)

Возвращает неуправляемый объект потока памяти из заданного ресурса.Returns an unmanaged memory stream object from the specified resource.

GetStream(String, CultureInfo) GetStream(String, CultureInfo) GetStream(String, CultureInfo) GetStream(String, CultureInfo)

Возвращает объект потока неуправляемой памяти из заданного ресурса, используя заданный язык и региональные параметры.Returns an unmanaged memory stream object from the specified resource, using the specified culture.

GetString(String) GetString(String) GetString(String) GetString(String)

Возвращает значение указанного строкового ресурса.Returns the value of the specified string resource.

GetString(String, CultureInfo) GetString(String, CultureInfo) GetString(String, CultureInfo) GetString(String, CultureInfo)

Возвращает значение строкового ресурса, локализованного для указанного языка и региональных параметров.Returns the value of the string resource localized for the specified culture.

GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean)

Предоставляет реализацию для обнаружения набора ресурсов.Provides the implementation for finding a resource set.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ReleaseAllResources() ReleaseAllResources() ReleaseAllResources() ReleaseAllResources()

Сообщает диспетчеру ресурсов, что следует вызвать метод Close() на всех объектах ResourceSet и освободить все ресурсы.Tells the resource manager to call the Close() method on all ResourceSet objects and release all resources.

ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Применяется к

Потокобезопасность

Данный тип потокобезопасен.This type is thread safe.

Дополнительно