Ответ 1
Вы можете расширить атрибут 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
автоматически отобразит локализованный текст.