nhibernate验证器(1.3.1)本地化错误消息

时间:2011-11-23 01:08:46

标签: nhibernate-validator

我创建了一个单元测试用例,用于以不同于英语的语言显示错误消息,但它似乎不起作用,我不知道我错过了什么。

以下是详细信息:

我正在使用属性。

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是我的实体类,Repository遵循使用Repository类的尖锐架构设计):

[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验证器cnfiguration。

发现此消息:NHibernate Validation Localization with S#arp Architecture报告类似问题。

1 个答案:

答案 0 :(得分:0)

我认为由于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,现在测试工作正常。