Ниже приводится содержание, если они решат удалить его когда-нибудь:

дин вопрос локализации MVC ...

Я пытаюсь локализовать приложение ASP.Net MVC 3, используя локализованные файлы ресурсов для отображения текстов в представлениях, как рекомендуется.

Проблема, как обычно, при попытке локализовать сообщения об ошибках по умолчанию из аннотаций данных.

Я знаю, что вы можете указать файл ресурса и ключ в каждом атрибуте:

[Required(
ErrorMessageResourceType = typeof(CustomResourceManager), 
ErrorMessageResourceName = "ResourceKey")]
public string Username { get; set; }

и даже, что лучше и предпочтительнее, вы можете переопределить сообщение по умолчанию, например так:Ресурс по умолчанию для аннотаций данных в ASP.NET MVCтак что вы можете оставить атрибуты как:

[Required]
public string Username { get; set; }

Этот последний подход - тот, которому я следовал, и он работает, но только тогда, когда DataAnnotation, которую вы хотите переопределить, имеет сообщение об ошибке ONE и ONLY ONE, так как он всегда ищет ключ ресурса, называемый так же, как атрибут в файле пользовательских ресурсов. (например, «Required» требуется запись «RequiredAttribute» в файле ресурсов)

Другие атрибуты, такие как StringLength, имеют более одного сообщения об ошибке, в зависимости от используемых необязательных параметров. Итак, если у вас есть модель вроде:

public class Person
{
    [Required]
    [StringLengthLocalizedAttribute(10, MinimumLength = 5)]
    [Display(Name = "User name")]
    public string UserName { get; set; }
}

Сообщение об ошибке "ПолеИмя пользователя$12Ресурс по умолчанию для аннотаций данных в ASP.NET MVC13$10."

И если вы измените атрибут StringLength на:

    [StringLengthLocalizedAttribute(10)]

сообщение об ошибке меняется на "ПолеИмя пользователя должна быть строка с максимальной длиной10.«Таким образом, в этом случае есть как минимум 2 сообщения об ошибках по умолчанию, которые необходимо переопределить, и решения, заданные @ kim-tranjan, терпят неудачу.

Мое частичное решение этого заключается в реализации моего собственного атрибута StringLength следующим образом:

public class StringLengthLocalizedAttribute : StringLengthAttribute
{
    public StringLengthLocalizedAttribute(int maximumLength) : base(maximumLength)
    {
        ErrorMessageResourceType = typeof(CustomValidationResource);
    }

    public override string FormatErrorMessage(string name)
    {
        ErrorMessageResourceName = MinimumLength > 0 ? "StringLengthAttributeMinMax" : "StringLengthAttributeMax";
        return base.FormatErrorMessage(name);
    }
}

Где у меня есть локализованный ресурс "CustomValidationResource" с сообщениями проверки и установить его как ErrorMessageResourceType. Затем, переопределяя функцию FormatErrorMessage, я решаю, какую строку сообщения следует применять в зависимости от необязательных параметров.

Итак, вопрос здесь: кто-нибудь знает, где мы можем найти полный список ключей ресурсов, используемых Атрибутами DataAnnotation, и посмотреть, сколько разных сообщений об ошибках мы имеем в каждом из них, не проверяя каждый из них?

Или, что еще лучше, можем ли мы иметь исходный файл RESX, чтобы увидеть строковые шаблоны и локализовать их, используя одни и те же ключи ресурсов? Таким образом, изменение только ErrorMessageResourceType должно работать для всех атрибутов DataAnnotations, и мне не нужно угадывать, куда помещать «{1}» или «{2}» в моей локализованной строке.

Спасибо серги

Ответы на вопрос(3)

Ваш ответ на вопрос