2011-08-24 48 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