10

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

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

...这反过来又会自动为这个表单域生成一个英文标签。

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

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

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

4

3 回答 3

9

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

Phil Haack 有一篇名为Model Metadata and Validation Localization using Conventions的博客文章解释了这是如何工作的。还有一个名为ModelMetadataExtensions的相应 NuGet 包,其源代码可在 github 上https://github.com/Haacked/mvc-metadata-conventions获得。

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

于 2012-10-09T23:50:17.933 回答
-1

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

于 2012-10-09T20:25:30.690 回答
-1

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

  1. 您的应用非常静态
  2. 您的语言集非常静态

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

[MyResource("email", 123)]

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

于 2012-10-12T20:45:28.527 回答