2部分问题...我的解决方案中使用了几个资源文件(.resx),主要用于字符串的转换。例如,Errors.resx,Validation.resx和Enums.resx。
第1部分:如果我没有Enums资源文件,我假设我应该将所有资源文件放在UI层中,可能在其中自己的程序集(例如' Company.App1.MVCApp.Resources')并从Web应用程序(Company.App1.MVCApp)引用它...我将资源文件放在UI层中是否正确?
第2部分:Enums.resx文件包含与enum成员绑定的描述性字符串(使用Description属性),在我的UI中,有时我需要域服务才能访问描述性字符串他们的翻译。我想将这个存储在Core / Domain层中的某个地方可能就像Company.App1.Core.Resources ......?或者我应该在Core层中创建一个抽象,然后在Infrastructure层中的某个地方实现ResourcemManager,以便坚持正确的Onion架构。?
答案 0 :(得分:3)
第1部分:在我正在处理的应用程序中,每个关注点(Enums,Errors ...)没有一个resx文件,但每个项目只有一个resx文件。例如,如果你收到错误消息,那么纯粹的UI错误消息会进入UI resx文件,域错误消息会进入域resx,而儿子就会进入。 IMO资源文件最接近于使用本地化字符串的代码。在UI项目中拥有大多数本地化文件会将本地化与应用程序呈现方式紧密结合,如果您希望在主UI之外的其他上下文中重用本地化,则可能会出现问题。
第2部分:如果您只需要访问域层中的本地化枚举成员,那么您可以在域层中拥有一个特定的帮助器,该子层派生自或使用System.Resources.ResourceManager
来查找本地化字串。但是,我觉得在独立层中使用某种通用本地化帮助器是很方便的,它集中了比Properties.Resources.[...]
更复杂的所有本地化逻辑,并且能够搜索解决方案的所有resx文件如果需要的话。