2011-08-24 72 views
2

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

[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方法来写。
谢谢。

回答

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("NameString")] 
public virtual string Name { get; set; } 

无论如何,我建议使用拉姆达存取的从资源获取本地化的字符串,所以你可以重命名/使用重构工具导航它们。

+0

谢谢。你能举一个关于lamba访问器的例子吗? – user348173

+0

我想我匆匆一点建议使用lambdas,因为无论如何,DisplayName属性本身不能把lambda作为构造函数的参数。忘掉它。 – Eskat0n

+0

我正在使用这种方法,而不是资源文件,我从数据库中获取数据。当我硬编码,它的工作原理,但我需要用户选择语言。所以我有一个下拉菜单,当用户更改下拉菜单时我需要更改语言。即从显示名称属性我需要通过语言环境,我该如何实现? – kbvishnu