Атрибут DisplayName локализации - PullRequest
2 голосов
/ 24 августа 2011

Я хочу перевести собственность.У меня есть два файла ресурсов: DataResource.resx и DataResource.en.resx.Есть NameString строка (оба).Моя собственность:

[DisplayName("NameString")]
public virtual string Name { get; set; }

Я использовал это решение для локализации атрибута DataDisplay.

public class LocalizedDisplayNameAttribute: DisplayNameAttribute
{
    public LocalizedDisplayNameAttribute(string resourceId) 
        : base(GetMessageFromResource(resourceId))
    { }

    private static string GetMessageFromResource(string resourceId)
    {
        // TODO: Return the string from the resource file
    }
}

Но я не понимаю, что я должен написать GetMessageFromResource метод.
Спасибо.

1 Ответ

2 голосов
/ 24 августа 2011

Для вашего пользовательского атрибута DataAnnotations необходимо написать следующий код в вашем методе GetMessageFromResource:

private static string GetMessageFromResource(string resourceId)
{
    var propertyInfo = typeof(DataResource).GetProperty(resourceId, BindingFlags.Static | BindingFlags.Public);
    return propertyInfo.GetValue(null, null);
}

Этот код должен выполнять работу, предполагая, что в вашем вопросе есть ошибка, и должен присутствовать LocalizeDisplayNameAttribute, а неDisplayName one:

[DisplayName("NameString")]
public virtual string Name { get; set; }

В любом случае, я рекомендую использовать лямбда-аксессоры для получения локализованных строк из ресурсов, чтобы вы могли переименовывать / перемещаться по ним с помощью инструмента рефакторинга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...