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文件中添加了以下字符串资源(或翻译):
Run Code Online (Sandbox Code Playgroud)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.
当我提交日期字符串时,我将收到"FieldMustBeDate"的翻译.当我提交无效日期(例如"01/01/201a")时,我收到默认ModelBinders.resx中定义的"PropertyValueInvalid"的未翻译消息,而不是翻译...如何显示正确的翻译for PropertyValueInvalid?
我将解释具体的客户端消息.首先,在模型中设置资源:
[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 ......没有别的,它对我很有用.我希望这种方法对你有所帮助.