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..e776336 --- /dev/null +++ b/src/i18n/en.js @@ -0,0 +1,29 @@ +export default { + validations: { + 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', + min: 'Minimum', + max: 'Maximum' + } +} \ 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..45fb780 --- /dev/null +++ b/src/i18n/pt.js @@ -0,0 +1,10 @@ +export default { + validations: { + 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' + } +} \ No newline at end of file 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() 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