2013-03-07 19 views
6

MVC4でデータ型メッセージをローカライズする方法 "日付は日付である必要があります。"データ型メッセージをローカライズする方法

<input data-val="true" data-val-date="The field Date be a date." id="Date" name="Date" value="" > 

私が使用して:また

public class LocalizedDataTypeAttributeAdapter : DataAnnotationsModelValidator<DataTypeAttribute> 

     { 
      public LocalizedDataTypeAttributeAdapter(ModelMetadata metadata, ControllerContext context, DataTypeAttribute attribute) : base(metadata, con 

text, attribute) 
     { 
      attribute.ErrorMessageResourceType = typeof(Localization.Global); 
      attribute.ErrorMessageResourceName = "PropertyDataFormat"; 
     } 

    } 

は、Global.asaxの中登録LocalizedDataTypeAttributeAdapter

あなたがClientDataTypeModelValidatorProvider書き直す必要が
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(DataTypeAttribute), typeof(LocalizedDataTypeAttributeAdapter)); 

答えて

1

はそれを取るhttps://github.com/mono/aspnetwebstack/blob/master/src/System.Web.Mvc/ClientDataTypeModelValidatorProvider.cs

とその後

private static string GetUserResourceString(ControllerContext controllerContext, string resourceName) 
     { 
      string result = null; 

      if (!String.IsNullOrEmpty(ResourceClassKey) && (controllerContext != null) && (controllerContext.HttpContext != null)) 
      { 
       //result = controllerContext.HttpContext.GetGlobalResourceObject(ResourceClassKey, resourceName, CultureInfo.CurrentUICulture) as string; 
       result = GlobalRes.ResourceManager.GetString(resourceName); 
      } 

      return result; 
     } 

を変更するには、Global.asaxの中Application_Start中にDefaultModelBinderように設定します。

protected void Application_Start() 
{ 

    var existingProvider = ModelValidatorProviders.Providers.Single(x => x is ClientDataTypeModelValidatorProvider); 
    ModelValidatorProviders.Providers.Remove(existingProvider); 
    ModelValidatorProviders.Providers.Add(new myClientDataTypeModelValidatorProvider()); //!! 
    myClientDataTypeModelValidatorProvider.ResourceClassKey = typeof(GlobalRes).Name; 
    DefaultModelBinder.ResourceClassKey = typeof(GlobalRes).Name; 
} 
+0

をGlobalRes参照とは何ですか?そしてMvcResourcesリファレンス?教えてください。また、 "Global.asaxで書いた後に"悲しいあなたはどのような方法ですか?非常に悪い提案。 –

+1

@CanÜrekGlobalResは、リソースファイルの名前と同じ、リソースクラス名のようです。この場合、* .resxファイルは 'GlobalRes.resx'になります。 'GlobalRes'をあなたのリソースクラスの名前に置き換えてください。 –

+0

しかし、これはMVC 5では動作しません。少なくとも、date-error-messageに関して、検証メッセージのローカライゼーションを行うための単一の解決策は見つかりませんでした。それはハードコーディングされているようです。よくやった。 –

関連する問題