<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://nhforge.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator.aspx</link><description>Quick starts, tutorials, code snippets, custom user types, application blocks and more...</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator.aspx</link><pubDate>Tue, 10 Mar 2009 15:49:59 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:51</guid><dc:creator>Marc Climent</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Current revision posted to How to by Marc Climent on 10/03/2009 12:49:59 p.m.&lt;br /&gt;
&lt;h2&gt;Create a custom message interpolator for NHibernate Validator&lt;/h2&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Globalization;
&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Reflection;
&lt;span style="color:blue;"&gt;using &lt;/span&gt;System.Resources;
&lt;span style="color:blue;"&gt;using &lt;/span&gt;NHibernate.Validator.Engine;

&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CustomMessageInterpolator &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;IMessageInterpolator
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;private readonly string &lt;/span&gt;ResourceBaseName = &lt;span style="color:#a31515;"&gt;&amp;quot;Project.Properties.Validator&amp;quot;&lt;/span&gt;;

    &lt;span style="color:blue;"&gt;private readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ResourceManager &lt;/span&gt;resMan;

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;CustomMessageInterpolator()
    {
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.resMan = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ResourceManager&lt;/span&gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.ResourceBaseName, &lt;span style="text-decoration: line-through; color: red;"&gt;Assembly.GetExecutingAssembly())&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="background: SpringGreen;"&gt;Assembly&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;GetExecutingAssembly());&lt;/span&gt;
    }

    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Interpolate(&lt;span style="color:blue;"&gt;string &lt;/span&gt;message, &lt;span style="color:#2b91af;"&gt;IValidator &lt;/span&gt;validator, &lt;span style="color:#2b91af;"&gt;IMessageInterpolator &lt;/span&gt;defaultInterpolator)
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;s = GetMessage(message);

        &lt;span style="color:blue;"&gt;return &lt;/span&gt;defaultInterpolator.Interpolate(s, validator, defaultInterpolator);
    }

    &lt;span style="color:blue;"&gt;private string &lt;/span&gt;GetMessage(&lt;span style="color:blue;"&gt;string &lt;/span&gt;message)
    {
        &lt;span style="color:green;"&gt;// It&amp;#39;s a tempate
        &lt;/span&gt;&lt;span style="color:blue;"&gt;if &lt;/span&gt;(!message.StartsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; !message.EndsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;))
        {
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;message;
        }

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;resource = message.Substring(1, message.Length - 2);

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;m = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.resMan.GetString(resource, &lt;span style="text-decoration: line-through; color: red;"&gt;CultureInfo.CurrentCulture)&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="background: SpringGreen;"&gt;CultureInfo&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;CurrentCulture);&lt;/span&gt;

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(m))
        {
            &lt;span style="color:green;"&gt;// Returns the original message
            &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;message;
        }

        &lt;span style="color:blue;"&gt;return &lt;/span&gt;m;
    }
}&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;!--&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;code&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;formatted&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;by&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;http://manoli.net/csharpformat&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configsections&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;section &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;nhv-configuration&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="background: SpringGreen;"&gt;nhv-configuration&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;

        &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler,&lt;/span&gt; &lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="background: SpringGreen;"&gt;NHibernate.Validator.Cfg.ConfigurationSectionHandler&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; NHibernate.Validator&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;

    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;section&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;nhv-configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;property &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;message_interpolator_class&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="background: SpringGreen;"&gt;message_interpolator_class&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

        &lt;/span&gt;Project.Validation.CustomMessageInterpolator, Project.Validation

      &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;property&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;mapping &lt;/span&gt;&lt;span style="color:red;"&gt;assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Project.Domain&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="background: SpringGreen;"&gt;Project.Domain&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;mapping&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;nhv-configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configsections&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/revision/7.aspx</link><pubDate>Tue, 10 Mar 2009 10:12:01 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:248</guid><dc:creator>Marc Climent</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Revision 7 posted to How to by Marc Climent on 10/03/2009 07:12:01 a.m.&lt;br /&gt;
