Localization 其中是MVC 3上DataAnnotation的默认错误消息的完整列表

Localization 其中是MVC 3上DataAnnotation的默认错误消息的完整列表,localization,data-annotations,asp.net-mvc-3,Localization,Data Annotations,Asp.net Mvc 3,还有一个MVC本地化问题 我正在尝试使用本地化的资源文件对ASP.NETMVC3应用程序进行本地化,以便按照建议在视图中显示文本 问题是,与往常一样,当尝试从数据注释本地化默认错误消息时 我知道您可以在每个属性中指定资源文件和密钥: [Required( ErrorMessageResourceType = typeof(CustomResourceManager), ErrorMessageResourceName = "ResourceKey")] public string Userna

还有一个MVC本地化问题

我正在尝试使用本地化的资源文件对ASP.NETMVC3应用程序进行本地化,以便按照建议在视图中显示文本

问题是,与往常一样,当尝试从数据注释本地化默认错误消息时

我知道您可以在每个属性中指定资源文件和密钥:

[Required(
ErrorMessageResourceType = typeof(CustomResourceManager), 
ErrorMessageResourceName = "ResourceKey")]
public string Username { get; set; }
甚至,更好、更可取的是,您可以覆盖默认消息,如:,这样您就可以保留如下属性:

[Required]
public string Username { get; set; }
最后一种方法是我所遵循的方法,它可以工作,但仅当您要覆盖的DataAnnotation有一条且只有一条错误消息时,因为它总是查找与自定义资源文件中的属性相同的资源键(例如,“Required”需要资源文件中的“RequiredAttribute”条目)

其他属性(如StringLength)具有多条错误消息,具体取决于您使用的可选参数。因此,如果您有一个类似以下的模型:

public class Person
{
    [Required]
    [StringLengthLocalizedAttribute(10, MinimumLength = 5)]
    [Display(Name = "User name")]
    public string UserName { get; set; }
}
错误消息是“字段用户名必须是最小长度为5、最大长度为10的字符串。

如果将StringLength属性更改为:

    [StringLengthLocalizedAttribute(10)]
错误消息更改为“字段用户名必须是最大长度为10的字符串。”,因此,在这种情况下,至少有2条默认错误消息需要覆盖,@kim tranjan给出的解决方案失败

我的部分解决方案是实现我自己的StringLength属性,如下所示:

public class StringLengthLocalizedAttribute : StringLengthAttribute
{
    public StringLengthLocalizedAttribute(int maximumLength) : base(maximumLength)
    {
        ErrorMessageResourceType = typeof(CustomValidationResource);
    }

    public override string FormatErrorMessage(string name)
    {
        ErrorMessageResourceName = MinimumLength > 0 ? "StringLengthAttributeMinMax" : "StringLengthAttributeMax";
        return base.FormatErrorMessage(name);
    }
}
其中我有一个带有验证消息的本地化资源“CustomValidationResource”,并将其设置为ErrorMessageResourceType。然后,覆盖FormatErrorMessage函数,根据可选参数决定应该应用哪个消息字符串

因此,这里的问题是:有人知道我们在哪里可以找到DataAnnotation属性所使用的全部资源键列表,然后在不测试每个属性的情况下查看每个属性中有多少不同的错误消息吗

或者更好的是,我们可以使用原始的RESX文件来查看字符串模板并使用相同的资源键对其进行本地化吗?这样,仅更改ErrorMessageResourceType应该适用于所有DataAnnotations属性,并且我不需要猜测在本地化字符串中放置“{1}”或“{2}”的位置

谢谢,
Sergi

如果使用类似Reflector的工具打开
系统.ComponentModel.DataAnnotations.dll
,则可以打开资源
系统.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources
,然后进行查看


您还可以查看提供对资源字符串访问的
System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources类。

如果您仍在查找验证字符串的概述,在下面,您可以从System.ComponentModel.DataAnnotations.resources.DataAnnotationsResources类中找到资源,如Tz所述:

