"Interface" .Net 资源文件

"Interface" for .Net Resource files

我正在构建一个多语言 MVC 应用程序,并且有一系列资源文件,其中包含将显示给用户的消息的翻译字符串。

有什么方法可以确保将来添加的任何资源文件都具有所有必需的键并且拼写正确吗?

打个比方,如果资源文件是一个常规 class,您可以提供一个接口来确保所有必需的方法和属性都存在于实现 class 中。资源文件有类似的概念吗?

我一直无法找到一种受支持的方式来对 .resx 文件执行明确的合同。由于您的目标最终是在 运行 时间出现之前捕获实现错误(并且不可能进行编译时检查),因此我建议回退到静态代码分析。幸运的是,.NET 使这一切变得非常简单:

  • 使用 System.Resources.ResXResourceReader class 读取要验证的 resx 文件的内容。
  • 实施一项针对 "contract" 中所有必需的键进行断言的测试,您希望在 resx 上强制执行。
  • 测试应 运行 作为现有测试套件的一部分,失败将在 运行 遇到问题之前警告开发人员隐式契约。
  • 由于您的资源文件将存在于已知位置,因此您可以轻松确保针对该目录中的所有 resx 文件进行测试 运行。这样,你甚至不需要在添加新资源文件时更新测试,只有在契约发生变化时才需要更新。

我使用了类似的方法来帮助维护保存在(大量)resx 文件中的存储过程名称。由于资源文件分布在数十个项目中,手动维护既乏味又容易出错——换句话说,它无法完成。静态代码分析方法几乎没有缺点,我认为它也适用于您的情况。

System.Resources.ResXResourceReader 需要引用 System.Windows.Forms。它在 .NET 和 Mono 上都可用。