Если бы у меня были сообщения об ошибках в атрибуте проверки, например:
а затем атрибут проверки следующим образом:
[Required(ErrorMessageResourceName = "Error_FirstNameRequired", ErrorMessageResourceType = typeof(Strings)] public string FirstName {get;set;}
Я не хочу, чтобы перевод был сделан для каждого экземпляра этого. Есть ли способ комбинировать строки ресурсов в форматировании, например:
[Required(ErrorMessage = string.Format("{0} {1}", Strings.Label_FirstName, Strings.Error_IsRequired))] public string FirstName {get;set;}
Конечно, это не работает, потому что это должна быть постоянная времени компиляции. Но можно ли достичь этого, чтобы я мог строить локализованные строки и повторно использовать те, которые уже существуют? Я думал о создании пользовательских атрибутов, которые позволяют устанавливать дополнительные свойства и переопределять выводимое сообщение по умолчанию, но это было бы слишком много рефакторинга и своего рода kludgy imo.
Есть идеи?
Вы можете использовать форматирование в строках, определенных в ваших ресурсах. Когда вы используете {0}
, как показано в FieldRequired
, отображаемое имя будет вставлено, когда это возможно. В противном случае он вернется к названию свойства, как показано для MiddleName
.
Пример:
Strings.resx
Strings.nl.resx
public class MyClass { [Display(ResourceType = typeof(Strings), Name = "FirstName")] [Required(ErrorMessageResourceName = "FieldRequired", ErrorMessageResourceType = typeof(Strings))] public string FirstName { get; set; } [Required(ErrorMessageResourceName = "FieldRequired", ErrorMessageResourceType = typeof(Strings))] public string MiddleName { get; set; } [Display(ResourceType = typeof(Strings), Name = "LastName")] [Required(ErrorMessageResourceName = "FieldRequired", ErrorMessageResourceType = typeof(Strings))] public string LastName { get; set; } // Validation errors for culture [en] would be: // "First name is a required field." // "MiddleName is a required field." // "Last name is a required field." // // Validation errors for culture [nl] would be: // "Voornaam is een benodigd veld." // "MiddleName is een benodigd veld." // "Achternaam is een benodigd veld." }