繁体   English   中英

ASP.NET MVC4多语言数据注释

[英]ASP.NET MVC4 Multi-lingual Data Annotations

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

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

...这反过来会自动以英语为该表单字段生成标签。

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

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

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

代替为属性属性分配实际值,而是为资源字符串分配键。 然后,您可以使用自定义ModelMetadataProvider ,该模型知道本地化上下文并提供适当的字符串。 为了获得更好的解决方案,可以使自定义ModelMetadataProvider推断约定(从而减少了对冗长属性的需求)。

Phil Haack的博客文章名为Model Metadata and Validation Localization using Conventions ,它解释了它是如何工作的。 还有一个名为ModelMetadataExtensions的相应NuGet软件包,其源代码可从github上的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委托处理程序以使资源脱离缓存(例如)。 对客户端进行身份验证后,您将知道客户端的语言要求和资源ID。 因此,西班牙语和资源ID = 1的客户端将获得“ Si”,英语的客户端将获得“是”。 资源ID将映射到特定于语言的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM