Ahí está el DisplayAttribute que se ha añadido en .NET 4.0, que le permite especificar una cadena de recursos:
[Display(Name = "UsernameField")]
string Username;
Si no puede utilizar .NET 4.0 aún puede escribir su propio atributo:
public class DisplayAttribute : DisplayNameAttribute
{
public DisplayAttribute(Type resourceManagerProvider, string resourceKey)
: base(LookupResource(resourceManagerProvider, resourceKey))
{
}
private static string LookupResource(Type resourceManagerProvider, string resourceKey)
{
var properties = resourceManagerProvider.GetProperties(
BindingFlags.Static | BindingFlags.NonPublic);
foreach (var staticProperty in properties)
{
if (staticProperty.PropertyType == typeof(ResourceManager))
{
var resourceManager = (ResourceManager)staticProperty
.GetValue(null, null);
return resourceManager.GetString(resourceKey);
}
}
return resourceKey;
}
}
que se podría utilizar como esto:
[Display(typeof(Resources.Resource), "UsernameField"),
string Username { get; set; }
que no permite utilizar * * fuertemente ** recursos escritos. DisplayNameAttribute fue un mal ejemplo, ya que no permite el uso débilmente tipado :) Mi pregunta no es acerca de DisplayName que no permite el uso de los recursos, porque, como respondiste, esto se puede administrar fácilmente. Mi pregunta es acerca de su uso ** fuertemente tipado ** y no solo con este atributo, sino con cada atributo en DataAnnotations. – LukLed
Esta debería ser la respuesta aceptada a la pregunta "¿Hay alguna otra solución?". La respuesta aceptada actual es simplemente "No, no puedes" –