From a581938b6dfbba2a59930b2fa0c436c9eccfead8 Mon Sep 17 00:00:00 2001 From: mde Date: Sun, 26 Feb 2012 12:21:39 -0800 Subject: [PATCH] Localized model error-messages, stubs for tests. --- lib/i18n/index.js | 5 +-- lib/model/validators.js | 80 ++++++++++++++++++++++++++++----------- test/model_create_user.js | 6 +++ test/model_datatypes.js | 6 +++ 4 files changed, 72 insertions(+), 25 deletions(-) diff --git a/lib/i18n/index.js b/lib/i18n/index.js index 4c179d65..0856df26 100644 --- a/lib/i18n/index.js +++ b/lib/i18n/index.js @@ -6,7 +6,8 @@ var i18n = new (function () { this.getText = function (key, opts, locale) { var currentLocale = locale || geddy.config.i18n.defaultLocale - , str = _strings[currentLocale][key] || "[[" + key + "]]"; + , strings = _strings[currentLocale] || {} + , str = strings[key] || "[[" + key + "]]"; for (p in opts){ str = str.replace(new RegExp('\\{' + p + '\\}', 'g'), opts[p]); } @@ -14,10 +15,8 @@ var i18n = new (function () { }; this.loadLocale = function (locale, strings) { - geddy.log.debug('registering ' + locale); _strings[locale] = _strings[locale] || {}; geddy.mixin(_strings[locale], strings); - geddy.log.debug('registered ' + locale + ' ' + JSON.stringify(_strings[locale])); }; })(); diff --git a/lib/model/validators.js b/lib/model/validators.js index 891bb49b..5148caba 100644 --- a/lib/model/validators.js +++ b/lib/model/validators.js @@ -16,6 +16,8 @@ * */ +var i18n = require('../i18n'); + /* * Basic validators -- name is the field name, params is the entire params * collection (needed for stuff like password confirmation so it's possible @@ -28,65 +30,99 @@ * message: 'Something is wrong'} */ var validators = { - present: function (name, val, params, rule) { + present: function (name, val, params, rule, locale) { + var currentLocale = locale || geddy.config.i18n.defaultLocale + , msg; if (!val) { - return rule.message || 'Field "' + name + '" is required.'; + //'Field "' + name + '" is required.'; + msg = rule.message || i18n.getText('model.validatesPresent', + {name: name}, currentLocale); } + return msg; }, - absent: function (name, val, params, rule) { + absent: function (name, val, params, rule, locale) { + var currentLocale = locale || geddy.config.i18n.defaultLocale + , msg; if (val) { - return rule.message || 'Field "' + name + '" must not be filled in.'; + //return rule.message || 'Field "' + name + '" must not be filled in.'; + msg = rule.message || i18n.getText('model.validatesAbsent', + {name: name}, currentLocale); } + return msg; }, - confirmed: function (name, val, params, rule) { - var qual = rule.qualifier; + confirmed: function (name, val, params, rule, locale) { + var qual = rule.qualifier + , currentLocale = locale || geddy.config.i18n.defaultLocale + , msg; if (val != params[qual]) { - return rule.message || 'Field "' + name + '" and field "' + qual + - '" must match.'; + //return rule.message || 'Field "' + name + '" and field "' + qual + + // '" must match.'; + msg = rule.message || i18n.getText('model.validatesConfirmed', + {name: name, qual: qual}, currentLocale); } + return msg; }, - format: function (name, val, params, rule) { + format: function (name, val, params, rule, locale) { + var currentLocale = locale || geddy.config.i18n.defaultLocale + , msg; if (!rule.qualifier.test(val)) { - return rule.message || 'Field "' + name + '" is not correctly formatted.'; + //return rule.message || 'Field "' + name + '" is not correctly formatted.'; + msg = rule.message || i18n.getText('model.validatesFormat', + {name: name}, currentLocale); } + return msg; }, - length: function (name, val, params, rule) { - var qual = rule.qualifier; - var err; + length: function (name, val, params, rule, locale) { + var qual = rule.qualifier + , err + , currentLocale = locale || geddy.config.i18n.defaultLocale + , msg; if (!val) { return rule.message || 'Field "' + name + '" is required.'; } if (typeof qual == 'number') { if (val.length != qual) { - return rule.message || 'Field "' + name + '" must be ' + qual + - ' characters long.'; + //return rule.message || 'Field "' + name + '" must be ' + qual + + // ' characters long.'; + msg = rule.message || i18n.getText('model.validatesExactLength', + {name: name}, currentLocale); } } else { if (typeof qual.min == 'number' && val.length < qual.min) { - return rule.message || 'Field "' + name + '" must be at least ' + - qual.min + ' characters long.'; + //return rule.message || 'Field "' + name + '" must be at least ' + + // qual.min + ' characters long.'; + msg = rule.message || i18n.getText('model.validatesMinLength', + {name: name, min: qual.min}, currentLocale); } if (typeof qual.max == 'number' && val.length > qual.max) { - return rule.message || 'Field "' + name + '" may not be more than ' + - qual.max + ' characters long.'; + //return rule.message || 'Field "' + name + '" may not be more than ' + + // qual.max + ' characters long.'; + msg = rule.message || i18n.getText('model.validatesMaxLength', + {name: name, max: qual.max}, currentLocale); } } + return msg; }, - withFunction: function (name, val, params, rule) { - var func = rule.qualifier; + withFunction: function (name, val, params, rule, locale) { + var func = rule.qualifier + , currentLocale = locale || geddy.config.i18n.defaultLocale + , msg; if (typeof func != 'function') { throw new Error('withFunction validator for field "' + name + '" must be a function.'); } if (!func(val, params)) { - return rule.message || 'Field "' + name + '" is not valid.'; + //return rule.message || 'Field "' + name + '" is not valid.'; + msg = rule.message || i18n.getText('model.validatesWithFunction', + {name: name}, currentLocale); } + return msg; } }; diff --git a/test/model_create_user.js b/test/model_create_user.js index 4d5ff069..443b2ab9 100644 --- a/test/model_create_user.js +++ b/test/model_create_user.js @@ -1,6 +1,12 @@ // Load the basic Geddy toolkit require('../lib/geddy'); +geddy.config = { + i18n: { + defaultLocale: 'en-us' + } +}; + var model = require('../lib/model') , assert = require('assert') , tests; diff --git a/test/model_datatypes.js b/test/model_datatypes.js index 38cd937b..dafdfe54 100644 --- a/test/model_datatypes.js +++ b/test/model_datatypes.js @@ -1,6 +1,12 @@ // Load the basic Geddy toolkit require('../lib/geddy'); +geddy.config = { + i18n: { + defaultLocale: 'en-us' + } +}; + var model = require('../lib/model') , assert = require('assert') , tests;