[ArgumentIsNullOrWhitespace, The argument '{0}' cannot be null, empty or contain only white space.]
[AssociatedMetadataTypeTypeDescriptor_MetadataTypeContainsUnknownProperties, The associated metadata type for type '{0}' contains the following unknown properties or fields: {1}. Please make sure that the names of these members match the names of the properties on the main type.]
[AttributeStore_Type_Must_Be_Public, The type '{0}' must be public.]
[AttributeStore_Unknown_Method, The type '{0}' does not contain a public method named '{1}'.]
[AttributeStore_Unknown_Property, The type '{0}' does not contain a public property named '{1}'.]
[Common_NullOrEmpty, Value cannot be null or empty.]
[Common_PropertyNotFound, The property {0}.{1} could not be found.]
[CompareAttribute_MustMatch, '{0}' and '{1}' do not match.]
[CompareAttribute_UnknownProperty, Could not find a property named {0}.]
[CreditCardAttribute_Invalid, The {0} field is not a valid credit card number.]
[CustomValidationAttribute_Method_Must_Return_ValidationResult, The CustomValidationAttribute method '{0}' in type '{1}' must return System.ComponentModel.DataAnnotations.ValidationResult.  Use System.ComponentModel.DataAnnotations.ValidationResult.Success to represent success.]
[CustomValidationAttribute_Method_Not_Found, The CustomValidationAttribute method '{0}' does not exist in type '{1}' or is not public and static.]
[CustomValidationAttribute_Method_Required, The CustomValidationAttribute.Method was not specified.]
[CustomValidationAttribute_Method_Signature, The CustomValidationAttribute method '{0}' in type '{1}' must match the expected signature: public static ValidationResult {0}(object value, ValidationContext context).  The value can be strongly typed.  The ValidationContext parameter is optional.]
[CustomValidationAttribute_Type_Conversion_Failed, Could not convert the value of type '{0}' to '{1}' as expected by method {2}.{3}.]
[CustomValidationAttribute_Type_Must_Be_Public, The custom validation type '{0}' must be public.]
[CustomValidationAttribute_ValidationError, {0} is not valid.]
[CustomValidationAttribute_ValidatorType_Required, The CustomValidationAttribute.ValidatorType was not specified.]
[DataTypeAttribute_EmptyDataTypeString, The custom DataType string cannot be null or empty.]
[DisplayAttribute_PropertyNotSet, The {0} property has not been set.  Use the {1} method to get the value.]
[EmailAddressAttribute_Invalid, The {0} field is not a valid e-mail address.]
[EnumDataTypeAttribute_TypeCannotBeNull, The type provided for EnumDataTypeAttribute cannot be null.]
[EnumDataTypeAttribute_TypeNeedsToBeAnEnum, The type '{0}' needs to represent an enumeration type.]
[FileExtensionsAttribute_Invalid, The {0} field only accepts files with the following extensions: {1}]
[LocalizableString_LocalizationFailed, Cannot retrieve property '{0}' because localization failed.  Type '{1}' is not public or does not contain a public static string property with the name '{2}'.]
[MaxLengthAttribute_InvalidMaxLength, MaxLengthAttribute must have a Length value that is greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length.]
[MaxLengthAttribute_ValidationError, The field {0} must be a string or array type with a maximum length of '{1}'.]
[MetadataTypeAttribute_TypeCannotBeNull, MetadataClassType cannot be null.]
[MinLengthAttribute_InvalidMinLength, MinLengthAttribute must have a Length value that is zero or greater.]
[MinLengthAttribute_ValidationError, The field {0} must be a string or array type with a minimum length of '{1}'.]
[PhoneAttribute_Invalid, The {0} field is not a valid phone number.]
[RangeAttribute_ArbitraryTypeNotIComparable, The type {0} must implement {1}.]
[RangeAttribute_MinGreaterThanMax, The maximum value '{0}' must be greater than or equal to the minimum value '{1}'.]
[RangeAttribute_Must_Set_Min_And_Max, The minimum and maximum values must be set.]
[RangeAttribute_Must_Set_Operand_Type, The OperandType must be set when strings are used for minimum and maximum values.]
[RangeAttribute_ValidationError, The field {0} must be between {1} and {2}.]
[RegexAttribute_ValidationError, The field {0} must match the regular expression '{1}'.]
[RegularExpressionAttribute_Empty_Pattern, The pattern must be set to a valid regular expression.]
[RequiredAttribute_ValidationError, The {0} field is required.]
[StringLengthAttribute_InvalidMaxLength, The maximum length must be a nonnegative integer.]
[StringLengthAttribute_ValidationError, The field {0} must be a string with a maximum length of {1}.]
[StringLengthAttribute_ValidationErrorIncludingMinimum, The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.]
[UIHintImplementation_ControlParameterKeyIsNotAString, The key parameter at position {0} with value '{1}' is not a string. Every key control parameter must be a string.]
[UIHintImplementation_ControlParameterKeyIsNull, The key parameter at position {0} is null. Every key control parameter must be a string.]
[UIHintImplementation_ControlParameterKeyOccursMoreThanOnce, The key parameter at position {0} with value '{1}' occurs more than once.]
[UIHintImplementation_NeedEvenNumberOfControlParameters, The number of control parameters must be even.]
[UrlAttribute_Invalid, The {0} field is not a valid fully-qualified http, https, or ftp URL.]
[ValidationAttribute_Cannot_Set_ErrorMessage_And_Resource, Either ErrorMessageString or ErrorMessageResourceName must be set, but not both.]
[ValidationAttribute_IsValid_NotImplemented, IsValid(object value) has not been implemented by this class.  The preferred entry point is GetValidationResult() and classes should override IsValid(object value, ValidationContext context).]
[ValidationAttribute_NeedBothResourceTypeAndResourceName, Both ErrorMessageResourceType and ErrorMessageResourceName need to be set on this attribute.]
[ValidationAttribute_ResourcePropertyNotStringType, The property '{0}' on resource type '{1}' is not a string type.]
[ValidationAttribute_ResourceTypeDoesNotHaveProperty, The resource type '{0}' does not have an accessible static property named '{1}'.]
[ValidationAttribute_ValidationError, The field {0} is invalid.]
[ValidationContext_Must_Be_Method, The ValidationContext for the type '{0}', member name '{1}' must provide the MethodInfo.]
[ValidationContextServiceContainer_ItemAlreadyExists, A service of type '{0}' already exists in the container.]
[Validator_InstanceMustMatchValidationContextInstance, The instance provided must match the ObjectInstance on the ValidationContext supplied.]
[Validator_Property_Value_Wrong_Type, The value for property '{0}' must be of type '{1}'.]

