如何进行淘汰验证本地化

时间:2012-12-10 08:59:47

标签: grails localization knockout.js knockout-validation

我有一个视图页面,我正在使用knockout.js验证字段。我想用不同国家的语言验证我的字段,如西班牙语,法语等,即使用本地化。 我已将el-GR.js,fr-FR.js,ru-RU.js等文件添加到我的js文件夹中并引用它们。 现在我如何验证或检查我的modalModal.js页面?

modalModal.js

    ko.validation.rules.pattern.message = 'Invalid.';
    ko.validation.configure({
    registerExtenders : true,
    messagesOnModified : true,
    insertMessages : true,
    parseInputAttributes : true,
    messageTemplate : null
    });

   var mustEqual = function (val, other) {
   return val == other();
   };

   var modalViewModel= {
   firstName : ko.observable().extend({
    minLength : 2,
    maxLength : 40
    }),
    lastName : ko.observable().extend({
    minLength : 2,
    maxLength : 10
    }),
    organisation : ko.observable().extend({
    minLength : 2,
    maxLength : 40
    }),

    email : ko.observable().extend({ // custom message
    email: true
    }),
    password: ko.observable()
    };

    modalViewModel.confirmPassword = ko.observable().extend({
    validation: { validator: mustEqual, message: 'Passwords do not match.', params: 
    modalViewModel.password }
    });
   modalViewModel.errors = ko.validation.group(modalViewModel);

  // Activates knockout.js
   ko.applyBindings(modalViewModel,document.getElementById('light'));

1 个答案:

答案 0 :(得分:2)

我为最新的KO项目做了这个

我覆盖KO验证规则并使用Globalize插件,例如

ko.validation.rules.number.validator = function (value, validate) {
    return !String.hasValue(value) || (validate && !isNaN(Globalize.parseFloat(value)));
};

ko.validation.rules.date.validator = function (value, validate) {
    return !String.hasValue(value) || (validate && Globalize.parseDate(value) != null);
};

编辑:顺便说一句,Globalize插件中有一个错误,它会接受点(。)作为数字的一部分,即使它不是,我修复了这样的

Globalize.orgParaseFloat = Globalize.parseFloat;
Globalize.parseFloat = function (value) {
    value = String(value);

    var culture = this.findClosestCulture();
    var seperatorFound = false;
    for (var i in culture.numberFormat) {
        if (culture.numberFormat[i] == ".") {
            seperatorFound = true;
            break;
        }
    }

    if (!seperatorFound) {
        value = value.replace(".", "NaN");
    }

    return this.orgParaseFloat(value);
};