使用 showAllMessages() 时,敲除验证不使用本地化设置
KnockOut Validation not using localization settings when using showAllMessages()
我正在使用 KnockOut Validation 来验证表单客户端。除了当我调用方法 showAllMessages(true)
时,一切都运行良好,它以英语显示所有消息,忽略语言环境设置。我的代码如下所示:
<asp:ScriptManager ID="ScriptManagerMaster" runat="server">
<Scripts>
<asp:ScriptReference Path="js/jquery-2.1.4.min.js"/>
<asp:ScriptReference Path="js/bootstrap.min.js" />
<asp:ScriptReference Path="js/knockout-3.3.0.js" />
<asp:ScriptReference Path="js/knockout.validation.js"/>
<asp:ScriptReference Path="js/es-ES.js"/>
<asp:ScriptReference Path="js/App/_run.js"/>
<asp:ScriptReference Path="js/App/App.DataModel.js"/>
<asp:ScriptReference Path="js/App/App.ViewModel.js"/>
</Scripts>
</asp:ScriptManager>
ko.validation.locale("es-es");
ko.validation.init({
registerExtenders: true,
messagesOnModified: true,
insertMessages: true,
parseInputAttributes: true,
errorElementClass: "has-error",
errorMessageClass: "help-block",
decorateInputElement: true
}, true);
self.saveUser = function () {
var errors = ko.validation.group(self, { deep: true });
if (errors().length === 0) {
var user = ko.toJSON(self);
dataModel.putUser(user)
.done(function(result) {
alert("Se guardó el usuario");
})
.fail(self.onUserCreationError);
} else {
errors.showAllMessages(true);
}
}
当我执行 saveUser()
时,它验证正确,但所有错误消息看起来像“This field is required
”而不是“Este campo es requerido
”,因为我使用的是 es-es
语言环境
在这种情况下,如何让它使用语言环境?
我查看了 ko.validation.js
文件,发现这些消息直接在文件中,响应没有引用 locale.js
消息。一个快速的解决方法是手动将这些消息从英语更改为 locale.js
或执行以下操作:
kv.rules = {};
kv.rules['required'] = {
validator: function (val, required) {
var testVal;
if (val === undefined || val === null) {
return !required;
}
testVal = val;
if (typeof (val) === 'string') {
if (String.prototype.trim) {
testVal = val.trim();
}
else {
testVal = val.replace(/^\s+|\s+$/g, '');
}
}
if (!required) {// if they passed: { required: false }, then don't require this
return true;
}
return ((testVal + '').length > 0);
},
message: 'Este campo es obligatorio.'
};
我正在使用 KnockOut Validation 来验证表单客户端。除了当我调用方法 showAllMessages(true)
时,一切都运行良好,它以英语显示所有消息,忽略语言环境设置。我的代码如下所示:
<asp:ScriptManager ID="ScriptManagerMaster" runat="server">
<Scripts>
<asp:ScriptReference Path="js/jquery-2.1.4.min.js"/>
<asp:ScriptReference Path="js/bootstrap.min.js" />
<asp:ScriptReference Path="js/knockout-3.3.0.js" />
<asp:ScriptReference Path="js/knockout.validation.js"/>
<asp:ScriptReference Path="js/es-ES.js"/>
<asp:ScriptReference Path="js/App/_run.js"/>
<asp:ScriptReference Path="js/App/App.DataModel.js"/>
<asp:ScriptReference Path="js/App/App.ViewModel.js"/>
</Scripts>
</asp:ScriptManager>
ko.validation.locale("es-es");
ko.validation.init({
registerExtenders: true,
messagesOnModified: true,
insertMessages: true,
parseInputAttributes: true,
errorElementClass: "has-error",
errorMessageClass: "help-block",
decorateInputElement: true
}, true);
self.saveUser = function () {
var errors = ko.validation.group(self, { deep: true });
if (errors().length === 0) {
var user = ko.toJSON(self);
dataModel.putUser(user)
.done(function(result) {
alert("Se guardó el usuario");
})
.fail(self.onUserCreationError);
} else {
errors.showAllMessages(true);
}
}
当我执行 saveUser()
时,它验证正确,但所有错误消息看起来像“This field is required
”而不是“Este campo es requerido
”,因为我使用的是 es-es
语言环境
在这种情况下,如何让它使用语言环境?
我查看了 ko.validation.js
文件,发现这些消息直接在文件中,响应没有引用 locale.js
消息。一个快速的解决方法是手动将这些消息从英语更改为 locale.js
或执行以下操作:
kv.rules = {};
kv.rules['required'] = {
validator: function (val, required) {
var testVal;
if (val === undefined || val === null) {
return !required;
}
testVal = val;
if (typeof (val) === 'string') {
if (String.prototype.trim) {
testVal = val.trim();
}
else {
testVal = val.replace(/^\s+|\s+$/g, '');
}
}
if (!required) {// if they passed: { required: false }, then don't require this
return true;
}
return ((testVal + '').length > 0);
},
message: 'Este campo es obligatorio.'
};