簡體   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