首页 > 解决方案 > 如何本地化派生属性的显示名称?

问题描述

我可以通过以下方式本地化模型类属性:

public class Person
{
     [Display(Name = ResourceKeys.Person_FirstName)]
     [Required(Name = ResourceKeys.Person_FirstName_Required)]
     public string FirstName { get; set; }

     //...other properties
}

其中“ResourceKeys”是特殊类,它存储“伪”键并将它们与相关资源文件中的“正确”键链接:

public class ResourceKeys
{
     public const string Person_FirstName = "FirstName"; // looks up for key "FirstName" in Person."culture".resx file
     public const string Person_FirstName_Required = "FirstName_Required"; //dtto
     //...
}

这很好用 - 例如 @Html.DisplayNameFor(model => model.FirstName) 已正确本地化并呈现为德语的“Vorname”。

现在来解决问题。派生新类时,派生属性未本地化:

public class Student : Person
{
     //...
}

例如,@Html.DisplayNameFor(model => model.FirstName) 可能根本没有本地化并呈现为“FirstName”。似乎只在学生资源文件中搜索密钥,并且由于未找到密钥本身而被呈现。

我绝对想避免在基类和派生类的资源文件中出现重复。我怎样才能做到这一点?


编辑:即使省略 ResourceKeys 类并且直接“硬编码”注释字符串,派生属性的本地化也不起作用:

public class Person
{
     [Display(Name = "FirstName")]
     [Required(Name = "FirstName_Required")]
     public string FirstName { get; set; }

     //...other properties
}

标签: c#.net-corelocalizationdata-annotations

解决方案


推荐阅读