2015-02-14 4 views
1

Я пытаюсь расширить логику DisplayAttrubte от Mvc. Плохо, так как DisplayAttribute - это запечатанный класс, который я не могу наследовать. Поэтому я унаследовал от DisplayNameAttribute..NET Mvc Локализация

public class TranslatedDisplayAttribute : DisplayNameAttribute 
{ 
    public override string DisplayName 
    { 
     get 
     { 
      var myVariableName = ???; 
      return TranslationService.String(myVariableName ); 
     } 
    } 
} 

И я хочу использовать этот атрибут так же, как и DisplayAttribute.

public class MyDto { 

    [TranslatedDisplay] 
    public string myVariable { get; set; } 
} 

Можно ли получить имя переменных, где атрибут назначается так, что в TranslatedDisplayAttribute implementaion переменная myVariableName автоматически устанавливается на имя переменных (MYVARIABLE)? Я не хочу делать что-то подобное.

public class MyDto { 

    [TranslatedDisplay(Name = "myVariable")] 
    public string myVariable { get; set; } 
} 

Редактировать

И я не хочу использовать перевод подход с Resx файлов. Но @Romias благодарит вас за ваш ответ.

[Display(Name = "XXX_YourPropertyItem", ResourceType = typeof(YourResourceFile))] 
public string YourProperty { get; set; } 

ответ

1

Может быть, вы знаете об этом, и вы хотите сделать перевод другим способом, но встроенный метод использует другую перегрузку атрибута Display, используя файлы ресурсы.

[Display(Name = "XXX_YourPropertyItem", ResourceType = typeof(YourResourceFile))] 
public string YourProperty { get; set; } 

Так, «XXX_YourPropertyItem» это элемент в файле ресурсов, а «YourResourceFile» является именем класса ResourceFile.

+0

Я не использую файлы Resx, поэтому я не хочу использовать этот подход. Мои переведенные ресурсы хранятся в базе данных SQL. –

+0

Может быть, ваш подход может быть расширен поставщиком ресурсов ... для получения перевода из базы данных. Проверьте это: http://stackoverflow.com/a/2466530/7720 – Romias

Смежные вопросы