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

Localize form controls from one file in Class Library

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

  1. Class 具有数据访问权限的库项目 class 和文件夹 "Model" 每个 class/model 有一个文件。
  2. Windows 包含所有表单、用户控件及其逻辑的表单应用程序项目。

新的本地化,我读 this article by Microsoft. According to their first step of "Localization Best Practices",建议将所有可本地化的资源移动到单独的纯资源 DLL。

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

为了测试此推荐设置,我清除了主窗体上其中一个按钮的文本 属性,以将其替换为我创建的资源文件中的值。但是我不知道如何将资源文件的值连接到文本属性。

我发现 post 哪里都是以编程方式完成的,但我不确定这是否是 only/best 方法。以及如何通知 ResourceManager 有关其他项目(在同一解决方案中)中的资源文件。当不使用每个表单的资源文件时,您是否仍然需要将表单的 Localizable 属性 设置为 True,默认情况下?

欢迎任何帮助我朝着正确的方向前进!

您可以像正常 classes 一样使用这些资源文件。您只需要将资源设置为 public,即可从 class 库外部访问这些资源。为此,您可以使用以下任一选项:

  • 您可以双击资源文件并在设计模式下打开它,然后在其工具栏中将 Access Modifier 下拉菜单设置为 Public

  • 您可以右键单击资源文件并单击属性,然后在属性 window 中将 Custom Tool 设置为 PublicResXFileCodeGenerator

然后资源 class 将在您的程序集中生成为 public class。

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

saveButton.Text = MyResourceAssembly.Resources.StringResources.Save;

注:

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

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

  • 如果有可能在您支持的语言中使用 RTL 语言,您可能希望使用 RTL 形式,或者 .

  • 用数据注释属性装饰模型 classes 并尝试在 Windows 表单中使用这些属性是个好主意。例如,您可以为模型实现 IDataErrorInfo,并在 Windows 表单和 ASP.NET MVC 中使用数据注释验证属性。