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

时间:2009-02-03 15:21:35

标签: winforms localization internationalization c#-2.0 windows-forms-designer

概述

在另一个问题中,我询问了deploying localizations for some runtime compiled UserControl's。但是,在我可以部署本地化之前,我需要一种本地化控件的方法。

背景

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

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

约束

我们需要我们的独立设计器工具,它非常容易用于非开发人员类型以及限制某些操作,因此使用免费版的Visual Studio(即C#Express)是行不通的(我已经投入使用它了)并且失败了);因此,我们如何本地化这些UserControl的需求来解决这个问题。

问题

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

  • 如果是,怎么样?
  • 如果不是,我们UserControl的本地化有哪些替代方案?例如以某种方式后处理,不同的文件格式等。

2 个答案:

答案 0 :(得分:3)

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

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

// 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 :(得分:1)