Как получить свойство Localizable и поддержку в моем собственном инструменте дизайна? - PullRequest
8 голосов
/ 03 февраля 2009

Обзор

В другом вопросе я спросил о развертывании локализаций для некоторой скомпилированной среды выполнения UserControl . Однако прежде чем я смогу приступить к развертыванию локализаций, мне нужен способ локализации элементов управления.

Фон

Элементы управления создаются нашим собственным дизайнером в стиле WinForms (с использованием поддержки .NET для поверхностей проектирования и т. Д.) И сохраняются в двоичном формате, который объединяет CodeCompileUnit, resx ресурса и пользовательский источник в один файл. Эти файлы затем компилируются в сборку, когда это необходимо, во время выполнения другим инструментом.

Чтобы локализовать их, нам нужно сообщить разработчику и сериализации, что значения локализуемых свойств должны храниться в ресурсах. Дизайнер VisualStudio WinForms делает это, используя свойство расширения Localizable и связанное свойство для указания культуры по умолчанию. Нам нужно это свойство в нашем конструкторе, если это возможно.

Ограничения

Нам нужен наш автономный дизайнерский инструмент, который прост в использовании для типов, не принадлежащих разработчику, а также ограничивает определенные действия, поэтому использование бесплатной версии Visual Studio (например, C # Express) не будет работать (я уже разбил его и не удалось); поэтому любое решение о том, как мы локализуем эти UserControl, должно компенсировать это.

Вопрос

Можем ли мы получить поддержку Localizable в нашем собственном конструкторе WinForms?

  • Если да, то как?
  • Если нет, какие существуют альтернативы локализации наших UserControl? например пост-обработка как-то, другой формат файла и т. д.

Ответы [ 2 ]

3 голосов
/ 03 августа 2009

Я не уверен, правильно ли я понял ваш вопрос.

Просто проверьте System.ComponentModel.LocalizableAttribute во всех свойствах для (де) сериализации, если ваш элемент управления является Localizable.

// Gets the attributes for the property.
AttributeCollection attributes = 
TypeDescriptor.GetProperties(this)["MyProperty"].Attributes;

// Checks to see if the property needs to be localized.
LocalizableAttribute myAttribute = 
(LocalizableAttribute)attributes[typeof(LocalizableAttribute)];
if(myAttribute.IsLocalizable) {
// Insert code for handling resource files here.
}

Поскольку вы решили написать свой собственный дизайнер, вы должны сделать это самостоятельно.

1 голос
/ 09 августа 2009

Вам необходимо добавить System.ComponentModel.Design.LocalizationExtenderProvider к вашей поверхности дизайна.

...