从类库中的一个文件本地化表单控件

时间:2018-05-31 16:09:17

标签: c# winforms localization controls

我正在开发一个C#WinForms应用程序。随着将来将应用程序迁移到ASP.NET的想法,解决方案有2个项目;

  1. 具有数据访问类的类库项目和具有每个类/模型的文件的“模型”文件夹。
  2. Windows Forms App项目,包含所有表单,用户控件及其逻辑。
  3. 本地化的新内容,我阅读了Microsoft的this文章。根据他们的第一步“Localization Best Practices”,建议将所有可本地化的资源移动到单独的仅资源DLL。

    因为我的解决方案中已经有一个类库项目(项目1),所以我添加了一个新文件夹“Localization”并创建了两个资源文件“Strings.resx”和“Strings.en.resx”。 (默认语言为荷兰语。)

    为了测试这个推荐的设置,我清除了主窗体上其中一个按钮的text属性,将其替换为我创建的资源文件中的值。但我无法弄清楚如何将资源文件的值连接到文本属性。

    我发现this帖子已经完全以编程方式完成,但我不确定这是否是唯一/最好的方法。如何通知ResourceManager其他项目中的资源文件(在同一解决方案中)。在默认情况下,每个表单不使用资源文件时,是否还需要将表单的Localizable属性设置为True?

    欢迎任何向我发送正确方向的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用这些资源文件,例如普通类。您只需要通过将它们公开,从类库外部访问您的资源。为此,您可以使用以下任一选项:

  • 您可以双击资源文件并在设计模式下打开它,并在其工具栏中将Public下拉列表设置为Custom Tool

  • 您可以右键单击资源文件并单击属性,然后在属性窗口中将PublicResXFileCodeGenerator设置为saveButton.Text = MyResourceAssembly.Resources.StringResources.Save;

然后,资源类将作为程序集中的公共类生成。

然后,要访问这些资源,您可以添加程序集作为对Windows应用程序的引用,并像使用其他类一样使用它们,例如:

Localizable

注意:

  • 通常,Windows Forms应用程序本地化与ASP.NET应用程序不同。在Windows表单中,您依赖LanguageIDataErrorInfo表单属性,例如AbstractAccountAuthenticator

  • 如果您出于任何原因想要使用这些资源文件,可以查看此described here示例,该示例允许您在设计时使用资源文件设置控件文本。

  • 如果您支持的语言中存在RTL语言的可能性,您可能需要使用RTL表单,或者使用resource extender

  • 最好使用数据注释属性修饰模型类,并尝试在Windows窗体中使用这些属性。例如,您可以为模型实现<link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.1/css/bulma.css" rel="stylesheet" /> <figure class="image is-128x128"> <img src="https://bulma.io/images/placeholders/256x256.png"> <a class="delete is-medium" style="position: absolute; top: 0; right: 0;"></a> </figure>,并在Windows窗体和ASP.NET MVC中使用数据注释验证属性。