LocalizedDisplayName работает хорошо, если ваше решение позволяет вам работать со строками ресурсов. к сожалению, в моем проекте у нас есть несколько языков, и они постоянно растут ... и все переводы хранятся в базе данных.
Поэтому мы приняли подход к
- наследуется от атрибута в нашей собственной dll, а
- затем получите строку формата по умолчанию и используйте ее в качестве базового значения для наших сообщений
- чтобы наша фабрика переводов получила значение или зарегистрировала значение по умолчанию в базе данных
затем мы импортируем пространство имен и даем ему псевдоним, реализованная версия выглядит примерно так:
using tf = MyDating.Translation;
в ViewViewModel мы делаем:
[tf.DisplayName("Verify Password")]
[DataType(DataType.Password)]
[tf.Compare("Password")]
public string VerifyPassword
{
get;
set;
}
приведенный выше атрибут CompareAttribute выглядит примерно так:
public class CompareAttribute : System.ComponentModel.DataAnnotations.CompareAttribute
{
public CompareAttribute(string otherProperty)
:base(otherProperty)
{
var tf = TranslatetionFactory.Current.GetSection("CompareAttribute");
var msg = tf.Get(this.ErrorMessageString);
ErrorMessage = msg;
}
}