Adds support for ember-i18n in ember-cp-validations
Using ember-intl? See: jasonmit/ember-intl-cp-validations
ember install ember-i18n-cp-validations
- If your application implements it's own
app/validators/messages.js
you'll want to change the import reference from:ember-cp-validations/validators/messages
toember-i18n-cp-validations/validators/message
- Instantiating the initializer is no longer necessary for testing
Implement the following validation messages across your translations:
// app/locales/en/translations.js
export default {
errors: {
description: "This field",
inclusion: "{{description}} is not included in the list",
exclusion: "{{description}} is reserved",
invalid: "{{description}} is invalid",
confirmation: "{{description}} doesn't match {{on}}",
accepted: "{{description}} must be accepted",
empty: "{{description}} can't be empty",
blank: "{{description}} can't be blank",
present: "{{description}} must be blank",
collection: "{{description}} must be a collection",
singular: "{{description}} can't be a collection",
tooLong: "{{description}} is too long (maximum is {{max}} characters)",
tooShort: "{{description}} is too short (minimum is {{min}} characters)",
before: "{{description}} must be before {{before}}",
after: "{{description}} must be after {{after}}",
wrongDateFormat: "{{description}} must be in the format of {{format}}",
wrongLength: "{{description}} is the wrong length (should be {{is}} characters)",
notANumber: "{{description}} must be a number",
notAnInteger: "{{description}} must be an integer",
greaterThan: "{{description}} must be greater than {{gt}}",
greaterThanOrEqualTo: "{{description}} must be greater than or equal to {{gte}}",
equalTo: "{{description}} must be equal to {{is}}",
lessThan: "{{description}} must be less than {{lt}}",
lessThanOrEqualTo: "{{description}} must be less than or equal to {{lte}}",
otherThan: "{{description}} must be other than {{value}}",
odd: "{{description}} must be odd",
even: "{{description}} must be even",
positive: "{{description}} must be positive",
date: "{{description}} must be a valid date",
onOrAfter: '{{description}} must be on or after {{onOrAfter}}',
onOrBefore: '{{description} must be on or before {{onOrBefore}}',
email: "{{description}} must be a valid email address",
phone: "{{description}} must be a valid phone number",
url: "{{description}} must be a valid url"
}
};
To change the errors prefix key from errors
to any other key, such as validationErrors
you simply add the following to app/validators/messages.js
. Now just amend your translation files to be nested under the validationErrors
object instead of errors
.
// app/validators/messages.js
import ValidatorsMessages from 'ember-i18n-cp-validations/validators/messages';
export default ValidatorsMessages.extend({
prefix: 'validationErrors'
});
To translate the description of a Validator specify the descriptionKey
to match a key in your translations.
// app/models/user.js
import { validator, buildValidations } from 'ember-cp-validations';
const Validations = buildValidations({
username: validator('presence', {
presence: true,
descriptionKey: 'key.for.username'
})
});
// app/locales/en/translations.js
export default {
key: {
for: {
username: 'Username'
}
}
}
// app/locales/sv/translations.js
export default {
key: {
for: {
username: 'Användarnamn'
}
}
}
By default, translations will be resolved to validatorPrefix.validatorType
. If you need to override this functionality entirely and specify your own message key, you can do so with messageKey
on the validator object.
// app/models/user.js
import { validator, buildValidations } from 'ember-cp-validations';
const Validations = buildValidations({
username: validator('presence', {
presence: true,
messageKey: 'username.missing'
})
});
Passing attributes into your translation is supported.
Similar to passing attributes via through to the t
method: i.e., i18n.t('errors.blank', { placeholder: i18n.t('age') })
you can also do this with your validator definition.
validator('presence', {
presence: true,
placeholder: Ember.computed('model.age', 'model.i18n.locale', {
// inject i18n into your model, optional..
return get(model, 'i18n').t('age');
})
})
errors: {
blank: '{{placeholder}} cannot be blank!'
}
To suppress console warnings for missing translations, you can do so by setting i18n.suppressWarnings
in config/environment
;
// config/environment.js
module.exports = function(environment) {
const ENV = {};
if (environment === 'test') {
ENV.i18n = ENV.i18n || {};
ENV.i18n.suppressWarnings = true;
}
return ENV;
}
Please open a GitHub an issue.
ember server
- Visit your app at http://localhost:4200.
ember test
ember test --server
ember build
For more information on using ember-cli, visit http://www.ember-cli.com/.