【问题标题】:Set the Localizable property of all my forms设置我所有表单的 Localizable 属性
【发布时间】:2012-01-26 00:26:11
【问题描述】:

有没有办法自动设置这个属性?我们有数百个表单需要本地化,将所有表单都设置为 true 将是一场噩梦。

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

【问题讨论】:

  • 子类形式,然后查找替换?
  • 它不是 .NET Form 类的一部分,它是一个 Visual Studio 属性

标签: winforms visual-studio-2010 localization


【解决方案1】:

当您创建一个新的 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()

【讨论】:

    【解决方案2】:

    它在表单的 .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 来读取和写入文件内容。

    【讨论】:

    • 它没有达到您的预期吗?如果在将元数据元素添加到 .resx 文件后在设计器中打开表单,您会在表单的属性表中看到 Localizable 属性的真值还是假值?
    • 您使用的是哪个版本的 Visual Studio?您的运行时目标是哪个 .NET Framework 版本?
    • 嗯,在这种配对下它对我来说效果很好,所以我不太确定还有什么建议......编辑后 .resx 文件的内容是否与设计器完全匹配如果您通过设计器 UI 修改属性会生成?
    • 将代码添加到.resx文件后,Visual Studio在重新打开表单时显示Localizable=true,但遗憾的是它没有添加从资源文件中检索字符串的代码。
    • @NicoleCalinoiu,这是正确的。问题是如何设置标志,这样做。当然,本地化涉及的工作不仅仅是设置标志。在这些更改生效之前,ResX 文件必须包含在项目中。
    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多