3 回答
TA贡献1798条经验 获得超3个赞
我们为许多属性执行此操作,以支持多种语言。我们对Microsoft采取了类似的方法,即它们覆盖其基本属性并传递资源名称而不是实际字符串。然后,该资源名称用于在DLL资源中执行查找,以返回实际的字符串。
例如:
class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private readonly string resourceName;
public LocalizedDisplayNameAttribute(string resourceName)
: base()
{
this.resourceName = resourceName;
}
public override string DisplayName
{
get
{
return Resources.ResourceManager.GetString(this.resourceName);
}
}
}
在实际使用属性时,您可以更进一步,并在静态类中将资源名称指定为常量。这样,您将获得类似的声明。
[LocalizedDisplayName(ResourceStrings.MyPropertyName)]
public string MyProperty
{
get
{
...
}
}
更新
ResourceStrings看起来像(注意,每个字符串将引用指定实际字符串的资源名称):
public static class ResourceStrings
{
public const string ForegroundColorDisplayName="ForegroundColorDisplayName";
public const string FontSizeDisplayName="FontSizeDisplayName";
}
TA贡献1878条经验 获得超4个赞
.NET 4中有System.ComponentModel.DataAnnotations 的Display属性。它在MVC 3上有效PropertyGrid。
[Display(ResourceType = typeof(MyResources), Name = "UserName")]
public string UserName { get; set; }
这将UserName在您的MyResources.resx文件中查找命名的资源。
- 3 回答
- 0 关注
- 1120 浏览
添加回答
举报