有没有办法自动设置这个属性?我们有数百种表单需要本地化,将所有这些表单设置为 true 将是一场噩梦。
有没有办法让 Visual Studio 将解决方案/项目中的所有表单设置为 Localized = true?
当您创建一个新的Windows Form时,它没有*.resx文件以及designer.cs文件中的相关代码。当您将 Form 的 Localized 属性设置为 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 宏来自动化它,但是,它不会记录将可本地化属性更改为 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()
它由表单的 .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 来读取和写入文件内容。