Сценарий
Настольное приложение .NET / WPF должно быть локализовано (или в терминах MS глобализировано ) на язык, отличный от английского.То есть пользовательский интерфейс должен быть полностью адаптирован (ярлыки, значки, ...).
Записи файла журнала, записи журнала аудита и другие выходные данные приложения, однако, должны оставаться на английском языке, чтобы англоязычный персонал службы поддержки мог их просмотреть.Они не говорят по-французски или по-китайски.
Приложение использует файлы 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);
}
}
}
Как указано вкомментарий к коду, когда вы вызвали Validate () для валидатора EnterpriseLibrary, сообщения валидации уже локализованы на французский, и у вас нет возможности записать их, например, в файл журнала на английском языке.
В других областях нашего приложения мы используем класс сообщений, который инкапсулирует идентификатор ресурса и параметры, пока мы не уверены, в какой культуре мы хотим использовать разрешение фактического строкового значения.Вы можете назвать это отложенным разрешением ресурса.
Есть идеи, как внедрить подобный механизм в блок валидации Enterprise Library?Пока что есть идеи:
- Временное переключение CurrentCulture (мне это не нравится, и это решает только половину проблемы)
- Исправление блока проверки библиотеки предприятия (мне не нравитсяэто тоже)
Спасибо за вашу помощь и поделились идеями!