我想翻译属性。我有两个资源文件:DataResource.resx
和DataResource.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
方法写什么
感谢。
答案 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访问器从资源中获取本地化字符串,以便您可以使用重构工具重命名/导航它们。