Да, то, что вы делаете в конце, в основном правильно. ErrorMessageResourceName
принимает то, что подразумевает имя, имя ресурса, а не сам ресурс.
Resources.ErrorMessages.Required
указывает на фактическое (локализованное) сообщение об ошибке (ресурс). имя ресурса просто "Обязательный", а тип менеджера ресурсов (используется для ErrorMessageResourceType
) - это класс, который содержит этот ресурс, в данном случае Resources.ErrorMessages
класс.
Итак, ваша декларация должна выглядеть так:
[Required(ErrorMessageResourceType = typeof(Resources.ErrorMessages),
ErrorMessageResourceName = "Required")]
public string Something { get; set; }