Keys rename detection for i18n command

This commit is contained in:
SleepWalker 2016-07-30 22:16:05 +03:00
parent a12544e819
commit 4f7f1d2273
5 changed files with 169 additions and 133 deletions

View File

@ -1,11 +1,12 @@
/* eslint-disable no-console */
import fs from 'fs';
import {sync as globSync} from 'glob';
import {sync as mkdirpSync} from 'mkdirp';
import chalk from 'chalk';
import prompt from 'prompt';
const MESSAGES_PATTERN = `../dist/messages/**/*.json`;
const LANG_DIR = `../src/i18n`;
const MESSAGES_PATTERN = '../dist/messages/**/*.json';
const LANG_DIR = '../src/i18n';
const DEFAULT_LOCALE = 'en';
const SUPPORTED_LANGS = [DEFAULT_LOCALE].concat('ru', 'be', 'uk');
@ -17,7 +18,7 @@ const SUPPORTED_LANGS = [DEFAULT_LOCALE].concat('ru', 'be', 'uk');
*/
let idToFileMap = {};
let duplicateIds = [];
const defaultMessages = globSync(MESSAGES_PATTERN)
const collectedMessages = globSync(MESSAGES_PATTERN)
.map((filename) => [filename, JSON.parse(fs.readFileSync(filename, 'utf8'))])
.reduce((collection, [file, descriptors]) => {
descriptors.forEach(({id, defaultMessage}) => {
@ -49,19 +50,42 @@ const defaultMessagesPath = `${LANG_DIR}/${DEFAULT_LOCALE}.json`;
let keysToUpdate = [];
let keysToAdd = [];
let keysToRemove = [];
const keysToRename = [];
const isNotMarked = (value) => value.slice(0, 2) !== '--';
try {
const prevMessages = JSON.parse(fs.readFileSync(defaultMessagesPath, 'utf8'));
keysToAdd = Object.keys(defaultMessages).filter((key) => !prevMessages[key]);
keysToRemove = Object.keys(prevMessages).filter((key) => !defaultMessages[key]).filter(isNotMarked);
const prevMessagesMap = Object.entries(prevMessages).reduce((acc, [key, value]) => {
if (acc[value]) {
acc[value].push(key);
} else {
acc[value] = [key];
}
return acc;
}, {});
keysToAdd = Object.keys(collectedMessages).filter((key) => !prevMessages[key]);
keysToRemove = Object.keys(prevMessages).filter((key) => !collectedMessages[key]).filter(isNotMarked);
keysToUpdate = Object.entries(prevMessages).reduce((acc, [key, message]) =>
acc.concat(defaultMessages[key] && defaultMessages[key] !== message ? key : [])
acc.concat(collectedMessages[key] && collectedMessages[key] !== message ? key : [])
, []);
} catch(err) {
// detect keys to rename, mutating keysToAdd and keysToRemove
[].concat(keysToAdd).forEach((toKey) => {
const keys = prevMessagesMap[collectedMessages[toKey]] || [];
const fromKey = keys.find((fromKey) => keysToRemove.indexOf(fromKey) > -1);
if (fromKey) {
keysToRename.push([fromKey, toKey]);
keysToRemove.splice(keysToRemove.indexOf(fromKey), 1);
keysToAdd.splice(keysToAdd.indexOf(toKey), 1);
}
});
} catch (err) {
console.log(chalk.yellow(`Can not read ${defaultMessagesPath}. The new file will be created.`), err);
}
if (!keysToAdd.length && !keysToRemove.length && !keysToUpdate.length) {
if (!keysToAdd.length && !keysToRemove.length && !keysToUpdate.length && !keysToRename.length) {
return console.log(chalk.green('Everything is up to date!'));
}
@ -69,17 +93,24 @@ console.log(chalk.magenta(`The diff relative to default locale (${DEFAULT_LOCALE
if (keysToRemove.length) {
console.log('The following keys will be removed:');
console.log(chalk.red('\n - ') + keysToRemove.join(chalk.red('\n - ')) + '\n');
console.log([chalk.red('\n - '), keysToRemove.join(chalk.red('\n - ')), '\n'].join(''));
}
if (keysToAdd.length) {
console.log('The following keys will be added:');
console.log(chalk.green('\n + ') + keysToAdd.join(chalk.green('\n + ')) + '\n');
console.log([chalk.green('\n + '), keysToAdd.join(chalk.green('\n + ')), '\n'].join(''));
}
if (keysToUpdate.length) {
console.log('The following keys will be updated:');
console.log(chalk.yellow('\n @ ') + keysToUpdate.join(chalk.yellow('\n @ ')) + '\n');
console.log([chalk.yellow('\n @ '), keysToUpdate.join(chalk.yellow('\n @ ')), '\n'].join(''));
}
if (keysToRename.length) {
console.log('The following keys will be renamed:\n');
console.log(keysToRename.reduce((str, pair) =>
[str, pair[0], chalk.yellow(' -> '), pair[1], '\n'].join('')
, ''));
}
prompt.start();
@ -119,21 +150,26 @@ function buildLocales() {
console.log(chalk.yellow(`Can not read ${destPath}. The new file will be created.`), err);
}
keysToRename.forEach(([fromKey, toKey]) => {
newMessages[toKey] = newMessages[fromKey];
delete newMessages[fromKey];
});
keysToRemove.forEach((key) => {
delete newMessages[key];
});
keysToUpdate.forEach((key) => {
newMessages[`--${key}`] = newMessages[key];
newMessages[key] = collectedMessages[key];
});
keysToAdd.concat(keysToUpdate).forEach((key) => {
newMessages[key] = defaultMessages[key];
keysToAdd.forEach((key) => {
newMessages[key] = collectedMessages[key];
});
const sortedKeys = Object.keys(newMessages).sort((a, b) => {
a = a.replace(/^\-+/, '');
b = b.replace(/^\-+/, '');
const sortedKeys = Object.keys(newMessages).sort((key1, key2) => {
key1 = key1.replace(/^\-+/, '');
key2 = key2.replace(/^\-+/, '');
return a < b || !isNotMarked(a) ? -1 : 1;
return key1 < key2 || !isNotMarked(key1) ? -1 : 1;
});
const sortedNewMessages = sortedKeys.reduce((acc, key) => {

View File

@ -146,33 +146,33 @@
"pages.rules.mainProvision4": "Рэгістрацыя карыстальніцкага акаўнта на сэрвісе бесплатна. Утварэнне акаўнта Ely.by магчыма толькі на старонцы {link}.",
"pages.rules.mainProvisions": "Асноўныя палажэнні",
"pages.rules.title": "Правілы сайта",
"services.accountAlreadyActivated": "Гэты акаўнт ужо актываваны",
"services.accountNotActivated": "Акаўнт не актываваны",
"services.doYouWantRequestKey": "Не жадаеце адаслаць новы код?",
"services.emailFrequency": "Калі ласка, супакойцеся, вы запытваеце Email дужа часта. Новы ключ можна будзе заказать {time}.",
"services.emailInvalid": "Указаны няправільны Email",
"services.emailIsTempmail": "Выкарыстанне сэрвісаў часовых Email адрасаў забаронена",
"services.emailNotAvailable": "На указаны Email адрас ужо зарэгістраваны акаўнт.",
"services.emailNotFound": "Не знойдзен акаўнт з указаным Email адрасам",
"services.emailRequired": "Калі ласка , укажыце Email",
"services.emailToLong": "Email занадта доўгі",
"services.forgotYourPassword": "забыліся на свой пароль",
"services.invalidPassword": "Вы ўказали няправільны пароль ад акаўнта.",
"services.keyNotExists": "Указаны ключ не існуе ці састарэў.",
"services.keyRequired": "Калі ласка, увядзіце код актывацыі",
"services.loginNotExist": "Нажаль, на Ely няма карыстальніка з указаным логінам.",
"services.loginRequired": "Калі ласка, укажыце Email ці нік",
"services.newPasswordRequired": "Калі ласка, запоўніце поле пароля",
"services.newRePasswordRequired": "Калі ласка, увядзіце паўтор пароля",
"services.passwordRequired": "Калі ласка, увядзіце пароль",
"services.passwordTooShort": "Пароль павінен быць не менш за 8 сімвалаў ў даўжыню",
"services.passwordsDoesNotMatch": "Паролі не супадаюць",
"services.rePasswordRequired": "Калі ласка, паўтарыце пароль",
"services.rulesAgreementRequired": "Для стварэння акаўнта вам неабходна прыняць правілы сэрвісу",
"services.suggestResetPassword": "Вы {link}?",
"services.usernameInvalid": "Нік змяшчае недапушчальныя сімвалы",
"services.usernameRequired": "Поле ніка абавязкова да запаўнення",
"services.usernameTooLong": "Занадта доўгі нік",
"services.usernameTooShort": "Нік занадта кароткі",
"services.usernameUnavailable": "Гэты нік ужо заняты"
"services.errorsDict.accountAlreadyActivated": "Гэты акаўнт ужо актываваны",
"services.errorsDict.accountNotActivated": "Акаўнт не актываваны",
"services.errorsDict.doYouWantRequestKey": "Не жадаеце адаслаць новы код?",
"services.errorsDict.emailFrequency": "Калі ласка, супакойцеся, вы запытваеце Email дужа часта. Новы ключ можна будзе заказать {time}.",
"services.errorsDict.emailInvalid": "Указаны няправільны Email",
"services.errorsDict.emailIsTempmail": "Выкарыстанне сэрвісаў часовых Email адрасаў забаронена",
"services.errorsDict.emailNotAvailable": "На указаны Email адрас ужо зарэгістраваны акаўнт.",
"services.errorsDict.emailNotFound": "Не знойдзен акаўнт з указаным Email адрасам",
"services.errorsDict.emailRequired": "Калі ласка , укажыце Email",
"services.errorsDict.emailToLong": "Email занадта доўгі",
"services.errorsDict.forgotYourPassword": "забыліся на свой пароль",
"services.errorsDict.invalidPassword": "Вы ўказали няправільны пароль ад акаўнта.",
"services.errorsDict.keyNotExists": "Указаны ключ не існуе ці састарэў.",
"services.errorsDict.keyRequired": "Калі ласка, увядзіце код актывацыі",
"services.errorsDict.loginNotExist": "Нажаль, на Ely няма карыстальніка з указаным логінам.",
"services.errorsDict.loginRequired": "Калі ласка, укажыце Email ці нік",
"services.errorsDict.newPasswordRequired": "Калі ласка, запоўніце поле пароля",
"services.errorsDict.newRePasswordRequired": "Калі ласка, увядзіце паўтор пароля",
"services.errorsDict.passwordRequired": "Калі ласка, увядзіце пароль",
"services.errorsDict.passwordTooShort": "Пароль павінен быць не менш за 8 сімвалаў ў даўжыню",
"services.errorsDict.passwordsDoesNotMatch": "Паролі не супадаюць",
"services.errorsDict.rePasswordRequired": "Калі ласка, паўтарыце пароль",
"services.errorsDict.rulesAgreementRequired": "Для стварэння акаўнта вам неабходна прыняць правілы сэрвісу",
"services.errorsDict.suggestResetPassword": "Вы {link}?",
"services.errorsDict.usernameInvalid": "Нік змяшчае недапушчальныя сімвалы",
"services.errorsDict.usernameRequired": "Поле ніка абавязкова да запаўнення",
"services.errorsDict.usernameTooLong": "Занадта доўгі нік",
"services.errorsDict.usernameTooShort": "Нік занадта кароткі",
"services.errorsDict.usernameUnavailable": "Гэты нік ужо заняты"
}

View File

@ -146,33 +146,33 @@
"pages.rules.mainProvision4": "The registration of the users account at server is free. Account creation Ely.by is only possible at that page {link}.",
"pages.rules.mainProvisions": "Main provisions",
"pages.rules.title": "Site rules",
"services.accountAlreadyActivated": "This account is already activated",
"services.accountNotActivated": "The account is not activated",
"services.doYouWantRequestKey": "Do you want to request a new key?",
"services.emailFrequency": "Please cool down, you are requesting Emails too often. New key can be retrieved {time}.",
"services.emailInvalid": "Email is invalid",
"services.emailIsTempmail": "Tempmail Email addresses is not allowed",
"services.emailNotAvailable": "This Email is already registered.",
"services.emailNotFound": "Specified Email is not found",
"services.emailRequired": "Email is required",
"services.emailToLong": "Email is too long",
"services.forgotYourPassword": "forgot your password",
"services.invalidPassword": "You have entered wrong account password.",
"services.keyNotExists": "The key is incorrect or has expired.",
"services.keyRequired": "Please, enter an activation key",
"services.loginNotExist": "Sorry, Ely doesn't recognise your login.",
"services.loginRequired": "Please enter Email or username",
"services.newPasswordRequired": "Please enter new password",
"services.newRePasswordRequired": "Please repeat new password",
"services.passwordRequired": "Please enter password",
"services.passwordTooShort": "Your password should be at least 8 characters length",
"services.passwordsDoesNotMatch": "The passwords does not match",
"services.rePasswordRequired": "Please retype your password",
"services.rulesAgreementRequired": "You must accept rules in order to create an account",
"services.suggestResetPassword": "Are you have {link}?",
"services.usernameInvalid": "Username is invalid",
"services.usernameRequired": "Username is required",
"services.usernameTooLong": "Username is too long",
"services.usernameTooShort": "Username is too short",
"services.usernameUnavailable": "This username is already taken"
"services.errorsDict.accountAlreadyActivated": "This account is already activated",
"services.errorsDict.accountNotActivated": "The account is not activated",
"services.errorsDict.doYouWantRequestKey": "Do you want to request a new key?",
"services.errorsDict.emailFrequency": "Please cool down, you are requesting Emails too often. New key can be retrieved {time}.",
"services.errorsDict.emailInvalid": "Email is invalid",
"services.errorsDict.emailIsTempmail": "Tempmail Email addresses is not allowed",
"services.errorsDict.emailNotAvailable": "This Email is already registered.",
"services.errorsDict.emailNotFound": "Specified Email is not found",
"services.errorsDict.emailRequired": "Email is required",
"services.errorsDict.emailToLong": "Email is too long",
"services.errorsDict.forgotYourPassword": "forgot your password",
"services.errorsDict.invalidPassword": "You have entered wrong account password.",
"services.errorsDict.keyNotExists": "The key is incorrect or has expired.",
"services.errorsDict.keyRequired": "Please, enter an activation key",
"services.errorsDict.loginNotExist": "Sorry, Ely doesn't recognise your login.",
"services.errorsDict.loginRequired": "Please enter Email or username",
"services.errorsDict.newPasswordRequired": "Please enter new password",
"services.errorsDict.newRePasswordRequired": "Please repeat new password",
"services.errorsDict.passwordRequired": "Please enter password",
"services.errorsDict.passwordTooShort": "Your password should be at least 8 characters length",
"services.errorsDict.passwordsDoesNotMatch": "The passwords does not match",
"services.errorsDict.rePasswordRequired": "Please retype your password",
"services.errorsDict.rulesAgreementRequired": "You must accept rules in order to create an account",
"services.errorsDict.suggestResetPassword": "Are you have {link}?",
"services.errorsDict.usernameInvalid": "Username is invalid",
"services.errorsDict.usernameRequired": "Username is required",
"services.errorsDict.usernameTooLong": "Username is too long",
"services.errorsDict.usernameTooShort": "Username is too short",
"services.errorsDict.usernameUnavailable": "This username is already taken"
}

View File

@ -146,33 +146,33 @@
"pages.rules.mainProvision4": "Регистрация пользовательского аккаунта на сервисе бесплатна. Создание аккаунта Ely.by возможно только на странице {link}.",
"pages.rules.mainProvisions": "Основные положения",
"pages.rules.title": "Правила сайта",
"services.accountAlreadyActivated": "Этот аккаунт уже активирован",
"services.accountNotActivated": "Аккаунт не активирован",
"services.doYouWantRequestKey": "Желаете отправить новый код?",
"services.emailFrequency": "Пожалуйста, успокойтесь, вы запрашиваете Email слишком часто. Новый ключ можно будет заказать {time}.",
"services.emailInvalid": "Указан неправильный Email",
"services.emailIsTempmail": "Использование сервисов временных Email адресов запрещено",
"services.emailNotAvailable": "На указанный Email адрес уже зарегистрирован аккаунт.",
"services.emailNotFound": "Не найдено аккаунта с указанным Email адресом",
"services.emailRequired": "Пожалуйста, укажите Email",
"services.emailToLong": "Email слишком длинный",
"services.forgotYourPassword": "забыли свой пароль",
"services.invalidPassword": "Вы указали неверный пароль от аккаунта.",
"services.keyNotExists": "Указанный ключ не существует или устарел.",
"services.keyRequired": "Пожалуйста, введите код активации",
"services.loginNotExist": "К сожалению, на Ely нет пользователя с указанным логином.",
"services.loginRequired": "Пожалуйста, укажите Email или ник",
"services.newPasswordRequired": "Пожалуйста, заполните поле пароля",
"services.newRePasswordRequired": "Пожалуйста, введите повтор пароля",
"services.passwordRequired": "Пожалуйста, введите пароль",
"services.passwordTooShort": "Пароль должен быть как минимум 8 символов в длинну",
"services.passwordsDoesNotMatch": "Пароли не совпадают",
"services.rePasswordRequired": "Пожалуйста, повторите пароль",
"services.rulesAgreementRequired": "Для создания аккаунта вам необходимо принять правила сервиса",
"services.suggestResetPassword": "Вы {link}?",
"services.usernameInvalid": "Ник содержит недопустимые символы",
"services.usernameRequired": "Поле ника обязательно к заполнению",
"services.usernameTooLong": "Слишком длинный ник",
"services.usernameTooShort": "Ник слишком короткий",
"services.usernameUnavailable": "Этот ник уже занят"
"services.errorsDict.accountAlreadyActivated": "Этот аккаунт уже активирован",
"services.errorsDict.accountNotActivated": "Аккаунт не активирован",
"services.errorsDict.doYouWantRequestKey": "Желаете отправить новый код?",
"services.errorsDict.emailFrequency": "Пожалуйста, успокойтесь, вы запрашиваете Email слишком часто. Новый ключ можно будет заказать {time}.",
"services.errorsDict.emailInvalid": "Указан неправильный Email",
"services.errorsDict.emailIsTempmail": "Использование сервисов временных Email адресов запрещено",
"services.errorsDict.emailNotAvailable": "На указанный Email адрес уже зарегистрирован аккаунт.",
"services.errorsDict.emailNotFound": "Не найдено аккаунта с указанным Email адресом",
"services.errorsDict.emailRequired": "Пожалуйста, укажите Email",
"services.errorsDict.emailToLong": "Email слишком длинный",
"services.errorsDict.forgotYourPassword": "забыли свой пароль",
"services.errorsDict.invalidPassword": "Вы указали неверный пароль от аккаунта.",
"services.errorsDict.keyNotExists": "Указанный ключ не существует или устарел.",
"services.errorsDict.keyRequired": "Пожалуйста, введите код активации",
"services.errorsDict.loginNotExist": "К сожалению, на Ely нет пользователя с указанным логином.",
"services.errorsDict.loginRequired": "Пожалуйста, укажите Email или ник",
"services.errorsDict.newPasswordRequired": "Пожалуйста, заполните поле пароля",
"services.errorsDict.newRePasswordRequired": "Пожалуйста, введите повтор пароля",
"services.errorsDict.passwordRequired": "Пожалуйста, введите пароль",
"services.errorsDict.passwordTooShort": "Пароль должен быть как минимум 8 символов в длинну",
"services.errorsDict.passwordsDoesNotMatch": "Пароли не совпадают",
"services.errorsDict.rePasswordRequired": "Пожалуйста, повторите пароль",
"services.errorsDict.rulesAgreementRequired": "Для создания аккаунта вам необходимо принять правила сервиса",
"services.errorsDict.suggestResetPassword": "Вы {link}?",
"services.errorsDict.usernameInvalid": "Ник содержит недопустимые символы",
"services.errorsDict.usernameRequired": "Поле ника обязательно к заполнению",
"services.errorsDict.usernameTooLong": "Слишком длинный ник",
"services.errorsDict.usernameTooShort": "Ник слишком короткий",
"services.errorsDict.usernameUnavailable": "Этот ник уже занят"
}

View File

@ -145,33 +145,33 @@
"pages.rules.mainProvision4": "Реєстрація на сервісі безкоштовна. Створення облікового запису Ely.by можливо тільки на сторінці {link}.",
"pages.rules.mainProvisions": "Основні положення",
"pages.rules.title": "Правила сайту",
"services.accountAlreadyActivated": "Цей обліковий запис вже активований",
"services.accountNotActivated": "Акаунт не активований",
"services.doYouWantRequestKey": "Бажаєте відправити новий код?",
"services.emailFrequency": "Будь ласка, заспокойтесь, ви запитуєте E-mail занадто часто. Новий ключ можна буде замовити {time}.",
"services.emailInvalid": "Вказано невірний E-mail",
"services.emailIsTempmail": "Використання сервісів тимчасових E-mail адрес заборонено",
"services.emailNotAvailable": "На вказану E-mail адресу вже зареєстровано обліковий запис",
"services.emailNotFound": "Аккаунта із зазначеною E-mail адресою не існує",
"services.emailRequired": "Будь ласка, вкажіть E-mail",
"services.emailToLong": "Email занадто довгий",
"services.forgotYourPassword": "забули свій пароль",
"services.invalidPassword": "Ви вказали невірний пароль від акаунту.",
"services.keyNotExists": "Вказаний ключ не існує або застарів.",
"services.keyRequired": "Будь ласка, введіть код активації",
"services.loginNotExist": "На жаль, на Ely немає користувача з зазначеним логіном.",
"services.loginRequired": "Будь ласка, вкажіть E-mail або нік",
"services.newPasswordRequired": "Будь ласка, заповніть поле пароля",
"services.newRePasswordRequired": "Будь ласка, введіть повторення пароля",
"services.passwordRequired": "Будь ласка, введіть пароль",
"services.passwordTooShort": "Пароль повинен бути як мінімум 8 символів у довжину",
"services.passwordsDoesNotMatch": "Паролі не співпадають",
"services.rePasswordRequired": "Будь ласка, повторіть пароль",
"services.rulesAgreementRequired": "Для створення аккаунта вам необхідно прийняти правила сервісу",
"services.suggestResetPassword": "Ви {link}?",
"services.usernameInvalid": "Нік містить неприпустимі символи",
"services.usernameRequired": "Поле ніку обов'язково до заповнення",
"services.usernameTooLong": "Занадто довгий нік",
"services.usernameTooShort": "Нік занадто короткий",
"services.usernameUnavailable": "Цей нік вже занятий"
"services.errorsDict.accountAlreadyActivated": "Цей обліковий запис вже активований",
"services.errorsDict.accountNotActivated": "Акаунт не активований",
"services.errorsDict.doYouWantRequestKey": "Бажаєте відправити новий код?",
"services.errorsDict.emailFrequency": "Будь ласка, заспокойтесь, ви запитуєте E-mail занадто часто. Новий ключ можна буде замовити {time}.",
"services.errorsDict.emailInvalid": "Вказано невірний E-mail",
"services.errorsDict.emailIsTempmail": "Використання сервісів тимчасових E-mail адрес заборонено",
"services.errorsDict.emailNotAvailable": "На вказану E-mail адресу вже зареєстровано обліковий запис",
"services.errorsDict.emailNotFound": "Аккаунта із зазначеною E-mail адресою не існує",
"services.errorsDict.emailRequired": "Будь ласка, вкажіть E-mail",
"services.errorsDict.emailToLong": "Email занадто довгий",
"services.errorsDict.forgotYourPassword": "забули свій пароль",
"services.errorsDict.invalidPassword": "Ви вказали невірний пароль від акаунту.",
"services.errorsDict.keyNotExists": "Вказаний ключ не існує або застарів.",
"services.errorsDict.keyRequired": "Будь ласка, введіть код активації",
"services.errorsDict.loginNotExist": "На жаль, на Ely немає користувача з зазначеним логіном.",
"services.errorsDict.loginRequired": "Будь ласка, вкажіть E-mail або нік",
"services.errorsDict.newPasswordRequired": "Будь ласка, заповніть поле пароля",
"services.errorsDict.newRePasswordRequired": "Будь ласка, введіть повторення пароля",
"services.errorsDict.passwordRequired": "Будь ласка, введіть пароль",
"services.errorsDict.passwordTooShort": "Пароль повинен бути як мінімум 8 символів у довжину",
"services.errorsDict.passwordsDoesNotMatch": "Паролі не співпадають",
"services.errorsDict.rePasswordRequired": "Будь ласка, повторіть пароль",
"services.errorsDict.rulesAgreementRequired": "Для створення аккаунта вам необхідно прийняти правила сервісу",
"services.errorsDict.suggestResetPassword": "Ви {link}?",
"services.errorsDict.usernameInvalid": "Нік містить неприпустимі символи",
"services.errorsDict.usernameRequired": "Поле ніку обов'язково до заповнення",
"services.errorsDict.usernameTooLong": "Занадто довгий нік",
"services.errorsDict.usernameTooShort": "Нік занадто короткий",
"services.errorsDict.usernameUnavailable": "Цей нік вже занятий"
}