ASP.NET MVC 4中未翻译自定义的错误消息

use*_*075 5 c# asp.net-mvc localization global-asax asp.net-mvc-4

我想翻译验证消息"字段日期必须是日期".

我已将以下键添加到Global.asax的Application_Start()中

ClientDataTypeModelValidatorProvider.ResourceClassKey = "ModelBinders";
DefaultModelBinder.ResourceClassKey = "ModelBinders";
Run Code Online (Sandbox Code Playgroud)

我在App_GlobalResources中创建了ModelBinders.resx,ModelBinders.nl.resx,ModelBinders.fr.resx.

我在.resx文件中添加了以下字符串资源(或翻译):

Name                   Value
====                   =====
FieldMustBeDate        The field {0} must be a date.
FieldMustBeNumeric     The field {0} must be a number.
PropertyValueInvalid   The value '{0}' is not valid for {1}.
PropertyValueRequired  A value is required.
Run Code Online (Sandbox Code Playgroud)

当我提交日期字符串时,我将收到"FieldMustBeDate"的翻译.当我提交无效日期(例如"01/01/201a")时,我收到默认ModelBinders.resx中定义的"PropertyValueInvalid"的未翻译消息,而不是翻译...如何显示正确的翻译for PropertyValueInvalid?

Jos*_* M. 9

我将解释具体的客户端消息.首先,在模型中设置资源:

    [Required(ErrorMessageResourceType = typeof(Resources.ModelBinders), ErrorMessageResourceName = "Required")]
    [Display(Name = "UserName", ResourceType = typeof(Resources.ModelBinders))]
    public string UserName { get; set; }
Run Code Online (Sandbox Code Playgroud)

其次,在控制器中覆盖线程文化,我从路径中获取,例如在Initialize方法中:

    protected override void Initialize(RequestContext requestContext)
    {
        string cultureInfo = requestContext.RouteData.GetRequiredString("cultureInfo");
        System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(cultureInfo);
        System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(cultureInfo);
        base.Initialize(requestContext);
    }
Run Code Online (Sandbox Code Playgroud)

客户留言用英文

西班牙语客户留言

正确格式化资源非常重要:ModelBinders.resx,ModelBinders.es-ES.resx,ModelBinders.en-US.resx ......没有别的,它对我很有用.我希望这种方法对你有所帮助.