Хорошо, я знаю, что это старый вопрос, но я наткнулся на это, пытаясь сделать то же самое, и это помогло мне начать - поэтому я подумал, что дам ответ.
Я думаю, что код в вопросе был на правильном пути, но есть несколько проблем. Интерполятор не был полностью инициализирован с деталями ResourceManager
и Culture
, и, похоже, он не учитывает тот факт, что вы можете иметь только один DefaultMessageInterpolator
для каждого атрибута проверки. Кроме того, вам не нужен экземпляр объекта, который вы проверяете, чтобы получить интерполированное сообщение.
В рассматриваемом коде, где вы инициализируете интерполятор значением атрибута, вам также нужно инициализировать интерполятор с деталями ResourceManager
, которые будут использоваться.
Это можно сделать, используя перегруженный метод Initialize
для DefaultMessageInterpolator
со следующей подписью:
public void Initialize(ResourceManager messageBundle,
ResourceManager defaultMessageBundle,
CultureInfo culture)
Первый параметр - это определяемый пользователем ResourceManager. Если вы хотите использовать свой собственный файл ресурсов для сообщений об ошибках, вы можете передать значение NULL, если вы просто хотите использовать ResouceManager по умолчанию, второй параметр - ResourceManager по умолчанию. может пройти
new ResourceManager(
NHibernate.Validator.Cfg.Environment.BaseNameOfMessageResource,
Assembly.GetExecutingAssembly());
для этого последний параметр - это используемая культура (NHibernate.Validator поставляется с файлами ресурсов с сообщениями проверки на нескольких языках) - если вы передадите ему ноль, он просто будет использовать CultureInfo.CurrentCulture
Наконец, вы можете иметь только один DefaultMessageInterpolator
для каждого атрибута, поэтому вам нужно будет создать новый DefaultMessageInterpolator
для каждого атрибута проверки. Вы можете использовать DefaultMessageInterpolatorAggregator
, чтобы справиться с этим, или просто бросить свой собственный.
Надеюсь, это кому-нибудь поможет.