Ресурсы
Ресурсы могут использоваться в библиотеках для хранения сообщений об ошибках,
меток и значков. Статья MSDN Ресурсы и локализация в
.NET Framework SDK
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptutorials/html/Resources_and_Localization_using_the__NET_Framework_SDK.asp)
– хороший источник исходной информации по модели ресурсов .NET Framework.
Существует две модели, которые могут использовать разработчики при
организации своих ресурсов. Первая – поместить все ресурсы, включая
нейтральные ресурсы (neutral resources), в сопутствующие
сборки, освободив от них основную сборку. Вторая модель – поместить нейтральные
ресурсы в основную сборку, а остальные ресурсы – в сопутствующие сборки.
Комментарий: Первая из описанных выше моделей –
Все ресурсы в сопутствующих сборках – не поддерживается в V1.0 и V1.1.
Не вносите строки в исходный код, храните все строки в
ресурсах.
string errorMsg = “File not found. Please check the path.”;
Этот код трудно локализовать, потому что строка находится в коде, поэтому
единственный способ локализовать ее – предоставить исполняемый файл для каждой
культуры.
string errorMsg = resourceManager.GetString(“FileNotFound”);
Этот код проще локализовать, и хранение всех сообщений в ресурсах разъединяет
их с исходным кодом. Также создание вспомогательных сборок для ваших
локализованных ресурсов упростит поддержку многих языков в будущем.
Храните все ресурсы, включая нейтральные, в сопутствующих
сборках. В этом случае их проще локализовать, проще настраивать и быстрее
загружать или скачивать, если это загружаемая библиотека.
Комментарий: Возможно, в некоторых ситуациях,
когда именно ваш нейтральный язык будет использоваться большинством ваших
пользователей, надо рассмотреть размещение нейтральных ресурсов в основной
сборке.
Включайте в имена создаваемых сопутствующих сборок слово
.resources, как, например, "MyLibrary.resources.dll", при том, что имя основной
сборки – "MyLibrary.dll”.
Не задавайте культуру в основной сборке. Основная сборка
используется для кода, и должна содержать только нейтральные ресурсы.
Чтобы сборка была нейтральной с точки зрения культуры, не вводите атрибут
culture в нее и не задавайте культуру в компоновщике при генерировании
основной сборки. Например, не делайте ничего из нижеприведенного.
[assembly:AssemblyCultureAttribute(“en”)]// Задание культуры English
al /out:MyLibrary.DLL /embed:ErrorStrings.resources /culture:en
Не вставляйте название культуры в имена ресурсов манифеста в
основной сборке.
Основная сборка содержит нейтральные к языкам ресурсы, и эти ресурсы должны
быть нейтральными к культуре. Имя ресурса манифеста в основной сборке не должно
содержать имени культуры, например, ErrorStrings.en.resources. Именем ресурса
манифеста должно быть ErrorStrings.resources. Это можно проконтролировать
вручную с помощью инструмента ildasm.exe для проверки имен ресурсов в манифесте
сборки.
Задавайте культуру в сопутствующей сборке.
Применяйте атрибут NeutralResourcesLanguageAttribute к
основной сборке.
Чтобы использовать атрибут NeutralResourcesLanguageAttribute
в основной сборке, язык нейтральных ресурсов которой – “en”, и нейтральные
ресурсы находятся в сопутствующей сборке, используйте следующий код.
[Assembly:NeutralResourcesLangaugeAttribute(“en”,
UltimateResourceFallbackLocation.ResourceLocation = Satellite)]
Чтобы использовать атрибут NeutralResourcesLanguageAttribute
в основной сборке, язык нейтральных ресурсов которой – “en”, и нейтральные
ресурсы находятся в основной сборке, используйте следующий код.
[Assembly:NeutralResourcesLangaugeAttribute(“en”,
UltimateResourceFallbackLocation.ResourceLocation = MainAssembly)]
Не вводите код в сопутствующие сборки, поскольку они
предназначены только для ресурсов.
Каждая сопутствующая сборка соответствует определенной культуре. У каждого
исполняемого файла может быть множество сопутствующих сборок, содержащих
ресурсы, локализованные для многих культур. Если вы добавите код в сопутствующие
сборки, то получите множество его копий, что увеличивает эксплуатационные
затраты.
Присваивание имен ресурсам
Поскольку к ресурсам можно обратиться посредством определенных объектов, как
к свойствам, рекомендации по присваиванию имен ресурсам аналогичны рекомендациям
по свойствам.
Применяйте в идентификаторах ресурсов Pascal нотацию.
Предоставляйте описательные, а не краткие идентификаторы.
Конечно, по возможности, будьте лаконичными, но не за счет информативности.
Не используйте ключевые слова основных языков CLR.
Не используйте синтаксические символы, которые могут иметь
специальное значение, такие как арифметические операторы (+, -, /, * или %), или
группирующие символы ({, }, (, ), [ или ]).
Не начинайте имена идентификаторов ресурсов с цифры.
Применяйте точку для отделения вложенных идентификаторов с
четкой иерархией. Например, если вы разрабатываете ресурсы системы меню, их
имена могут быть обозначены следующим образом:
- Menus.FileMenu.Close.Text
- Menus.FileMenu.Close.Color
- Menus.FileMenu.SaveAs.Text
- Menus.HelpMenu.About.Text
Следуйте такой традиции присваивания имен ресурсам сообщений
об ошибках. Идентификатор ресурса должен содержать имя типа исключения плюс
через точку короткий идентификатор самого исключения:
- ArgumentException.IllegalCharacters
- ArgumentException.InvalidName
- ArgumentException.FileNameIsMalformed