nhibernate validator (1.3.1) локализует сообщения об ошибках - PullRequest
0 голосов
/ 23 ноября 2011

Я создал тестовый блок для отображения сообщений об ошибках на другом языке, кроме английского, но, похоже, он не работает, и я не знаю, что мне не хватает.

Вот подробности:

Я использую атрибуты.

app.config (я исключил nhibernate cfg):

<configSections>
  <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
  <section name="nhv-configuration" type="NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator" />    
</configSections>

<nhv-configuration xmlns="urn:nhv-configuration-1.0">
  <property name='apply_to_ddl'>false</property>
  <property name='autoregister_listeners'>true</property>
  <property name='default_validator_mode'>OverrideExternalWithAttribute</property>
</nhv-configuration>

Инициализация валидатора:

private void InitializeValidator()
{
  var provider = new NHibernateSharedEngineProvider();
  provider.GetEngine().Configure();
  NHibernate.Validator.Cfg.Environment.SharedEngineProvider = provider;
}

Тестовая функция (EntityDescription - это мой класс сущностей, а репозиторий следует строгому дизайну архитектуры с классами репозитория):

[Test]
public void TestNhValidationSp()
{
  CultureInfo ci = CultureInfo.GetCultureInfo("fr");

  Thread.CurrentThread.CurrentCulture = ci;
  Thread.CurrentThread.CurrentUICulture = ci;
  TestNhValidation();
}

private void TestNhValidation()
{
  IEntityDescriptionRepository repository = GetObject<IEntityDescriptionRepository>();

  ISession session = NHibernateSession.Current;
  EntityDescription entityDescription=
    (from kpad in session.Query<EntityDescription>()
     select kpad).FirstOrDefault();
  entityDescription.Title = "012345678901234567890123456789012345678901234567890123456789";
  try
  {
    repository.SaveOrUpdateWithTransaction(entityDescription);
    Assert.IsTrue(false);
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.Message);
    Assert.IsTrue(ex is InvalidStateException);
    InvalidStateException isex = (InvalidStateException) ex;
    foreach (InvalidValue invalidValue in isex.GetInvalidValues())
    {
      Console.WriteLine("PropertyName={0} Message={1}", invalidValue.PropertyName, invalidValue.Message);
    }
  }
} 

Окружение entityDescription.Title = "012345678901234567890123456789012345678901234567890123456789";

вызовет ошибку проверки, поскольку заголовок может содержать до 50 символов.

Проблема в том, что сообщение всегда приходит на английском языке. Есть мысли?

Хочу добавить, что мой тестовый проект зависит от проекта SharpArchitecture (1.9.5). Интересно, может ли это как-то испортить мою конфигурацию валидатора nhibernate?

Нашли это сообщение: Локализация проверки NHibernate с архитектурой S # arp , которая сообщает об аналогичной проблеме.

1 Ответ

0 голосов
/ 23 ноября 2011

Я думаю, что это была моя собственная ошибка из-за перепутывания версий DLL.

SharpArchitecture 1.9.5 использует NHV 1.2.0, который, в свою очередь, был скомпилирован с NH 2.1.0. В моем предыдущем тесте использовался NHV 1.3.1 (я хотел обновить его до последней версии NHV), и он не работал, сообщения отображались не на нужном языке.

Я перекомпилировал NHV 1.2.0 для использования NH 3.1.0, я переключился на NHV 1.2.0 и теперь тест работает нормально.

...