Вы можете расширить DisplayNameAttribute и переопределить строковое свойство DisplayName.У меня есть что-то вроде этого
public class LocalizedDisplayName : DisplayNameAttribute
{
private string DisplayNameKey { get; set; }
private string ResourceSetName { get; set; }
public LocalizedDisplayName(string displayNameKey)
: base(displayNameKey)
{
this.DisplayNameKey = displayNameKey;
}
public LocalizedDisplayName(string displayNameKey, string resourceSetName)
: base(displayNameKey)
{
this.DisplayNameKey = displayNameKey;
this.ResourceSetName = resourceSetName;
}
public override string DisplayName
{
get
{
if (string.IsNullOrEmpty(this.GlobalResourceSetName))
{
return MyHelper.GetLocalLocalizedString(this.DisplayNameKey);
}
else
{
return MyHelper.GetGlobalLocalizedString(this.DisplayNameKey, this.ResourceSetName);
}
}
}
}
}
Для MyHelper
методы могут быть примерно такими:
public string GetLocalLocalizedString(string key){
return _resourceSet.GetString(key);
}
Очевидно, вам нужно будет добавить обработку ошибок и иметь resourceReader
настроить.Подробнее здесь
С этим вы затем украсите свою модель новым атрибутом, передавая ключ ресурса, из которого вы хотите получить значение, например
[LocalizedDisplayName("Title")]
Тогда Html.LabelFor
автоматически отобразит локализованный текст.