使用具有状态更改的表单设计器本地化Winforms

时间:2017-12-13 15:56:30

标签: c# .net winforms visual-studio localization

我遇到一个问题,即在Windows窗体设计器中使用localizable属性时。我有一个标签,其资源文件设置了Text属性,并且我希望在单击按钮时该文本更改为资源文件中的另一个字符串。将新字符串添加到资源文件或使用资源管理器获取字符串没有问题。问题是,每次打开表单设计器时,资源生成器都会清除手动添加的新字符串。

问:有没有办法,使用最佳做法,从设计师那里生成本地化资源,手动创建的本地资源可以快乐地生活在一起?

我的印象是,Microsoft文档声明不要将项目和表单资源文件混合用于本地化,这就是我没有采用这种方法的原因。虽然我可能误解了this document中指出的理性。

编辑:可重复的步骤

1。使用按钮(button1)和标签(label1)创建窗体(Form1)

2。设置label1.Text = "Hello";

3。将设计器中Form1的localizable属性设置为 true

4. 在生成的Form1.resx文件中,添加名为" strWorld"的字符串资源。值为" world"。当您开始输入时,请在出现的消息框中单击“确定”;同意你愚蠢地修改作为表格一部分的资源文件。

第5步和第6步可选

5. 添加以下eventHandler

private void button1_Click(object sender, EventArgs e)
{
   ResourceManager resources = new ComponentResourceManager(typeof(Form1));
   label1.Text = resources.GetString("strWorld");
}

6. 构建并启动应用程序以验证按钮是否正常运行

7。返回设计师并将按钮按一两个像素(或更改其他任何内容)

8。返回Form1.resx以找到strWorld消失。

我试图找出如何在不同语言中可视化地对齐元素,利用表单设计器,具有从所述资源文件更改元素属性并保持在推荐实践中的控件。是否必须围绕此使用自己的代码或使用第三方解决方案,还是只有我缺少的东西?当然这是一个很常见的问题。

1 个答案:

答案 0 :(得分:0)

我认为微软希望你做定义文本

  • 在设计师或
  • 源代码中的

如果启用本地化,则在设计器中指定的文本将存储在与表单或用户控件关联的本地resx文件中。

对于设计器中的每个属性,您只能指定一个文本。

如果要在运行时更改文本,则应在源代码中定义文本,并从代码中更新。

Microsoft希望您使用命名资源本地化此文本,该资源将在项目级别的Resources.resx文件中定义。本地化版本将在Resources.resx的本地化版本中。

(如果您在与表单关联的“本地”资源文件中定义自己的其他资源,设计人员可能会丢弃它们。)

我不知道这是否是“最佳做法”,但我认为这是微软希望你工作的方式。