(MVC 4.NET 4.0)

如果其他人仍然需要它(即使问题很老),原始文件就在这里:

以下是内容,以防他们决定某一天将其删除:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 

    Version 2.0

    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.

    Example:

    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>

    There are any number of "resheader" rows that contain simple 
    name/value pairs.

    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.

    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:

    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.

    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="AssociatedMetadataTypeTypeDescriptor_MetadataTypeContainsUnknownProperties" xml:space="preserve">
    <value>The associated metadata type for type '{0}' contains the following unknown properties or fields: {1}. Please make sure that the names of these members match the names of the properties on the main type.</value>
  </data>
  <data name="AttributeStore_Type_Must_Be_Public" xml:space="preserve">
    <value>The type '{0}' must be public.</value>
  </data>
  <data name="AttributeStore_Unknown_Method" xml:space="preserve">
    <value>The type '{0}' does not contain a public method named '{1}'.</value>
  </data>
  <data name="AttributeStore_Unknown_Property" xml:space="preserve">
    <value>The type '{0}' does not contain a public property named '{1}'.</value>
  </data>
  <data name="CustomValidationAttribute_Method_Must_Return_ValidationResult" xml:space="preserve">
    <value>The CustomValidationAttribute method '{0}' in type '{1}' must return System.ComponentModel.DataAnnotations.ValidationResult.  Use System.ComponentModel.DataAnnotations.ValidationResult.Success to represent success.</value>
  </data>
  <data name="CustomValidationAttribute_Method_Not_Found" xml:space="preserve">
    <value>The CustomValidationAttribute method '{0}' does not exist in type '{1}' or is not public and static.</value>
  </data>
  <data name="CustomValidationAttribute_Method_Required" xml:space="preserve">
    <value>The CustomValidationAttribute.Method was not specified.</value>
  </data>
  <data name="CustomValidationAttribute_Method_Signature" xml:space="preserve">
    <value>The CustomValidationAttribute method '{0}' in type '{1}' must match the expected signature: public static ValidationResult {0}(object value, ValidationContext context).  The value can be strongly typed.  The ValidationContext parameter is optional.</value>
  </data>
  <data name="CustomValidationAttribute_Type_Must_Be_Public" xml:space="preserve">
    <value>The custom validation type '{0}' must be public.</value>
  </data>
  <data name="CustomValidationAttribute_ValidationError" xml:space="preserve">
    <value>{0} is not valid.</value>
  </data>
  <data name="CustomValidationAttribute_ValidatorType_Required" xml:space="preserve">
    <value>The CustomValidationAttribute.ValidatorType was not specified.</value>
  </data>
  <data name="DataTypeAttribute_EmptyDataTypeString" xml:space="preserve">
    <value>The custom DataType string cannot be null or empty.</value>
  </data>
  <data name="LocalizableString_LocalizationFailed" xml:space="preserve">
    <value>Cannot retrieve property '{0}' because localization failed.  Type '{1}' is not public or does not contain a public static string property with the name '{2}'.</value>
  </data>
  <data name="Validator_Property_Value_Wrong_Type" xml:space="preserve">
    <value>The value for property '{0}' must be of type '{1}'.</value>
  </data>
  <data name="RangeAttribute_ArbitraryTypeNotIComparable" xml:space="preserve">
    <value>The type {0} must implement {1}.</value>
  </data>
  <data name="RangeAttribute_MinGreaterThanMax" xml:space="preserve">
    <value>The maximum value '{0}' must be greater than or equal to the minimum value '{1}'.</value>
  </data>
  <data name="RangeAttribute_Must_Set_Min_And_Max" xml:space="preserve">
    <value>The minimum and maximum values must be set.</value>
  </data>
  <data name="RangeAttribute_Must_Set_Operand_Type" xml:space="preserve">
    <value>The OperandType must be set when strings are used for minimum and maximum values.</value>
  </data>
  <data name="RangeAttribute_ValidationError" xml:space="preserve">
    <value>The field {0} must be between {1} and {2}.</value>
  </data>
  <data name="RegexAttribute_ValidationError" xml:space="preserve">
    <value>The field {0} must match the regular expression '{1}'.</value>
  </data>
  <data name="RegularExpressionAttribute_Empty_Pattern" xml:space="preserve">
    <value>The pattern must be set to a valid regular expression.</value>
  </data>
  <data name="RequiredAttribute_ValidationError" xml:space="preserve">
    <value>The {0} field is required.</value>
  </data>
  <data name="StringLengthAttribute_InvalidMaxLength" xml:space="preserve">
    <value>The maximum length must be a nonnegative integer.</value>
  </data>
  <data name="StringLengthAttribute_ValidationError" xml:space="preserve">
    <value>The field {0} must be a string with a maximum length of {1}.</value>
  </data>
  <data name="UIHintImplementation_ControlParameterKeyIsNotAString" xml:space="preserve">
    <value>The key parameter at position {0} with value '{1}' is not a string. Every key control parameter must be a string.</value>
  </data>
  <data name="UIHintImplementation_ControlParameterKeyIsNull" xml:space="preserve">
    <value>The key parameter at position {0} is null. Every key control parameter must be a string.</value>
  </data>
  <data name="UIHintImplementation_NeedEvenNumberOfControlParameters" xml:space="preserve">
    <value>The number of control parameters must be even.</value>
  </data>
  <data name="UIHintImplementation_ControlParameterKeyOccursMoreThanOnce" xml:space="preserve">
    <value>The key parameter at position {0} with value '{1}' occurs more than once.</value>
  </data>
  <data name="ValidationAttribute_Cannot_Set_ErrorMessage_And_Resource" xml:space="preserve">
    <value>Either ErrorMessageString or ErrorMessageResourceName must be set, but not both.</value>
  </data>
  <data name="ValidationAttribute_NeedBothResourceTypeAndResourceName" xml:space="preserve">
    <value>Both ErrorMessageResourceType and ErrorMessageResourceName need to be set on this attribute.</value>
  </data>
  <data name="ValidationAttribute_ResourcePropertyNotStringType" xml:space="preserve">
    <value>The property '{0}' on resource type '{1}' is not a string type.</value>
  </data>
  <data name="ValidationAttribute_ResourceTypeDoesNotHaveProperty" xml:space="preserve">
    <value>The resource type '{0}' does not have an accessible static property named '{1}'.</value>
  </data>
  <data name="ValidationAttribute_ValidationError" xml:space="preserve">
    <value>The field {0} is invalid.</value>
  </data>
  <data name="ValidationContext_Must_Be_Method" xml:space="preserve">
    <value>The ValidationContext for the type '{0}', member name '{1}' must provide the MethodInfo.</value>
  </data>
  <data name="EnumDataTypeAttribute_TypeNeedsToBeAnEnum" xml:space="preserve">
    <value>The type '{0}' needs to represent an enumeration type.</value>
  </data>
  <data name="EnumDataTypeAttribute_TypeCannotBeNull" xml:space="preserve">
    <value>The type provided for EnumDataTypeAttribute cannot be null.</value>
  </data>
  <data name="MetadataTypeAttribute_TypeCannotBeNull" xml:space="preserve">
    <value>MetadataClassType cannot be null.</value>
  </data>
  <data name="DisplayAttribute_PropertyNotSet" xml:space="preserve">
    <value>The {0} property has not been set.  Use the {1} method to get the value.</value>
  </data>
  <data name="ValidationContextServiceContainer_ItemAlreadyExists" xml:space="preserve">
    <value>A service of type '{0}' already exists in the container.</value>
  </data>
  <data name="Validator_InstanceMustMatchValidationContextInstance" xml:space="preserve">
    <value>The instance provided must match the ObjectInstance on the ValidationContext supplied.</value>
  </data>
  <data name="ValidationAttribute_IsValid_NotImplemented" xml:space="preserve">
    <value>IsValid(object value) has not been implemented by this class.  The preferred entry point is GetValidationResult() and classes should override IsValid(object value, ValidationContext context).</value>
  </data>
  <data name="CustomValidationAttribute_Type_Conversion_Failed" xml:space="preserve">
    <value>Could not convert the value of type '{0}' to '{1}' as expected by method {2}.{3}.</value>
  </data>
  <data name="StringLengthAttribute_ValidationErrorIncludingMinimum" xml:space="preserve">
    <value>The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.</value>
  </data>
  <data name="CreditCardAttribute_Invalid" xml:space="preserve">
    <value>The {0} field is not a valid credit card number.</value>
  </data>
  <data name="EmailAddressAttribute_Invalid" xml:space="preserve">
    <value>The {0} field is not a valid e-mail address.</value>
  </data>
  <data name="FileExtensionsAttribute_Invalid" xml:space="preserve">
    <value>The {0} field only accepts files with the following extensions: {1}</value>
  </data>
  <data name="UrlAttribute_Invalid" xml:space="preserve">
    <value>The {0} field is not a valid fully-qualified http, https, or ftp URL.</value>
  </data>
  <data name="CompareAttribute_MustMatch" xml:space="preserve">
    <value>'{0}' and '{1}' do not match.</value>
  </data>
  <data name="Common_NullOrEmpty" xml:space="preserve">
    <value>Value cannot be null or empty.</value>
  </data>
  <data name="CompareAttribute_UnknownProperty" xml:space="preserve">
    <value>Could not find a property named {0}.</value>
  </data>
  <data name="Common_PropertyNotFound" xml:space="preserve">
    <value>The property {0}.{1} could not be found.</value>
  </data>
  <data name="PhoneAttribute_Invalid" xml:space="preserve">
    <value>The {0} field is not a valid phone number.</value>
  </data>
  <data name="MaxLengthAttribute_InvalidMaxLength" xml:space="preserve">
    <value>MaxLengthAttribute must have a Length value that is greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length.</value>
  </data>
  <data name="MaxLengthAttribute_ValidationError" xml:space="preserve">
    <value>The field {0} must be a string or array type with a maximum length of '{1}'.</value>
  </data>
  <data name="MinLengthAttribute_InvalidMinLength" xml:space="preserve">
    <value>MinLengthAttribute must have a Length value that is zero or greater.</value>
  </data>
  <data name="MinLengthAttribute_ValidationError" xml:space="preserve">
    <value>The field {0} must be a string or array type with a minimum length of '{1}'.</value>
  </data>
  <data name="ArgumentIsNullOrWhitespace" xml:space="preserve">
    <value>The argument '{0}' cannot be null, empty or contain only white space.</value>
  </data>
