jQuery 验证器没有格式化消息
jQuery Validator no formatting messages
我已经使用我一直使用的方法翻译了我想要的消息。消息正常,问题是号码不见了。
我的消息翻译代码:
$.extend(jQuery.validator.messages, {
required: 'Este campo es requerido.',
maxlength: $.validator.format("Favor de ingresar no mas de {0} caracteres."),
max: $.validator.format("Favor de ingresar un valor menos de o igual a {0}."),
});
这是输出:
它验证得很好,如果我将值降低到 100 以下它会接受它们。所以这意味着现有的规则没有问题,但消息没有被格式化。
更新
在 jquery.validate.js
的第 217 行,我放置了一个 console.log
的替换方法:
$.validator.format = function( source, params ) {
if ( arguments.length === 1 ) {
return function() {
var args = $.makeArray( arguments );
args.unshift( source );
return $.validator.format.apply( this, args );
};
}
if ( arguments.length > 2 && params.constructor !== Array ) {
params = $.makeArray( arguments ).slice( 1 );
}
if ( params.constructor !== Array ) {
params = [ params ];
}
$.each( params, function( i, n ) {
console.log(source.replace( new RegExp( "\{" + i + "\}", "g" ), function() {
return n;
}));
source = source.replace( new RegExp( "\{" + i + "\}", "g" ), function() {
return n;
});
});
return source;
};
不幸的是,即使记录替换方法,它仍然带有数字 0
。所以它没有得到验证器丢失的实际数据:
我最初在 post 中没有想到的是我正在使用 smarty 模板。并非所有 Javascript 我都包裹在 {literal}
标签中。所以它将消息数组中的 {0}
翻译为一个聪明的变量。所以在 jquery.validate.js
的第 232 行,它实际上并没有替换任何东西,因为缺少 {}
括号。
因此,通过使用 {literal}
标记将我的替换代码包装在 tpl
文件中,它解决了整个问题。
新代码:
{literal}
$.extend(jQuery.validator.messages, {
required: 'Este campo es requerido.',
maxlength: $.validator.format("Favor de ingresar no mas de {0} caracteres."),
max: $.validator.format("Favor de ingresar un valor menos de o igual a {0}."),
});
{/literal}
我已经使用我一直使用的方法翻译了我想要的消息。消息正常,问题是号码不见了。
我的消息翻译代码:
$.extend(jQuery.validator.messages, {
required: 'Este campo es requerido.',
maxlength: $.validator.format("Favor de ingresar no mas de {0} caracteres."),
max: $.validator.format("Favor de ingresar un valor menos de o igual a {0}."),
});
这是输出:
它验证得很好,如果我将值降低到 100 以下它会接受它们。所以这意味着现有的规则没有问题,但消息没有被格式化。
更新
在 jquery.validate.js
的第 217 行,我放置了一个 console.log
的替换方法:
$.validator.format = function( source, params ) {
if ( arguments.length === 1 ) {
return function() {
var args = $.makeArray( arguments );
args.unshift( source );
return $.validator.format.apply( this, args );
};
}
if ( arguments.length > 2 && params.constructor !== Array ) {
params = $.makeArray( arguments ).slice( 1 );
}
if ( params.constructor !== Array ) {
params = [ params ];
}
$.each( params, function( i, n ) {
console.log(source.replace( new RegExp( "\{" + i + "\}", "g" ), function() {
return n;
}));
source = source.replace( new RegExp( "\{" + i + "\}", "g" ), function() {
return n;
});
});
return source;
};
不幸的是,即使记录替换方法,它仍然带有数字 0
。所以它没有得到验证器丢失的实际数据:
我最初在 post 中没有想到的是我正在使用 smarty 模板。并非所有 Javascript 我都包裹在 {literal}
标签中。所以它将消息数组中的 {0}
翻译为一个聪明的变量。所以在 jquery.validate.js
的第 232 行,它实际上并没有替换任何东西,因为缺少 {}
括号。
因此,通过使用 {literal}
标记将我的替换代码包装在 tpl
文件中,它解决了整个问题。
新代码:
{literal}
$.extend(jQuery.validator.messages, {
required: 'Este campo es requerido.',
maxlength: $.validator.format("Favor de ingresar no mas de {0} caracteres."),
max: $.validator.format("Favor de ingresar un valor menos de o igual a {0}."),
});
{/literal}