Où est toute la liste des messages d'erreur par défaut pour DataAnnotations à MVC 3
encore une autre question de localisation MVC...
j'essaie de localiser un ASP.Net MVC 3 app using localized Resource files to display texts in the views, as recommended.
le problème est, comme d'habitude, de localiser les messages d'erreur par défaut à partir des annotations de données.
je sais que vous pouvez spécifier le fichier de ressources et la clé dans chaque Attribut:
[Required(
ErrorMessageResourceType = typeof(CustomResourceManager),
ErrorMessageResourceName = "ResourceKey")]
public string Username { get; set; }
et même, ce qui est mieux et préféré, vous pouvez outrepasser le message par défaut, comme ceci: ressources par Défaut pour les données d'annotations dans les ASP.NET MVC, donc vous pouvez laisser les attributs comme:
[Required]
public string Username { get; set; }
cette dernière approche est celle que je suivais, et elle fonctionne, mais seulement lorsque la DataAnnotation que vous voulez outrepasser a un seul message d'erreur, car elle recherche toujours une clé de ressource appelée la même que l'attribut dans le fichier de ressource personnalisé (par exemple "Required" a besoin d'une entrée "Requireddattribute" dans le fichier de ressource)
Autres les attributs, comme StringLength, ont plus d'un message d'erreur, selon les paramètres optionnels que vous utilisez. Donc, si vous avez un modèle comme:
public class Person
{
[Required]
[StringLengthLocalizedAttribute(10, MinimumLength = 5)]
[Display(Name = "User name")]
public string UserName { get; set; }
}
Le message d'erreur est "Le champ nom d'Utilisateur doit être une chaîne d'une longueur minimale de 5 et d'une longueur maximale de 10."
et si vous changez L'attribut StringLength en:
[StringLengthLocalizedAttribute(10)]
le message d'erreur "le terrain nom d'Utilisateur doit être une chaîne d'une longueur maximale de 10. " donc, dans ce cas, il y a au moins 2 messages d'erreur par défaut à remplacer, et les solutions données par @kim-tranjan échouent.
ma solution partielle est d'implémenter mon propre attribut StringLength comme ceci:
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);
}
}
où j'ai une ressource localisée "CustomValidationResource" avec les messages de validation, et l'ai définie comme ErrorMessageResourceType. Puis, en écrasant la fonction FormatErrorMessage, je décide quelle chaîne de messages doit être appliquée en fonction des paramètres optionnels.
donc, la question ici est: Est-ce que quelqu'un sait où nous pouvons trouver la liste complète des clés de ressources utilisées par les attributs DataAnnotation et voir alors combien de messages d'erreur différents nous avons dans chacun d'eux sans être en train de tester chacun d'eux?
ou encore mieux, pouvons-nous avoir le fichier RESX original pour voir les modèles de chaîne et les localiser utiliser les mêmes clés de ressources? De cette façon, changer seulement le ErrorMessageResourceType devrait fonctionner pour toutes les Attibutes des annotations de données, et je ne devrais pas avoir à deviner où mettre "{1}" ou "{2}" dans ma chaîne localisée.
Merci, Sergi
3 réponses
dans le cas où vous cherchiez encore un aperçu des chaînes de validation, vous trouverez ci-dessous les ressources de Système.ComponentModel.DataAnnotations.Ressources.DataAnnotationsResources classe comme Tz_ mentionné:
[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)
Si vous ouvrez le System.ComponentModel.DataAnnotations.dll
avec un outil comme Réflecteur, vous pouvez ouvrir la ressource System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resources
et avoir un regard.
Vous pouvez aussi consulter les System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources
classe qui fournit l'accès aux chaînes de ressources.
Dans le cas où quelqu'un d'autre doit encore (même si la question est très vieux), le fichier d'origine est ici:
ci-Dessous le contenu, dans le cas où ils décident de l'enlever un jour:
<?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>