代码之家  ›  专栏  ›  技术社区  ›  Jeff Yates

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

  •  8
  • Jeff Yates  · 技术社区  · 17 年前

    概述

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

    出身背景

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

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

    约束条件

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

    问题

    我们能在自定义WinForms designer中获得本地化支持吗?

    • 如果是,怎么做?
    • 如果没有,还有什么替代方案来本地化我们的产品 用户控制 是什么?e、 g.后处理、不同的文件格式等。
    2 回复  |  直到 9 年前
        1
  •  3
  •   Stefan Haubold    17 年前

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

    检查一下 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.
    }
    

    既然你决定写自己的设计师,你就必须自己写。

        2
  •  1
  •   Alex Lyman    17 年前

    你需要添加一个 System.ComponentModel.Design.LocalizationExtenderProvider 到你的设计表面。