3

2 部分问题...我的解决方案中有几个资源文件 (.resx),主要用于字符串翻译。例如,Errors.resx、Validation.resx 和 Enums.resx。

第 1部分:如果我没有 Enums 资源文件,我假设我应该将所有资源文件放在 UI 层中,可能在它自己的程序集中(如“Company.App1.MVCApp.Resources”)并从Web 应用程序(Company.App1.MVCApp)...将资源文件放在 UI 层中是否正确?

第 2 部分:Enums.resx 文件包含与枚举成员相关的描述性字符串(使用 Description 属性),在我的 UI 中,有时在域服务中,我可能需要在其翻译中访问描述性字符串。我考虑过将它存储在核心/域层中的某个地方,比如 Company.App1.Core.Resources ...?或者我应该在核心层创建一个抽象,然后在基础设施层的某个地方实现 ResourcemManager 以坚持正确的洋葱架构..?

4

1 回答 1

3

第 1部分:在我目前正在处理的应用程序中,每个关注点(枚举、错误...)没有一个 resx 文件,而是每个项目一个 resx 文件。例如,如果您接收错误消息,则纯粹的 UI 错误消息会放在 UI resx 文件中,域错误消息会放在 Domain resx 中,等等。IMO 资源文件最好放在最靠近使用本地化字符串的代码的位置。在 UI 项目中拥有大多数本地化文件会将本地化与呈现应用程序的方式紧密结合,如果您想在主 UI 之外的其他上下文中重用本地化,这可能会出现问题。

第2 部分:如果您只需要访问域层中的本地化枚举成员,那么您可以在域层中有一个特定的助手,该助手派生自或用于System.Resources.ResourceManager查找本地化字符串。但是,我发现在一个独立的层中有某种通用的本地化助手很方便,它集中了比 a 更复杂的所有本地化逻辑,Properties.Resources.[...]并且如果需要,它能够在您的解决方案的所有 resx 文件中进行搜索。

于 2012-08-23T09:45:41.670 回答