What is ajv-i18n?
The ajv-i18n package provides internationalization (i18n) support for the Ajv JSON schema validator. It allows you to generate error messages in different languages, making it easier to localize your applications.
What are ajv-i18n's main functionalities?
Localizing error messages
This feature allows you to localize error messages generated by Ajv. In this example, the error messages are localized to Chinese using the `localize.zh` function.
const Ajv = require('ajv');
const localize = require('ajv-i18n');
const ajv = new Ajv();
const schema = { type: 'object', properties: { foo: { type: 'string' } }, required: ['foo'], additionalProperties: false };
const validate = ajv.compile(schema);
const data = { bar: 2 };
const valid = validate(data);
if (!valid) {
localize.zh(validate.errors); // Localize errors to Chinese
console.log(validate.errors);
}
Supporting multiple languages
This feature demonstrates the ability to support multiple languages. In this example, the error messages are localized to Russian using the `localize.ru` function.
const Ajv = require('ajv');
const localize = require('ajv-i18n');
const ajv = new Ajv();
const schema = { type: 'object', properties: { foo: { type: 'string' } }, required: ['foo'], additionalProperties: false };
const validate = ajv.compile(schema);
const data = { bar: 2 };
const valid = validate(data);
if (!valid) {
localize.ru(validate.errors); // Localize errors to Russian
console.log(validate.errors);
}
Other packages similar to ajv-i18n
i18next
i18next is a popular internationalization framework for JavaScript. It provides a complete solution for localizing your application, including translation management, language detection, and more. Unlike ajv-i18n, which focuses on localizing error messages from Ajv, i18next offers a broader range of i18n functionalities.
messageformat
messageformat is a library for handling both pluralization and gender in messages. It allows you to create complex messages with variable parts that can be translated into different languages. While ajv-i18n is specifically designed for localizing Ajv error messages, messageformat provides a more general solution for creating and managing localized messages.
ajv-i18n
Internationalised error messages for Ajv - superfast JSON validator for JSON Schema and JSON Type Definition.
Supported locales
1 added boolean schema, keywords const
, contains
, propertyNames
2 added keywords if
/then
/else
3 added messages for keywords unevaluatedProperties
, unevaluatedItems
, dependentRequired
4 keyword items
messages
5 JSON Type Definition
* discriminator
form messages are not translated
Please contribute locales that you need to use if they are missing or incomplete.
Install
Using npm:
npm install ajv-i18n
Usage
In node:
const Ajv = require("ajv")
const localize = require("ajv-i18n")
const ajv = Ajv({allErrors: true, messages: false})
const validate = ajv.compile(schema)
const valid = validate(data)
if (!valid) {
localize.ru(validate.errors)
console.log(ajv.errorsText(validate.errors, {separator: '\n'}))
}
To require only necessary locales (e.g., with browserify):
const localize_ru = require('ajv-i18n/localize/ru')
or
const localize = {
en: require('ajv-i18n/localize/en'),
ru: require('ajv-i18n/localize/ru'),
}
See Ajv docs for more information.
Tests
npm install
git submodule update --init
npm test
Contributing
Functions that localize error messages are generated using doT template localize.jst, JSON Schema messages and JSON Type Definition messages. Templates are pre-compiled, so doT is not a run-time dependency.
npm run build
- compiles functions to localize folder.
Contributors of locales
Enterprise support
ajv-i18n package is a part of Tidelift enterprise subscription - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers.
Security contact
To report a security vulnerability, please use the
Tidelift security contact.
Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues.
License
MIT