¿Cómo combino las cadenas de recursos para los mensajes de error del atributo de validación?

Si tuviera mensajes de error en un atributo de validación como:

  • Se requiere el primer nombre
  • Se requiere apellido

y luego un atributo de validación como este:

[Required(ErrorMessageResourceName = "Error_FirstNameRequired", ErrorMessageResourceType = typeof(Strings)] public string FirstName {get;set;} 

No quiero que me hagan una traducción para cada instancia de esto. ¿Hay una manera de combinar cadenas de recursos en un formateador, por ejemplo:

 [Required(ErrorMessage = string.Format("{0} {1}", Strings.Label_FirstName, Strings.Error_IsRequired))] public string FirstName {get;set;} 

Por supuesto, esto no funciona porque debe ser una constante de tiempo de comstackción. Pero, ¿hay alguna manera de lograrlo para poder construir cadenas localizadas y reutilizar las que ya existen? Pensé en solo crear atributos personalizados que permitieran establecer propiedades adicionales y anular el mensaje de salida predeterminado, pero eso sería demasiado refactorización y una especie de img kludgy.

¿Algunas ideas?

Puede utilizar el formato en las cadenas definidas en sus recursos. Cuando use {0} , como se muestra en FieldRequired , el nombre para mostrar se insertará cuando sea posible. De lo contrario, volverá al nombre de la propiedad como se muestra para MiddleName .

Ejemplo:

Recursos:

Strings.resx
String.resx

Strings.nl.resx
Cuerdas.nl.resx

Implementación:

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