Asp.net mvc 4 本地化比较属性
在这个问题的底部是一个包含三个属性的模型:OldPassword、NewPassword和ConfirmPassword。这些将以更改密码的形式显示。我已经本地化了所有错误消息,除了一条:当Compare属性失败时,我无法完全本地化错误消息。如您所见,我正在从资源文件中名为FieldMismatch的字符串读取错误消息。以下是西班牙语资源文件中的字符串:Asp.net mvc 4 本地化比较属性,asp.net-mvc-4,localization,attributes,Asp.net Mvc 4,Localization,Attributes,在这个问题的底部是一个包含三个属性的模型:OldPassword、NewPassword和ConfirmPassword。这些将以更改密码的形式显示。我已经本地化了所有错误消息,除了一条:当Compare属性失败时,我无法完全本地化错误消息。如您所见,我正在从资源文件中名为FieldMismatch的字符串读取错误消息。以下是西班牙语资源文件中的字符串: El campo {0} y {1} campo no coinciden. {0}部分正确地被替换为OldPassword的翻译,但我不知
El campo {0} y {1} campo no coinciden.
{0}部分正确地被替换为OldPassword的翻译,但我不知道如何本地化指向NewPassword的指针
总而言之,我正在寻找一种替代方法
[比较(“新密码”。。。
具有
[比较(Resources.Culture.Account.Account.NewPassword
有人对实现这一目标的最佳方式有什么想法吗
public class LocalPasswordModel
{
[Required(ErrorMessageResourceName = "FieldIsRequired", ErrorMessageResourceType = typeof(Resources.Culture.Home.Global))]
[DataType(DataType.Password)]
[Display(Name = "CurrentPasswordLabel", ResourceType = typeof(Resources.Culture.Account.Account))]
public string OldPassword { get; set; }
[Required(ErrorMessageResourceName = "FieldIsRequired", ErrorMessageResourceType = typeof(Resources.Culture.Home.Global))]
[StringLength(100, ErrorMessageResourceName = "NewPasswordLength", ErrorMessageResourceType = typeof(Resources.Culture.Account.Account), MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "NewPasswordLabel", ResourceType = typeof(Resources.Culture.Account.Account))]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "ConfirmPasswordLabel", ResourceType = typeof(Resources.Culture.Account.Account))]
[Compare("NewPassword", ErrorMessageResourceName = "FieldMismatch", ErrorMessageResourceType = typeof(Resources.Culture.Home.Global))]
public string ConfirmPassword { get; set; }
}
这看起来像是MVC4和MVC5(我正在使用)中的一个已知错误。它似乎已在5.1中修复:
我找到了解决这个问题的另一种方法。 我已经公开了所有翻译、build action=“Embedded Resource”和自定义工具PublicResXFileCodeGenerator。所有文件都放在${MySolution}/App_GlobalResources/translation*.resx文件中
[Required(ErrorMessageResourceType = typeof(App_GlobalResources.Translation), ErrorMessageResourceName = "MessageRequired")]
//[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[StringLength(100, ErrorMessageResourceType = typeof(App_GlobalResources.Translation), ErrorMessageResourceName = "MessagePaswdLen", MinimumLength = 6)]
[DataType(DataType.Password)]
//[Display(Name = "New password")]
[Display(ResourceType = typeof(App_GlobalResources.Translation), Name = "Password")]
public string NewPassword { get; set; }
英文翻译是这样的
MessageRequired|{0} is required
MessagePaswdLen|The {0} must be at least {2} characters long.
MessageRequired |{0}是必需的
MessagePaswdLen |{0}的长度必须至少为{2}个字符。
再擦亮一个
MessagePaswdLen|{0} musi mieć co najmniej {2} znaków.
MessageRequired|{0} jest wymagane
MessagePaswdLen{0}musi miećco najmniej{2}znaków。
MessageRequired |{0}jest wymagane
你真的只想将新密码输出到屏幕上吗?这违反了几个安全原则。不,他不是这么说的。有一个名为“FieldMismatch”的ErrorMessageResourceName,其中包含文本“字段{0}和{1}不匹配”。这应该显示为消息“旧密码和新密码字段不匹配”。