ASP.NET MVC4多语言数据注释

在标准应用程序中,我有以下内容:

[Required] [DisplayName("Email Address")] public string EmailAddress { get; set; } 

…这反过来会自动生成一个英文表格字段的标签。

现在,如果我需要我的应用程序支持5种语言,那么ASP.NET MVC应用程序处理此问题的最佳方法是什么?

适用范围约为400-600个数据字段。

更新:我还需要支持更新应用程序中的小部分文本,如页面名称和每个表单的介绍(小段落)。

不是将实际值分配给属性属性,而是为资源字符串分配键。 然后,您可以使用知道本地化上下文的自定义ModelMetadataProvider并提供相应的字符串。 为了获得更好的解决方案,您可以使自定义ModelMetadataProvider推断约定(这减少了对详细属性的需求)。

Phil Haack有一篇博客文章,名为使用约定的模型元数据和validation本地化 ,解释了它的工作原理。 还有一个名为ModelMetadataExtensions的相应NuGet包,其源代码可在github上获得, url为https://github.com/Haacked/mvc-metadata-conventions 。

作为旁注,我建议回顾一下我在一个老问题上得到的一些很棒的答案: .NET中本地化的有效策略 。 它们没有专门解决您的问题,但如果您正在使用多语言.NET应用程序,它将非常有用。

我会创建自定义属性,如[MyDisplayName(“Section”,“Key”)]这将提供基于所选语言的翻译。 另请查看数据库驱动的资源管理器,例如http://www.west-wind.com/presentations/wwDbResourceProvider/

本地化的最佳方法是将字符串存储在数据库中而不是资源文件中,除非,

  1. 你的应用非常静态
  2. 您的语言设置非常静态

您可以使用自定义属性修饰模型,您可以在其中设置资源的默认字符串和数据库ID,例如

 [MyResource("email", 123)] 

您可以编写自定义http委托处理程序以从缓存中获取资源(例如)。 对客户端进行身份validation后,您就会了解客户端的语言需求和资源ID。 因此,具有西class牙语和资源id = 1的客户端将获得“Si”,具有英语的客户端将获得“是”。 资源ID将映射到特定于语言的字符串。