Ресурсы в приложениях .NETResources in .NET apps

Практически любое высококачественное приложение должно использовать ресурсы.Nearly every production-quality app has to use resources. Ресурс представляет собой любые неисполняемые данные, которые логически развертываются вместе с приложением.A resource is any nonexecutable data that is logically deployed with an app. Ресурсы могут отображаться в приложении в виде сообщений об ошибках либо как часть интерфейса пользователя.A resource might be displayed in an app as error messages or as part of the user interface. Ресурсы могут содержать данные различных видов, включая символьные строки, изображения и объекты.Resources can contain data in a number of forms, including strings, images, and persisted objects. (Для записи сохраняемых объектов в файл ресурсов объекты должны быть сериализуемыми.) Благодаря хранению данных в файле ресурсов сами данные можно изменять без перекомпиляции всего приложения.(To write persisted objects to a resource file, the objects must be serializable.) Storing your data in a resource file enables you to change the data without recompiling your entire app. Это также позволяет хранить данные в одном месте и исключает необходимость в использовании жестко закодированных данных, которые хранятся в нескольких местах.It also enables you to store data in a single location, and eliminates the need to rely on hard-coded data that is stored in multiple locations.

.NET Framework и .NET Core обеспечивают всестороннюю поддержку для создания и локализации ресурсов.The .NET Framework and .NET Core provide comprehensive support for the creation and localization of resources. Кроме того, .NET поддерживает простую модель упаковки и развертывания локализованных ресурсов.In addition, .NET supports a simple model for packaging and deploying localized resources.

Сведения о ресурсах ASP.NET см. в разделе Общие сведения о ресурсах страниц ASP.NET.For information about resources in ASP.NET, see ASP.NET Web Page Resources Overview.

Создание и локализация ресурсовCreate and localize resources

В нелокализованном приложении файлы ресурсов можно использовать как хранилище для данных приложения, особенно для строк, которые в противном случае было бы необходимо жестко задавать в нескольких местах в исходном коде.In a non-localized app, you can use resource files as a repository for app data, particularly for strings that might otherwise be hard-coded in multiple locations in source code. Чаще всего ресурсы создаются в виде текстовых (txt) или XML-файлов (.resx), а для их компиляции в двоичные RESOURCES-файлы используется Resgen.exe (генератор файлов ресурсов).Most commonly, you create resources as either text (.txt) or XML (.resx) files, and use Resgen.exe (Resource File Generator) to compile them into binary .resources files. Эти файлы можно затем встроить в исполняемый файл приложения с помощью компилятора языка.These files can then be embedded in the app's executable file by a language compiler. Дополнительные сведения о создании ресурсов см. в разделе Создание файлов ресурсов.For more information about creating resources, see Creating Resource Files.

Вы также можете локализовать ресурсы приложения для конкретных языков и региональных параметров.You can also localize your app's resources for specific cultures. Это позволяет создавать локализованные (переведенные) версии приложений.This enables you to build localized (translated) versions of your apps. При разработке приложения, использующего локализованные ресурсы, необходимо назначить язык и региональные параметры, являющиеся нейтральными или резервными, языком и региональными параметрами, ресурсы которого используются в случае отсутствия подходящих ресурсов.When you develop an app that uses localized resources, you designate a culture that serves as the neutral or fallback culture whose resources are used if no suitable resources are available. Как правило, ресурсы нейтрального языка и региональных параметров хранятся в исполняемом файле приложения.Typically, the resources of the neutral culture are stored in the app's executable. Остальные ресурсы для отдельных языков и региональных параметров хранятся в автономных вспомогательных сборках.The remaining resources for individual localized cultures are stored in standalone satellite assemblies. Дополнительные сведения см. в разделе Создание вспомогательных сборок.For more information, see Creating Satellite Assemblies.

Упаковка и развертывание ресурсовPackage and deploy resources

Развертывание ресурсов локализованного приложения выполняется во вспомогательных сборках.You deploy localized app resources in satellite assemblies. Вспомогательная сборка содержит ресурсы для одного языка и региональных параметров; в ней нет никакого кода приложения.A satellite assembly contains the resources of a single culture; it does not contain any app code. В модели развертывания вспомогательной сборки вы создаете приложение с одной сборкой по умолчанию (которая обычно является главной сборкой) и одной вспомогательной сборкой для каждого языка и региональных параметров, поддерживаемых приложением.In the satellite assembly deployment model, you create an app with one default assembly (which is typically the main assembly) and one satellite assembly for each culture that the app supports. Поскольку вспомогательные сборки не являются частью главной сборки, ресурсы, относящиеся к конкретному языку и региональным параметрам, можно легко заменять или обновлять, не заменяя главную сборку приложения.Because the satellite assemblies are not part of the main assembly, you can easily replace or update resources corresponding to a specific culture without replacing the app's main assembly.

