场景
需要将一个.NET/WPF桌面应用程序本地化(或者按照微软的术语来说,全球化)到英语以外的其他语言。也就是说,用户界面需要完全适配(标签、图标等)。
然而,应用程序的日志文件条目、审计跟踪条目和其他输出应保持为英语,以便英语服务/支持人员进行审核。他们不会讲法语或中文。
该应用程序依赖于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和参数,直到我们确定要使用哪种文化才能解析实际字符串值。您可以称之为延迟资源解析。
有什么想法介绍类似的机制到Enterprise Library验证块中吗?目前的想法:
- 暂时切换当前区域设置(我不喜欢这个方法,而且只解决了一半的问题)
- 修补Enterprise Library验证块(我也不喜欢这个方法)
感谢您的帮助和分享的想法!