Интернациональные приложения ASP.NET
Глобальные ресурсы
Глобальные ресурсы – это файлы ресурсов, которые размещены в приложении и доступны в рамках всего проекта. Глобальные файлы ресурсов являются наиболее часто используемым типом ресурсов в приложениях на базе .NET Framework. Файлы ресурсов могут содержать строки, изображения и бинарное содержимое (например, содержимое файла). При этом каждый ресурс имеет собственное имя. Имя необходимо для того, чтобы к этому ресурсу можно было обратиться.
Файлы ресурсов имеют расширение "resx". В одном приложении может содержаться несколько файлов ресурсов. Для добавления файла ресурсов необходимо выбрать пункт "Add new item" в контекстном меню проекта.
В появившемся диалоге следует выбрать шаблон "Resource File".
После создания файла ресурсов его можно открыть в Visual Studio встроенным редактором ресурсов и добавить туда необходимые значения. Добавление строковых ресурсов выглядит следующим образом.
Также в файл ресурсов можно добавить изображения и другие ресурсы. Для этого нужно выбрать соответствующую опцию.
При добавлении изображений, они также появятся в списке файла ресурса.
Однако, физически файл изображения хранится в проекте в специальной папке для хранения ресурсов. Файл ресурсов содержит только ссылку на это изображение.
После добавления всех необходимых ресурсов в файл ресурса в проекте будет содержаться файл "Resource1.resx". Содержимое этого ресурсного файла будет использоваться по умолчанию при обращении к этому ресурсу. Если необходимо создать файл ресурсов для конкретной культуры, следует скопировать файл ресурсов и создать в проекте одноименный файл, но содержащий суффикс в имени, соответствующий определенной культуре. Например, можно создать два файла ресурсов – для русскоязычной и англоязычной культуры.
В этом случае следует изменить содержимое файлов для каждой культуры. Имена ресурсов внутри ресурсного файла должны оставаться неизменными.
Аналогичным образом можно создать файлы ресурсов для всех необходимых культур.
Для получения доступа к информации из ресурсного файла используется объект "ResourceManager" из пространства имен "System.Resources". Однако, использовать этот класс не всегда удобно, поскольку для обращения к содержимому ресурсного файла требуется написать некоторое количество избыточного программного кода.
Для того, чтобы сделать работу с файлами ресурсов более удобной, при создании файла ресурсов, наряду с файлом "resx" создается автогенерируемый код на языке C#, который содержит весь необходимый код для обращения к данным из файла ресурсов. В нашем случае этот файл называется "Resource1.Designer.cs".
Таким образом, для обращения к файлу ресурсов следует пользоваться уже готовыми классами, которые позволяют получить информацию из файла ресурсов. Имя класса, который позволяет обратиться к ресурсам в данном случае будет эквивалентно имени файла ресурсов. Поскольку в нашем случае мы создали ресурсный файл с именем "Resource1.resx", то для обращения к ресурсам следует использовать класс "Resource1". Этот класс содержит свойства для всех значений файла ресурсов. Обращаясь к этим свойствам можно получить содержимое файла ресурсов.
Как видно, класс, представляющий ресурсный файл содержит не только строковые свойства, но и позволяет получить доступ к бинарным данным (в нашем случае это изображение).
Аналогичным образом можно обратиться к файлу ресурсов из разметки страницы.
При обращении к ресурсному файлу всегда учитывается текущая культура. Таким образом, если к созданному нами приложению обращаются пользователи с различной культурой, они будут видеть содержимое, которое получено из соответствующего ресурсного файла:
- пользователи с русскоязычной культурой – значение из файла "Resource1.ru.resx";
- пользователи с англоязычной культурой – значение из файла "Resource1.en.resx";
- остальные пользователи – значение из основного файла "Resource1.resx".
Таким образом, файлы ресурсов позволяют отделить логику приложения от данных, которые должны быть представлены на различных языках.
Краткие итоги
Глобальные ресурсы – это файлы ресурсов, информация из который доступна для всех программных компонентов приложения. Глобальные ресурсы могут содержать данные различных типов – строки, изображения и бинарные данные. Для обращения к глобальным ресурсам используется объект "ResourceManager". Однако, для более удобного обращения к ресурсным файлам используется автоматически генерируемый класс для данного файла ресурсов. Этот класс содержит набор статических свойств, которые позволяют получить данные для конкретного ключа файла ресурсов.