Adds support for ember-intl in ember-cp-validations
- Ember.js v3.28 or above
- Node.js v18 or above
ember-cp-validations
v6ember-intl
v6 or above
ember install @ember-intl/cp-validations
Implement the following validation messages across your translations:
# <project root>/translations/en.yaml
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"
email: "{description} must be a valid email address"
phone: "{description} must be a valid phone number"
url: "{description} must be a valid url"
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'
})
});
# translations/en-us.yml
key:
for:
username: 'Username'
# translations/sv-se.yml
key:
for:
username: 'Användarnamn'
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-intl/cp-validations/validators/messages';
export default ValidatorsMessages.extend({
prefix: 'validationErrors'
});
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'
})
});
# translations/en-us.yml
username:
missing: '{description} is missing'
# translations/sv-se.yml
username:
missing: '{description} saknas'
To suppress console warnings for missing translations, you can do so by setting intl_cp_validations.suppressWarnings
in config/environment
;
// config/environment.js
module.exports = function(environment) {
const ENV = {};
if (environment === 'test') {
ENV.intl_cp_validations = ENV.intl_cp_validations || {};
ENV.intl_cp_validations.suppressWarnings = true;
}
return ENV;
}
See the Contributing guide for details.
This project is licensed under the MIT License.