Проверка с использованием DataAnnotations Несколько языков - PullRequest
1 голос
/ 19 апреля 2011

Я пишу объект с проверкой модели. Мое приложение должно работать с 3 языками (английский, немецкий и чешский)

Как мне назначить и после получить соответствующую языковую строку для модели валидации?

чешский вариант:

[DisplayName("Nazev")]
[StringLength(200,ErrorMessage="Nazev musi byt 10 az 200 znaku dlouhy",MinimumLength=10)]
[Column]
public string Name { get; set; }

английский вариант:

[DisplayName("Name")]
[StringLength(200,ErrorMessage="Name has to be between 10 and 200",MinimumLength=10)]
[Column]
public string Name { get; set; }

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011

Вы должны использовать атрибут LocalilizedDisplayName, см. Этот вопрос: Атрибут DisplayName из ресурсов?

[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "LastNameMandatory")]
[LocalizedDisplayName("LastName")]
public string RenterLastName { get; set; }
0 голосов
/ 17 апреля 2015

LocalizedDisplayName работает хорошо, если ваше решение позволяет вам работать со строками ресурсов. к сожалению, в моем проекте у нас есть несколько языков, и они постоянно растут ... и все переводы хранятся в базе данных.

Поэтому мы приняли подход к

  1. наследуется от атрибута в нашей собственной dll, а
  2. затем получите строку формата по умолчанию и используйте ее в качестве базового значения для наших сообщений
  3. чтобы наша фабрика переводов получила значение или зарегистрировала значение по умолчанию в базе данных

затем мы импортируем пространство имен и даем ему псевдоним, реализованная версия выглядит примерно так:

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;
    }
}
...