Обновление:
Я знаю, что уже слишком поздно, но я бы хотел добавить это обновление:
Я использую Поставщик метаданных обычной модели , представленный Филом Хаакедом , он более мощный и простой в применении.
ConventionalModelMetadataProvider
Старый ответ
Здесь, если вы хотите поддерживать много типов ресурсов:
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private readonly PropertyInfo nameProperty;
public LocalizedDisplayNameAttribute(string displayNameKey, Type resourceType = null)
: base(displayNameKey)
{
if (resourceType != null)
{
nameProperty = resourceType.GetProperty(base.DisplayName,
BindingFlags.Static | BindingFlags.Public);
}
}
public override string DisplayName
{
get
{
if (nameProperty == null)
{
return base.DisplayName;
}
return (string)nameProperty.GetValue(nameProperty.DeclaringType, null);
}
}
}
Тогда используйте это так:
[LocalizedDisplayName("Password", typeof(Res.Model.Shared.ModelProperties))]
public string Password { get; set; }
Полное руководство по локализации см. На этой странице .