grails - 如何进行 knockout 验证本地化工作

标签 grails localization knockout.js knockout-validation

我有一个 View 页面,我正在其中使用 knockout.js 验证字段。我想用不同国家的语言(例如西类牙语、法语等)验证我的字段,即使用本地化。 我已将 el-GR.js 、fr-FR.js 、ru-RU.js 等文件添加到我的 js 文件夹中并引用它们。 现在我如何验证或 checkin 我的 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'));

最佳答案

我为我最新的 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);
};

关于grails - 如何进行 knockout 验证本地化工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13797745/

相关文章:

ios - Xcode 9 本地化不起作用?

android - 基于语言在 webview 中加载本地 HTML 文件,如果找不到文件则使用默认值

javascript - 计算的可观察量未定义

javascript - 如果 Knockout 在计算中包装了一个有界函数表达式,为什么它并不总是创建一个依赖项?

jquery - 如何在 json 属性中执行函数?

grails - 如何使用 gradle bootRun 通过 https 在本地运行 Grails 3 应用程序

grails - Grails 2.5-插入期间根据ID生成字符串

json - 在 grails 中解析 JSON 时如何获得真正的空值而不是 JSONObject.NULL 值

mysql - GORM 中涉及 MySQL 函数 cos、弧度的复杂查询

ios - Google Places API for IOS 未设置本地化语言