From 108bc13e4c701ad09e2f437075d7f33e538e2349 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 23 Aug 2017 17:34:04 +0200 Subject: [PATCH 1/2] add i18n API --- src/Confere.js | 34 +++++++++++++++++++++++++++++++--- src/i18n/en.js | 8 ++++++++ src/i18n/index.js | 8 ++++++++ src/i18n/pt.js | 8 ++++++++ test/Confere.js | 12 ++++++++++++ 5 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/i18n/en.js create mode 100644 src/i18n/index.js create mode 100644 src/i18n/pt.js diff --git a/src/Confere.js b/src/Confere.js index 3889705..c89b89c 100644 --- a/src/Confere.js +++ b/src/Confere.js @@ -1,11 +1,14 @@ import ValidationError from './validators/ValidatorError' import validators from './validators' +import i18n from './i18n' var config = { realTime: false, dateFormat: 'yyyy-MM-dd', validators, - rules: {} + rules: {}, + locale: 'en', + i18n } /** @@ -157,11 +160,11 @@ class ConfereJs { options.rules = rules } - static isEmpty (value) { + static isEmpty(value) { let undef const emptyValues = [undef, null, '', {}, []] for (const empty of emptyValues) { - if( value === empty ) return true + if (value === empty) return true } if (value instanceof Array && value.length === 0) return true @@ -169,6 +172,31 @@ class ConfereJs { return false } + /** + * + * @param locale + * @param key dot notation + * @param params + */ + t(key = '', params = {}) { + let locale = this.options.locale + let t = this.options.i18n + key = `${locale}.${key}` + key.split('.').map(item => { + if (typeof t !== 'undefined') { + t = t[item] + } + }) + if (typeof t === 'undefined') { + console.warn(`${key} translation doen't exists`) + return key + } + Object.keys(params).map(param => { + t = t.replace(`:${param}`, params[param]) + }) + return t + } + } export default ConfereJs diff --git a/src/i18n/en.js b/src/i18n/en.js new file mode 100644 index 0000000..f3007dd --- /dev/null +++ b/src/i18n/en.js @@ -0,0 +1,8 @@ +export default { + validations: { + digits: ':name field must be digits with size = :param1' + }, + fields: { + name: 'Name' + } +} \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js new file mode 100644 index 0000000..04548f8 --- /dev/null +++ b/src/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en' +import pt from './pt' + +export const i18n = { + en, pt +} + +export default i18n \ No newline at end of file diff --git a/src/i18n/pt.js b/src/i18n/pt.js new file mode 100644 index 0000000..0e31aa7 --- /dev/null +++ b/src/i18n/pt.js @@ -0,0 +1,8 @@ +export default { + validations: { + digits: 'campo :name deve conter apenas digitos com tamanho = :param1' + }, + fields: { + name: 'Nome' + } +} \ No newline at end of file diff --git a/test/Confere.js b/test/Confere.js index 69d22f6..40bc69a 100644 --- a/test/Confere.js +++ b/test/Confere.js @@ -69,4 +69,16 @@ describe('Confere.js', () => { }) }) + describe('t', () => { + it('should return campo Name deve conter apenas digitos com tamanho = 10', done => { + let config = { + locale : 'zk', + rules : {user:'required'} + } + let confere = new Confere(config) + expect(confere.t('validations.digits', {name : 'Nome', param1 : 10})).to.be('campo Nome deve conter apenas digitos com tamanho = 10') + done() + }) + }) + }); \ No newline at end of file From 260f2be07610aaa424b79c959843382c20d5159c Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 21 Feb 2018 10:45:17 +0200 Subject: [PATCH 2/2] Added pt and en --- src/i18n/en.js | 25 +++++++++++++++++++++++-- src/i18n/pt.js | 4 +++- src/validators/Numbers.js | 2 +- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/i18n/en.js b/src/i18n/en.js index f3007dd..e776336 100644 --- a/src/i18n/en.js +++ b/src/i18n/en.js @@ -1,8 +1,29 @@ export default { validations: { - digits: ':name field must be digits with size = :param1' + digits: ':name field must be digits with size = :param1', + digits_between : ':name must be digits with size between :params0 and :params1', + integer : ':name field must be digits with size = :params0', + + date: ':name field is not a valid date', + after: ':name field should be after :params0', + after_or_equal: ':name field should be equal or greater than :params0', + before: ':name field must be a date before :params0', + before_or_equal: ':name field must be a date before or equal :params0', + + min: ':name field must have at least :min chars in length', + max: ':name field must not pass :max chars in length', + email: ':name is not a valid email', + alpha: ':name field only allows alphabet', + alpha_dash: ':name field only allows alphabet, dash and underscore characters', + alpha_numeric: ':name field must be alpha numeric', + between: ':name field must be between :min and :max', + url: ':name field must be a valid url', + + }, fields: { - name: 'Name' + name: 'Name', + min: 'Minimum', + max: 'Maximum' } } \ No newline at end of file diff --git a/src/i18n/pt.js b/src/i18n/pt.js index 0e31aa7..45fb780 100644 --- a/src/i18n/pt.js +++ b/src/i18n/pt.js @@ -1,6 +1,8 @@ export default { validations: { - digits: 'campo :name deve conter apenas digitos com tamanho = :param1' + digits: 'campo :name deve conter apenas digitos com tamanho = :param1', + digits_between : 'campo :name deve ser dígitos com tamanho entre :params0 a :params1}', + integer : 'campo :name campo deve ser dígitos com tamanho = :params0', }, fields: { name: 'Nome' diff --git a/src/validators/Numbers.js b/src/validators/Numbers.js index c503181..3ca7ae9 100644 --- a/src/validators/Numbers.js +++ b/src/validators/Numbers.js @@ -18,7 +18,7 @@ export default { }) }, - integer (name, value) { + integer(name, value) { return new Promise((resolve, reject) => { if (Confere.isEmpty(value)) resolve() if (/^\d+$/.test(value)) resolve()