Точно определите ресурсы, которые будут применяться в сборке ресурсов по умолчанию для приложения.Carefully determine which resources will make up your app's default resource assembly. Так как сборка по умолчанию является частью главной сборки, то при внесении в нее любых изменений потребуется замена главной сборки.Because it is a part of the main assembly, any changes to it will require you to replace the main assembly. Если ресурс по умолчанию не предоставлен, то в случае его поиска процессом использования резервных ресурсов будет создаваться исключение.If you do not provide a default resource, an exception will be thrown when the resource fallback process attempts to find it. В хорошо спроектированном приложении при использовании ресурсов исключения никогда не создаются.In a well-designed app, using resources should never throw an exception.

Дополнительные сведения см. в статье Упаковка и развертывание ресурсов.For more information, see the Packaging and Deploying Resources article.

Извлечение ресурсовRetrieve resources

Приложение во время выполнения загружает соответствующие локализованные ресурсы отдельно для каждого потока на основе языка и региональных параметров, которые заданы свойством CultureInfo.CurrentUICulture.At run time, an app loads the appropriate localized resources on a per-thread basis, based on the culture specified by the CultureInfo.CurrentUICulture property. Значение этого свойства формируется следующим образом:This property value is derived as follows:

  • Присвоением свойству Thread.CurrentUICulture объекта CultureInfo, который представляет локализованные значения языка и региональных параметров.By directly assigning a CultureInfo object that represents the localized culture to the Thread.CurrentUICulture property.

  • Если язык и региональные параметры не заданы явным образом, соответствующие значения по умолчанию для пользовательского интерфейса каждого потока извлекаются из свойства CultureInfo.DefaultThreadCurrentUICulture.If a culture is not explicitly assigned, by retrieving the default thread UI culture from the CultureInfo.DefaultThreadCurrentUICulture property.

  • Если язык и региональные параметры по умолчанию для пользовательского интерфейса в потоке не заданы явным образом, применяются язык и региональные параметры текущего пользователя на локальном компьютере.If a default thread UI culture is not explicitly assigned, by retrieving the culture for the current user on the local computer. В реализациях .NET на базе Windows для этого вызывается Windows-функция GetUserDefaultUILanguage..NET implementations running on Windows do this by calling the Windows GetUserDefaultUILanguage function.

Дополнительные сведения об указании языка и региональных параметров для пользовательского интерфейса см. в разделах справки CultureInfo и CultureInfo.CurrentUICulture.For more information about how the current UI culture is set, see the CultureInfo and CultureInfo.CurrentUICulture reference pages.

Ресурсы для текущего или определенного языка и региональных параметров пользовательского интерфейса можно получить с помощью класса System.Resources.ResourceManager.You can then retrieve resources for the current UI culture or for a specific culture by using the System.Resources.ResourceManager class. Хотя для получения ресурсов чаще всего используется класс ResourceManager, пространство имен System.Resources содержит дополнительные типы, которые можно использовать для получения ресурсов.Although the ResourceManager class is most commonly used for retrieving resources, the System.Resources namespace contains additional types that you can use to retrieve resources. Сюда входит следующее.These include:

  • Класс ResourceReader, который позволяет перечислять ресурсы, встроенные в сборку или хранящиеся в отдельном двоичном RESOURCES-файле.The ResourceReader class, which enables you to enumerate resources embedded in an assembly or stored in a standalone binary .resources file. Это удобно, когда точные имена ресурсов, доступных во время выполнения, неизвестны.It is useful when you don't know the precise names of the resources that are available at run time.

  • Класс ResXResourceReader, который позволяет получать ресурсы из XML-файла (.resx).The ResXResourceReader class, which enables you to retrieve resources from an XML (.resx) file.

  • Класс ResourceSet, который позволяет получать ресурсы для конкретного языка и региональных параметров без учета правил отката.The ResourceSet class, which enables you to retrieve the resources of a specific culture without observing fallback rules. Ресурсы могут храниться в сборке или отдельном двоичном RESOURCES-файле.The resources can be stored in an assembly or a standalone binary .resources file. Можно также разработать реализацию IResourceReader, которая позволит использовать класс ResourceSet для извлечения ресурсов из другого источника.You can also develop an IResourceReader implementation that enables you to use the ResourceSet class to retrieve resources from some other source.

  • Класс ResXResourceSet, который позволяет получить в память все элементы из XML-файла ресурсов.The ResXResourceSet class, which enables you to retrieve all the items in an XML resource file into memory.

См. такжеSee also