设想
.NET/WPF 桌面应用程序应该本地化(或 MS 术语globalized)到与英语不同的语言。也就是说,需要完全采用 UI(标签、图标……)。
但是,应用程序的日志文件条目、审计跟踪条目和其他输出应保持为英文,以允许讲英语的服务/支持人员对其进行审查。他们不会说法语或中文。
该应用程序依赖 RESX 文件来完成本地化。
企业库验证块用于验证对象模型上的业务规则。
现在假设有一个服务在执行真正的业务逻辑之前验证其给定的对象模型参数。在某些情况下,它会收到无效的对象模型参数,但会尽最大努力继续执行。然而,无效对象模型数据的提供应记录在审计跟踪和日志文件中。
使用验证块的服务示例。
public class Service : IService
{
public void MyMethod(MyObjectModelObject obj)
{
Validator validator = ValidationFactory.CreateValidator(typeof(MyObjectModelObject));
ValidationResults results = validator.Validate(this);
// !!! The messages in the validation results are now already localized to CurrentCulture.
// ... build a log message: msg
if (results.Count > 0)
{
Logger.Log(msg);
}
}
}
如代码注释中所述,当您在 EnterpriseLibrary 验证器上调用 Validate() 时,验证消息已经本地化为法语,您没有机会将它们写入例如英语日志文件。
在我们应用程序的其他区域中,我们使用一个消息类来封装资源 id 和参数,直到我们确定要使用哪种文化来解析实际的字符串值。您可以将其称为延迟资源解析。
任何想法如何向企业库验证块引入类似的机制?到目前为止的想法:
- 暂时切换 CurrentCulture(我不喜欢这样,它只解决了一半的问题)
- 修补企业库验证块(我也不喜欢那样)
感谢您的帮助和分享想法!