如何在我自己的设计工具中获得Localizable属性和支持?

Jef*_*tes 8 localization internationalization windows-forms-designer winforms c#-2.0

概观

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

背景

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

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

约束

我们需要我们的独立设计器工具,它易于用于非开发人员类型以及限制某些操作,因此使用Visual Studio的免费版本(即C#Express)是行不通的(我已经支持它并且失败了) ; 因此,我们如何本地化这些UserControl需要的任何解决方案来弥补这一点.

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

  • 如果有,怎么样?
  • 如果不是,有什么替代方案来定位我们UserControl的?例如,以某种方式后处理,不同的文件格式等.

Ste*_*old 3

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

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

// 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.
}
Run Code Online (Sandbox Code Playgroud)

既然你决定编写自己的设计器,你就必须自己做这件事。