我正在构建一个多语言MVC应用程序,并拥有一系列资源文件,其中包含将向用户显示的消息的翻译字符串。
是否有任何方法可以确保将来添加的任何资源文件都具有所有必需的密钥并拼写正确?
类似地,如果资源文件是一个常规类,则可以提供一个接口来确保实现类中存在所有必需的方法和属性。资源文件有类似的概念吗?
我一直找不到一种受支持的方法来对.resx
文件强制执行显式约定。由于您的目标最终是在实现错误出现在运行时之前捕获它们(并且编译时检查是不可能的),因此我建议回到静态代码分析。幸运的是,.NET让这一切变得非常简单:
- 使用
System.Resources.ResXResourceReader
类读取要验证的resx文件的内容 - 实现一个测试,针对您希望在resx上强制执行的"契约"中的所有必需密钥进行断言
- 测试应该作为现有测试套件的一部分运行,失败将在运行时遇到问题之前警告开发人员隐式约定
- 由于您的资源文件将存在于一个已知的位置,因此您可以简单地确保测试针对该目录中的所有resx文件运行。通过这种方式,您甚至不需要在添加新的资源文件时更新测试,只有在合同发生更改时才需要更新
我使用了类似的方法来帮助维护(大量)resx文件中的存储过程名称。由于资源文件分布在数十个项目中,因此手动维护既乏味又容易出错——换句话说,它无法完成。静态代码分析方法产生了一些缺点,我认为它在您的情况下也会很好地工作。
- MSDN上资源文件的登录页
- MSDN上的ResXResourceReader
CCD_ 3需要对CCD_ 4的引用。它在.NET和Mono上都可用。