[英]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/
最好的本地化方法是將字符串存儲在數據庫中而不是資源文件中,除非,
您可以使用自定義屬性裝飾模型,在其中設置資源的默認字符串和數據庫ID,例如
[MyResource("email", 123)]
您可以編寫自定義的http委托處理程序以使資源脫離緩存(例如)。 對客戶端進行身份驗證后,您將知道客戶端的語言要求和資源ID。 因此,西班牙語和資源ID = 1的客戶端將獲得“ Si”,英語的客戶端將獲得“是”。 資源ID將映射到特定於語言的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.