Написание нового поста, потому что мне нужно больше форматирования, чем предоставляют комментарии.
Посмотрите на ValidationAttribute - базовый класс атрибутов проверки.
Если произошла ошибка проверки, сообщение об ошибке будет создано методом:
public virtual string FormatErrorMessage(string name)
{
return string.Format(CultureInfo.CurrentCulture, this.ErrorMessageString, new object[] { name });
}
Следующий взгляд на ErrorMessageString свойство:
protected string ErrorMessageString
{
get
{
if (this._resourceModeAccessorIncomplete)
{
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, DataAnnotationsResources.ValidationAttribute_NeedBothResourceTypeAndResourceName, new object[0]));
}
return this.ResourceAccessor();
}
}
Свойство ResourceAccessor можно установить с:
ValidationAttribute..ctor(Func<String>)
ValidationAttribute.set_ErrorMessage(String) : Void
ValidationAttribute.SetResourceAccessorByPropertyLookup() : Void
Первый из них в точности используется классами dervided для форматирования сообщений, второй - случай, когда мы устанавливаем свойство сообщения через ErrorMessage , и третий - когда используются строки ресурсов.
В зависимости от вашей ситуации вы можете использовать ErrorMessageResourceName .
В другом месте давайте посмотрим на производные конструкторы, для нашего примера, Range Attribute:
private RangeAttribute()
: base((Func<string>) (() => DataAnnotationsResources.RangeAttribute_ValidationError))
{
}
Здесь RangeAttribute_ValidationError загружается из ресурса:
internal static string RangeAttribute_ValidationError
{
get
{
return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture);
}
}
Таким образом, вы можете создать файл ресурсов для различной культуры загара и переписать туда сообщения, например:
http://www.codeproject.com/KB/aspnet/SatelliteAssemblies.aspx
http://msdn.microsoft.com/en-us/library/aa645513(VS.71).aspx