&lt;h2&gt;Create a custom message interpolator for NHibernate Validator&lt;/h2&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-size&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;small&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;black&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;font-family&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Consolas&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;New&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Courier&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Monospace&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;*white-space:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre;*&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;pre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;rem&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;008000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;kwrd&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000ff;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;str&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;006080;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;op&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;0000c0;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;preproc&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;cc6633;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;asp&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ffff00;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;html&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;800000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;attr&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;ff0000;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;alt&lt;/span&gt; 
&lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;background-color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;width&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;100%&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
	&lt;span style="text-decoration: line-through; color: red;"&gt;margin&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;0em&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;

&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;csharpcode&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;lnum&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;{&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;color&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;#&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;606060;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;}&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;!--&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;code&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;formatted&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;by&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;http://manoli.net/csharpformat&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;-&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;pre class="csharpcode" style="font-size:small;color:black;font-family:Consolas, Courier, Monospace;background-color:#ffffff;"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Resources;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Validator.Engine;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomMessageInterpolator : IMessageInterpolator&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ResourceBaseName = &lt;span class="str"&gt;&amp;quot;Project.Properties.Validator&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ResourceManager resMan;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; CustomMessageInterpolator()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.resMan = &lt;span class="kwrd"&gt;new&lt;/span&gt; ResourceManager(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ResourceBaseName, Assembly.GetExecutingAssembly());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Interpolate(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, IValidator validator, IMessageInterpolator defaultInterpolator)&lt;br /&gt;    {&lt;br /&gt;        var s = GetMessage(message);&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; defaultInterpolator.Interpolate(s, validator, defaultInterpolator);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;// It&amp;#39;s a tempate&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!message.StartsWith(&lt;span class="str"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; !message.EndsWith(&lt;span class="str"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;))&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; message;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        var resource = message.Substring(1, message.Length - 2);&lt;br /&gt;&lt;br /&gt;        var m = &lt;span class="kwrd"&gt;this&lt;/span&gt;.resMan.GetString(resource, CultureInfo.CurrentCulture);&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(m))&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="rem"&gt;// Returns the original message&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; message;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; m;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&amp;lt;!-- code formatted by http://manoli.net/csharpformat/ --&amp;gt;
&lt;pre class="csharpcode" style="font-size:small;color:black;font-family:Consolas, Courier, Monospace;background-color:#ffffff;"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configsections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;nhv-configuration&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;nhv-configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;message_interpolator_class&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        Project.Validation.CustomMessageInterpolator, Project.Validation&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;mapping&lt;/span&gt; &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Project.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;nhv-configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configsections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/revision/6.aspx</link><pubDate>Tue, 10 Mar 2009 10:10:08 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:247</guid><dc:creator>Marc Climent</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Revision 6 posted to How to by Marc Climent on 10/03/2009 07:10:08 a.m.&lt;br /&gt;
&lt;h2&gt;Create a custom message interpolator for NHibernate Validator&lt;/h2&gt;
&lt;p&gt;
&lt;span style="background: SpringGreen;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;type=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;!--&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;pre&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;font-size&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;small&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;black&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;font-family&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Consolas&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;Courier&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;New&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Courier&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Monospace&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;background-color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;ffffff;&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;*white-space:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;pre;*&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;pre&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;margin&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;0em&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;rem&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;008000;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;kwrd&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;0000ff;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;str&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;006080;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;op&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;0000c0;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;preproc&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;cc6633;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;asp&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;background-color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;ffff00;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;html&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;800000;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;attr&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;ff0000;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;alt&lt;/span&gt; 
&lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;background-color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;f4f4f4;&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;width&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;100%&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
	&lt;span style="background: SpringGreen;"&gt;margin&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;0em&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;

&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;csharpcode&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;lnum&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;{&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;color&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;#&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;606060;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;}&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&amp;lt;!-- code formatted by http://manoli.net/csharpformat/ --&amp;gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Resources;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Validator.Engine;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomMessageInterpolator : IMessageInterpolator&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ResourceBaseName = &lt;span class="str"&gt;&amp;quot;Project.Properties.Validator&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ResourceManager resMan;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; CustomMessageInterpolator()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.resMan = &lt;span class="kwrd"&gt;new&lt;/span&gt; ResourceManager(&lt;span class="kwrd"&gt;this&lt;/span&gt;.ResourceBaseName, Assembly.GetExecutingAssembly());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Interpolate(&lt;span class="kwrd"&gt;string&lt;/span&gt; message, IValidator validator, IMessageInterpolator defaultInterpolator)&lt;br /&gt;    {&lt;br /&gt;        var s = GetMessage(message);&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; defaultInterpolator.Interpolate(s, validator, defaultInterpolator);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetMessage(&lt;span class="kwrd"&gt;string&lt;/span&gt; message)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;// It&amp;#39;s a tempate&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!message.StartsWith(&lt;span class="str"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; !message.EndsWith(&lt;span class="str"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;))&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; message;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        var resource = message.Substring(1, message.Length - 2);&lt;br /&gt;&lt;br /&gt;        var m = &lt;span class="kwrd"&gt;this&lt;/span&gt;.resMan.GetString(resource, CultureInfo.CurrentCulture);&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(m))&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="rem"&gt;// Returns the original message&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; message;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; m;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&amp;lt;!-- code formatted by http://manoli.net/csharpformat/ --&amp;gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;configsections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;nhv-configuration&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;        &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;section&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;nhv-configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;message_interpolator_class&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        Project.Validation.CustomMessageInterpolator, Project.Validation&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;mapping&lt;/span&gt; &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Project.Domain&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;nhv-configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configsections&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;configuration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/revision/5.aspx</link><pubDate>Tue, 10 Mar 2009 10:08:27 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:246</guid><dc:creator>Marc Climent</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Revision 5 posted to How to by Marc Climent on 10/03/2009 07:08:27 a.m.&lt;br /&gt;
&lt;h2&gt;Create a custom message interpolator for NHibernate Validator&lt;/h2&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&lt;span style="background: SpringGreen;"&gt;&amp;lt;!--&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;code&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;formatted&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;by&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;http://manoli.net/csharpformat&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Resources;
&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Validator.Engine;

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomMessageInterpolator : IMessageInterpolator
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ResourceBaseName = &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Project.Properties.Validator&amp;quot;;&lt;/span&gt;

        &lt;span class="str"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;Project.Properties.Validator&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ResourceManager resMan;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; CustomMessageInterpolator()
    {
        &lt;span style="text-decoration: line-through; color: red;"&gt;this.resMan&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;resMan&lt;/span&gt; = &lt;span class="kwrd"&gt;new&lt;span style="text-decoration: line-through; color: red;"&gt;ResourceManager(this.ResourceBaseName&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;ResourceManager&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;ResourceBaseName,&lt;/span&gt; Assembly.GetExecutingAssembly());
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;span style="text-decoration: line-through; color: red;"&gt;Interpolate(string&lt;/span&gt; &lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Interpolate&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;string&lt;/span&gt;&lt;/span&gt; message, IValidator validator, IMessageInterpolator defaultInterpolator)
    {
        var s = GetMessage(message);

        &lt;span class="kwrd"&gt;return&lt;/span&gt; defaultInterpolator.Interpolate(s, validator, defaultInterpolator);
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;span style="text-decoration: line-through; color: red;"&gt;GetMessage(string&lt;/span&gt; &lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;GetMessage&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;string&lt;/span&gt;&lt;/span&gt; message)
    {
        &lt;span class="rem"&gt;// It&amp;#39;s a tempate&lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!message.StartsWith(&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;{&amp;quot;)&lt;/span&gt; &lt;span class="str"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; &amp;amp;&amp;amp; !message.EndsWith(&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;}&amp;quot;))&lt;/span&gt;
            &lt;span class="str"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; message;
        }

        var resource = message.Substring(1, message.Length - 2);

        var m = &lt;span style="text-decoration: line-through; color: red;"&gt;this.resMan.GetString(resource&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;this&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;resMan.GetString(resource,&lt;/span&gt; CultureInfo.CurrentCulture);

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span style="text-decoration: line-through; color: red;"&gt;string.IsNullOrEmpty(m))&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;IsNullOrEmpty(m))&lt;/span&gt;
        {
            &lt;span class="rem"&gt;// Returns the original message&lt;/span&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; message;
        }

        &lt;span class="kwrd"&gt;return&lt;/span&gt; m;
    }
}
&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&lt;pre&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
  &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;configsections&amp;gt;&lt;/span&gt;
    &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;section&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;name=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;nhv-configuration&amp;quot;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;/p&gt;
&lt;span style="background: SpringGreen;"&gt;&amp;lt;!--&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;code&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;formatted&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;by&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;http://manoli.net/csharpformat&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;configuration&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;configsections&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;section&lt;/span&gt;&lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="background: SpringGreen;"&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;nhv-configuration&amp;quot;&lt;/span&gt;&lt;/span&gt; 

        &lt;span class="attr"&gt;&lt;span style="background: SpringGreen;"&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
  &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;nhv-configuration&amp;gt;&lt;/span&gt;
    &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;property&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;name=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;message_interpolator_class&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;

  &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;section&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;nhv-configuration&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;property&lt;/span&gt;&lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="background: SpringGreen;"&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;message_interpolator_class&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;

        Project.Validation.CustomMessageInterpolator, Project.Validation

    &lt;/pre&gt;
&lt;pre&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
    &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;mapping&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;assembly=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Project.Domain&amp;quot;&amp;gt;&lt;/span&gt;
  &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/mapping&amp;gt;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/nhv-configuration&amp;gt;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/configsections&amp;gt;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;property&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;mapping&lt;/span&gt;&lt;/span&gt; &lt;span class="attr"&gt;&lt;span style="background: SpringGreen;"&gt;assembly&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;Project.Domain&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;mapping&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;nhv-configuration&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;configsections&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="background: SpringGreen;"&gt;configuration&lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/revision/4.aspx</link><pubDate>Thu, 05 Mar 2009 15:37:12 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:245</guid><dc:creator>Fabio Maulo</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Revision 4 posted to How to by Fabio Maulo on 05/03/2009 12:37:12 p.m.&lt;br /&gt;
&lt;h2&gt;Create a custom message interpolator for NHibernate Validator&lt;/h2&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&lt;pre&gt;    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using NHibernate.Validator.Engine;

    public class CustomMessageInterpolator : IMessageInterpolator
    {
        private readonly string ResourceBaseName = &amp;quot;Project.Properties.Validator&amp;quot;;

        private readonly ResourceManager resMan;

        public CustomMessageInterpolator()
        {
            this.resMan = new ResourceManager(this.ResourceBaseName, Assembly.GetExecutingAssembly());
        }

        public string Interpolate(string message, IValidator validator, IMessageInterpolator defaultInterpolator)
        {
            var s = GetMessage(message);

            return defaultInterpolator.Interpolate(s, validator, defaultInterpolator);
        }

        private string GetMessage(string message)
        {
            // It&amp;#39;s a tempate
            if (!message.StartsWith(&amp;quot;{&amp;quot;) &amp;amp;&amp;amp; !message.EndsWith(&amp;quot;}&amp;quot;))
            {
                return message;
            }

            var resource = message.Substring(1, message.Length - 2);

            var m = this.resMan.GetString(resource, CultureInfo.CurrentCulture);

            if (string.IsNullOrEmpty(m))
            {
                // Returns the original message
                return message;
            }

            return m;
        }
    }
&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&lt;pre&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;configsections&amp;gt;
    &amp;lt;section name=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;nhv-configuration&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;nhv-configuration&amp;quot;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;type=&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator&amp;quot;&amp;gt;
  &amp;lt;/section&amp;gt;
  &amp;lt;nhv-configuration&amp;gt;
    &amp;lt;property name=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;message_interpolator_class&amp;quot;&amp;gt;Project.Validation.CustomMessageInterpolator,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;message_interpolator_class&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="background: SpringGreen;"&gt;Project.Validation.CustomMessageInterpolator&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; Project.Validation&lt;/pre&gt;
&lt;pre&gt;&amp;lt;/property&amp;gt;
    &amp;lt;mapping assembly=&amp;quot;Project.Domain&amp;quot;&amp;gt;
  &amp;lt;/mapping&amp;gt;
&amp;lt;/nhv-configuration&amp;gt;
&amp;lt;/configsections&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/revision/3.aspx</link><pubDate>Wed, 04 Mar 2009 23:11:23 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:242</guid><dc:creator>Marc Climent</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Revision 3 posted to How to by Marc Climent on 04/03/2009 08:11:23 p.m.&lt;br /&gt;
&lt;h2&gt;Create a custom message interpolator for NHibernate Validator&lt;/h2&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&lt;pre&gt;    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using NHibernate.Validator.Engine;

    public class CustomMessageInterpolator : IMessageInterpolator
    {
        private readonly string ResourceBaseName = &amp;quot;Project.Properties.Validator&amp;quot;;

        private readonly ResourceManager resMan;

        public CustomMessageInterpolator()
        {
            this.resMan = new ResourceManager(this.ResourceBaseName, Assembly.GetExecutingAssembly());
        }

        public string Interpolate(string message, IValidator validator, IMessageInterpolator defaultInterpolator)
        {
            var s = GetMessage(message);

            return defaultInterpolator.Interpolate(s, validator, defaultInterpolator);
        }

        private string GetMessage(string message)
        {
            // It&amp;#39;s a tempate
            if (!message.StartsWith(&amp;quot;{&amp;quot;) &amp;amp;&amp;amp; !message.EndsWith(&amp;quot;}&amp;quot;))
            {
                return message;
            }

            var resource = message.Substring(1, message.Length - 2);

            var m = this.resMan.GetString(resource, CultureInfo.CurrentCulture);

            if (string.IsNullOrEmpty(m))
            {
                // Returns the original message
                return message;
            }

            return m;
        }
    }
&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&lt;pre&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;configsections&amp;gt;
    &amp;lt;section name=&amp;quot;nhv-configuration&amp;quot; type=&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator&amp;quot;&amp;gt;
  &amp;lt;/section&amp;gt;
  &amp;lt;nhv-configuration&amp;gt;
    &amp;lt;property name=&amp;quot;message_interpolator_class&amp;quot;&amp;gt;Project.Validation.CustomMessageInterpolator, Project.Validation&amp;lt;/property&amp;gt;
    &amp;lt;mapping assembly=&amp;quot;Project.Domain&amp;quot;&amp;gt;
  &amp;lt;/mapping&amp;gt;
&amp;lt;/nhv-configuration&amp;gt;
&amp;lt;/configsections&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/revision/2.aspx</link><pubDate>Wed, 04 Mar 2009 18:13:57 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:241</guid><dc:creator>Marc Climent</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Revision 2 posted to How to by Marc Climent on 04/03/2009 03:13:57 p.m.&lt;br /&gt;
&lt;h2&gt;Create a custom message interpolator for NHibernate Validator&lt;/h2&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&lt;pre&gt;    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using NHibernate.Validator.Engine;

    public class CustomMessageInterpolator : IMessageInterpolator
    {
        private readonly string ResourceBaseName = &amp;quot;Project.Properties.Validator&amp;quot;;

        private readonly ResourceManager resMan;

        public CustomMessageInterpolator()
        {
            this.resMan = new ResourceManager(this.ResourceBaseName, Assembly.GetExecutingAssembly());
        }

        public string Interpolate(string message, IValidator validator, IMessageInterpolator defaultInterpolator)
        {
            var s = GetMessage(message);

            return defaultInterpolator.Interpolate(s, validator, defaultInterpolator);
        }

        private string GetMessage(string message)
        {
            // It&amp;#39;s a tempate
            if (!message.StartsWith(&amp;quot;{&amp;quot;) &amp;amp;&amp;amp; !message.EndsWith(&amp;quot;}&amp;quot;))
            {
                return message;
            }

            var resource = message.Substring(1, message.Length - 2);

            var m = this.resMan.GetString(resource, CultureInfo.CurrentCulture);

            if (string.IsNullOrEmpty(m))
            {
                // Returns the original message
                return message;
            }

            return m;
        }
    }
&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&lt;pre&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;configsections&amp;gt;
    &amp;lt;section name=&amp;quot;nhv-configuration&amp;quot; type=&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator&amp;quot;&amp;gt;
  &amp;lt;/section&amp;gt;
  &amp;lt;nhv-configuration&amp;gt;
    &amp;lt;property name=&amp;quot;message_interpolator_class&amp;quot;&amp;gt;Project.Validation.CustomMessageInterpolator, Project.Validation&amp;lt;/property&amp;gt;
    &amp;lt;mapping assembly=&amp;quot;Project.Domain&amp;quot;&amp;gt;
  &amp;lt;/mapping&amp;gt;
&amp;lt;/nhv-configuration&amp;gt;
&amp;lt;/configsections&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Create a custom message interpolator for NHibernate Validator</title><link>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/revision/1.aspx</link><pubDate>Wed, 04 Mar 2009 18:13:57 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:240</guid><dc:creator>Marc Climent</dc:creator><comments>http://nhforge.org/wikis/howtonh/create-a-custom-message-interpolator-for-nhibernate-validator/comments.aspx</comments><description>Revision 1 posted to How to by Marc Climent on 04/03/2009 03:13:57 p.m.&lt;br /&gt;
&lt;div class="pcontent"&gt;
&lt;p&gt;The default interpolator is quite complete and complex but you can use its power while using your own messages. This messages can replace the original messages or can be the localized messages of your own validator.&lt;/p&gt;
&lt;p&gt;The first part is to create your own interpolator:&lt;/p&gt;
&lt;pre&gt;    using System.Globalization;
    using System.Reflection;
    using System.Resources;
    using NHibernate.Validator.Engine;

    public class CustomMessageInterpolator : IMessageInterpolator
    {
        private readonly string ResourceBaseName = &amp;quot;Project.Properties.Validator&amp;quot;;

        private readonly ResourceManager resMan;

        public CustomMessageInterpolator()
        {
            this.resMan = new ResourceManager(this.ResourceBaseName, Assembly.GetExecutingAssembly());
        }

        public string Interpolate(string message, IValidator validator, IMessageInterpolator defaultInterpolator)
        {
            var s = GetMessage(message);

            return defaultInterpolator.Interpolate(s, validator, defaultInterpolator);
        }

        private string GetMessage(string message)
        {
            // It&amp;#39;s a tempate
            if (!message.StartsWith(&amp;quot;{&amp;quot;) &amp;amp;&amp;amp; !message.EndsWith(&amp;quot;}&amp;quot;))
            {
                return message;
            }

            var resource = message.Substring(1, message.Length - 2);

            var m = this.resMan.GetString(resource, CultureInfo.CurrentCulture);

            if (string.IsNullOrEmpty(m))
            {
                // Returns the original message
                return message;
            }

            return m;
        }
    }
&lt;/pre&gt;
&lt;p&gt;I use the same notation as the original project, putting the
resource name between { and }. I try to get the string from
Validator.resx in the Properties folder of the project and if not found
I return the original message. This way, you can override the default
messages with your own ones only if you want.&lt;/p&gt;
&lt;p&gt;At the end, all messages are passed to the defaultInterpolator, that
manages the rest of the substitutions (for example {Max} and {Min} are
replaced by the attribute values).&lt;/p&gt;
&lt;p&gt;Finally, you have to configure the interpolator in the .config file
(it only worked for me in App.config, not in nhvalidator.cfg.xml):&lt;/p&gt;
&lt;pre&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;configsections&amp;gt;
    &amp;lt;section name=&amp;quot;nhv-configuration&amp;quot; type=&amp;quot;NHibernate.Validator.Cfg.ConfigurationSectionHandler, NHibernate.Validator&amp;quot;&amp;gt;
  &amp;lt;/section&amp;gt;
  &amp;lt;nhv-configuration&amp;gt;
    &amp;lt;property name=&amp;quot;message_interpolator_class&amp;quot;&amp;gt;Project.Validation.CustomMessageInterpolator, Project.Validation&amp;lt;/property&amp;gt;
    &amp;lt;mapping assembly=&amp;quot;Project.Domain&amp;quot;&amp;gt;
  &amp;lt;/mapping&amp;gt;
&amp;lt;/nhv-configuration&amp;gt;
&amp;lt;/configsections&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;p&gt;And that&amp;#39;s it. I hope it helps.&lt;/p&gt;
&lt;/div&gt;</description></item></channel></rss>
