本地化DisplayName属性

时间:2011-08-24 04:38:25

标签: c# winforms attributes

我想翻译属性。我有两个资源文件:DataResource.resxDataResource.en.resx。有NameString个字符串(两个)。 我的财产:

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

我已使用this解决方案进行本地化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 个答案:

答案 0 :(得分:2)

对于您的自定义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,那么此代码应该可以正常工作:

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

无论如何,我建议使用lambda访问器从资源中获取本地化字符串,以便您可以使用重构工具重命名/导航它们。