</root>

text/microsoft resx
2
System.Resources.ResXResourceReader,System.Windows.Forms,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter,System.Windows.Forms,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089
类型{0}的关联元数据类型包含以下未知属性或字段:{1}。请确保这些成员的名称与主类型上的属性名称匹配。
类型“{0}”必须是公共的。
类型“{0}”不包含名为“{1}”的公共方法。
类型“{0}”不包含名为“{1}”的公共属性。
类型{1}中的CustomValidationAttribute方法{0}必须返回System.ComponentModel.DataAnnotations.ValidationResult。使用System.ComponentModel.DataAnnotations.ValidationResult.Success表示成功。
CustomValidationAttribute方法{0}在类型{1}中不存在,或者不是公共的和静态的。
未指定CustomValidationAttribute.Method。
类型{1}中的CustomValidationAttribute方法{0}必须与预期的签名匹配:公共静态ValidationResult{0}(对象值,ValidationContext上下文)。该值可以是强类型的。ValidationContext参数是可选的。
自定义验证类型“{0}”必须是公共的。
{0}无效。
未指定CustomValidationAttribute.ValidatorType。
自定义数据类型字符串不能为null或空。
无法检索属性“{0}”,因为本地化失败。类型“{1}”不是公共的,或者不包含名为“{2}”的公共静态字符串属性。
属性{0}的值必须是类型{1}。
类型{0}必须实现{1}。
最大值“{0}”必须大于或等于最小值“{1}”。
必须设置最小值和最大值。
当字符串用于最小值和最大值时,必须设置操作数类型。
这个