8

概述

在另一个问题中,我询问了有关为某些运行时编译UserControl. 但是,在我开始部署本地化之前,我需要一种本地化控件的方法。

背景

这些控件由我们自己的 WinForms 样式设计器创建(使用 .NET 对设计图面的支持等),并保存为将CodeCompileUnit、资源 resx 和用户源合并到一个文件中的二进制格式。这些文件然后在运行时由另一个工具编译成适当的程序集。

为了本地化这些,我们需要告诉设计者和序列化可本地化的属性值将存储在资源中。VisualStudio WinForms 设计器使用名为的扩展属性Localizable和用于指定默认区域性的关联属性来执行此操作。如果可能,我们需要在自定义设计器中使用此属性。

约束

我们需要我们的独立设计器工具,该工具易于用于非开发人员类型并限制某些操作,因此使用 Visual Studio 的免费版本(即 C# Express)是行不通的(我已经投过它但失败了) ; 因此,我们如何本地化这些 UserControl 的任何解决方案都需要对此进行补偿。

问题

我们可以在我们的自定义 WinForms 设计器中获得 Localizable 支持吗?

  • 如果是,如何?
  • 如果不是,有什么替代方法可以本地化我们UserControl的 's?例如以某种方式进行后处理,不同的文件格式等。
4

2 回答 2

3

我不确定我是否正确理解了您的问题。

如果您的控件是可本地化的,只需检查所有要(反)序列化的属性上的System.ComponentModel.LocalizableAttribute 。

// 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.
}

由于您决定编写自己的设计师,因此您必须自己做。

于 2009-08-03T09:32:52.113 回答
1

您需要将System.ComponentModel.Design.LocalizationExtenderProvider添加到您的设计图面。

于 2009-08-09T00:21:52.650 回答