设置我所有表单的Localizable属性

时间:2012-01-26 00:26:12

标签: winforms visual-studio-2010 localization

有没有办法自动化这个属性的集合?我们有数以百计的表格需要进行本地化,这将是一个噩梦,所有这些都将此属性设置为true。

有没有办法让visual studio将解决方案/项目中的所有表单设置为Localizable = true如何?

2 个答案:

答案 0 :(得分:4)

创建新的Windows窗体时,它没有* .resx文件和designer.cs文件中的相关代码。当您将Form的Localizable属性设置为True时,VS会将以下代码添加到designer.cs,但它也会生成并添加* .resx文件。

        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form2));
        this.SuspendLayout();
        // 
        // Form2
        // 
        resources.ApplyResources(this, "$this");
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.Name = "Form2";
        this.ResumeLayout(false);

由于VS添加了* .resx文件,因此无法查找和替换或剪切和粘贴代码。

我尝试录制一个VS宏来自动化它但是,它不会记录将Localizable属性更改为True(不确定原因)

这个临时宏可能是你的开始。您可以编写获取表单文件名的列表,并使用下面的宏代码循环访问它们。

    DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
    DTE.ActiveWindow.Object.GetItem("WindowsFormsApplication1\WindowsFormsApplication1\Form3.cs").Select(vsUISelectionType.vsUISelectionTypeSelect)
    DTE.ActiveWindow.Object.DoDefaultAction()
    DTE.Windows.Item(Constants.vsWindowKindProperties).Activate()

答案 1 :(得分:1)

它由表单的.resx文件中的以下条目(针对.NET Framework版本调整)表示:

<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
</metadata>

自动将所有值切换为true的最简单方法可能是运行Form子类文件,将其.resx文件作为XML加载以测试元素是否存在,如果不存在则添加它。或者,您可以使用ResXResourceReader和ResXResourceWriter来读取和写入文件内容。